Konwertuj określone ścieżki wideo i audio tylko za pomocą ffmpeg

26

Mam plik MKV ( vidui.mkv) z 6 ścieżkami.

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

Chcę przekonwertować powyższy plik do formatu mp4 z jednym wideo h264 i jednym dźwiękiem AC3. Chcę też przekonwertować ścieżkę 1 (wideo) i ścieżkę 5 (audio).

Jeśli użyję

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

konwertuje pierwszą ścieżkę wideo i pierwszą ścieżkę audio, ale chciałbym to zrobić, konwertować ścieżkę 1 i ścieżkę 5.

Hbelouf
źródło

Odpowiedzi:

43

Możesz użyć -mapopcji ( pełna dokumentacja ), aby wybrać określone strumienie wejściowe i zamapować je na wynik.

Najprostszą mapskładnią, jakiej można użyć, jest -map i:sgdzie iidentyfikator pliku wejściowego i sidentyfikator strumienia, oba zaczynające się od 0. W twoim przypadku oznacza to, że wybieramy śledzenie 0i 4:

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

Jeśli chcesz wybrać ścieżki wideo, audio lub napisów, możesz także użyć specyfikatorów strumienia :

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

Oto 0:v:0pierwszy strumień wideo i 0:a:1drugi strumień audio.

slhck
źródło
Czy istnieje sposób, aby to zrobić dynamicznie? Powiedz, że chcę to zrobić tylko dla ścieżek audio w języku X, i czy ffmpeg to odbierze?
Freedo,
@ Freedo Tak, zapoznaj się z dokumentacją. Na przykład-map 0:m:language:eng
slhck,