Konvertieren Sie bestimmte Video- und Audiospuren nur mit ffmpeg

26

Ich habe eine MKV-Datei ( vidui.mkv) mit 6 Spuren darin.

Track 1 - video - xvid - 1920x1080
Track 2 - video - xvid - 720x576
Track 3 - audio -  AAC - 1240kbps - English
Track 4 - audio -  AAC - 648kbps - Spanish
Track 5 - audio -  AAC - 648kbps - Commentary 1
Track 6 - audio -  AAC - 648kbps - Commentary 2

Ich möchte die obige Datei in ein mp4-Format mit einem h264-Video und einem AC3-Audio konvertieren. Außerdem möchte ich Spur 1 (Video) und Spur 5 (Audio) konvertieren.

Wenn ich benutze

ffmpeg.exe -i vidui.mkv -f mp4 -vcodec libx264 -acodec ac3 -crf 20 -sn -n vidui.mp4

Es konvertiert die erste Videospur und die erste Audiospur, aber ich möchte, dass es die Spuren 1 und 5 konvertiert.

hbelouf
quelle

Antworten:

43

Mit der -mapOption ( vollständige Dokumentation ) können Sie bestimmte Eingabestreams auswählen und auf Ihre Ausgabe abbilden.

Die einfachste mapSyntax, die Sie verwenden können, ist -map i:s, wo isich die ID der Eingabedatei und sdie ID des Streams befindet, wobei beide mit beginnen 0. In Ihrem Fall heißt das, wir wählen die Strecke 0und 4:

ffmpeg -i vidui.mkv -c:v libx264 -c:a ac3 -crf 20 -map 0:0 -map 0:4 vidui.mp4

Wenn Sie speziell Video-, Audio- oder Untertitelspuren auswählen möchten, können Sie auch Stream-Spezifizierer verwenden :

ffmpeg -i vidui.mkv -c:v libx264 -c:a ac3 -crf 20 -map 0:v:0 -map 0:a:1 vidui.mp4

Hier 0:v:0ist der erste Video-Stream und 0:a:1der zweite Audio-Stream.

slhck
quelle
Gibt es eine Möglichkeit, dies dynamisch zu tun? Angenommen, ich möchte dies nur für Audiospuren der Sprache X tun, und muss ffmpeg dies aufnehmen?
Freedo
@Freedo Ja, siehe Dokumentation. Zum Beispiel-map 0:m:language:eng
slhck