Конвертируйте определенные видео и аудио треки только с помощью ffmpeg

26

У меня есть файл MKV ( vidui.mkv) с 6 треками в нем.

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

Я хочу преобразовать вышеуказанный файл в формат mp4 с одним видео h264 и одним аудио AC3. Также я хочу конвертировать трек 1 (видео) и трек 5 (аудио).

Если я использую

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

он преобразует первую видеодорожку и первую звуковую дорожку, но я хотел бы, чтобы она преобразовала дорожку 1 и дорожку 5.

hbelouf
источник

Ответы:

43

Вы можете использовать -mapопцию ( полная документация ), чтобы выбрать определенные входные потоки и отобразить их на свой выход.

Самый простой mapсинтаксис, который вы можете использовать -map i:s, это где iидентификатор входного файла и идентификатор sпотока, оба начинаются с 0. В вашем случае это означает, что мы выбираем трек 0и 4:

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

Если вы хотите выбрать видео, аудио или субтитры, вы также можете использовать спецификаторы потока :

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

Здесь 0:v:0первый поток видео и 0:a:1второй поток аудио.

slhck
источник
Есть ли способ сделать это динамически? Скажем, я хочу сделать это только для звуковых дорожек на языке X, и ffmpeg подхватил это?
Freedo
@ Свободно Да, пожалуйста, смотрите документацию. Например-map 0:m:language:eng
slhck