Как я могу использовать переключатель ffmpeg -map для выбора звуковой дорожки по ее кодеку?

Скажем, есть video.mkv с одним видеопотоком (0) и тремя звуковыми дорожками (1, 2, 3).

Аудиодорожки имеют разные кодеки, скажем, DTS, AAC и AC-3 (в любом порядке).

Я хочу создать выходной файл с видеопотоком -map 0:0 и только дорожкой AAC, что-то вроде:

ffmpeg -i video.mkv -map 0:0 -map 0:aac -codec copy output_with_aac_audio.mkv

В реальном сценарии я не знаю, какой из них является треком AAC (1, 2 или 3).

1 ответ1

2

Как отметил Том Ян в своем комментарии, вы можете использовать ffprobe для получения потоковых индексов:

$ ffprobe -loglevel error -select_streams a -show_streams -show_entries stream=index,codec_name:tags=:disposition= -of csv input.mkv
stream,1,vorbis
stream,2,aac
stream,3,mp3

Я предполагаю, что вы используете Linux, поэтому добавление awk даст вам только индекс (ы) потока aac. В этом примере результат показывает поток aac как индекс потока 2:

$ ffprobe -loglevel error -select_streams a -show_streams -show_entries stream=index,codec_name:tags=:disposition= -of csv input.mkv | awk -F',' '/aac/ {print $2}'
2

Затем используйте -map 0:2 в вашей команде ffmpeg .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .