FFMPEG Wie extrahiere ich eine variable Anzahl von Audioströmen?

317
MurderOfPoes

Ich versuche, eine kleine Batchdatei zu erstellen, die beim Ziehen eines Videos alle Audioströme extrahiert.

ffmpeg.exe -i "%1" -map 0:a? -c:a copy "%1~extracted.aac" 

Dies scheint jedoch die gleiche Datei für jeden gefundenen Audiostrom zu überschreiben.

Ich möchte nicht die Anzahl der Audiospuren angeben, da diese variieren kann.

Vielen Dank im Voraus für Ihre Hilfe!

2

1 Antwort auf die Frage

1
Gyan

Es gibt keinen direkten Weg, dies zu tun.

Es gibt eine etwas mühsame Problemumgehung, die sich auf den Tee-Muxer stützt und auf die maximale Anzahl von Audioströmen, die Sie möglicherweise antreffen. Sagen wir, das ist 4.

Der Befehl lautet also

ffmpeg -i in.mp4 -c copy -map 0:a? -f tee "[select='a\:0':onfail=ignore]in-0.aac|[select='a\:1':onfail=ignore]in-1.aac| [select='a\:2':onfail=ignore]in-2.aac|[select='a\:3':onfail=ignore]in-3.aac" 

Alle vier Dateien werden erstellt, aber wenn eine Größe Null ist, ist der Stream nicht vorhanden. Wenn Sie also alle Ausgaben mit der Größe null löschen, werden alle Streams extrahiert. FFmpeg wählt das Ausgabeformat nicht automatisch aus, daher müssen Streams AAC sein. Verwenden Sie eine aktuelle Version von ffmpeg 4.0+

Die vorherigen Kommentare wurden gelöscht, da ich nicht die richtige Version von ffmpeg verwendet habe. Ihre Lösung funktioniert, danke! MurderOfPoes vor 5 Jahren 0