ffmpeg: selecione a faixa de áudio (-map) pelo ID do codec

0

Como posso usar a -mapopção ffmpeg para selecionar a faixa de áudio por seu codec?

Digamos que exista um video.mkv com um fluxo de vídeo (0) e três faixas de áudio (1, 2, 3).

As faixas de áudio têm codecs diferentes, como DTS, AAC e AC-3 (em qualquer ordem).

Quero produzir um arquivo de saída com o fluxo de vídeo -map 0:0e apenas a faixa AAC, algo como:

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

No cenário real, não sei qual é a faixa AAC (1, 2 ou 3).

Azevedo
fonte
1
Não tenho certeza se existe uma maneira de mapear por codec, mas pelo menos você pode verificar o índice com ffprobe.
Tom Yan

Respostas:

2

Como Tom Yan mencionou em seu comentário, você pode usar ffprobepara obter os índices de stream:

$ 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

Suponho que você esteja usando Linux, portanto, a adição awkfornecerá apenas o (s) índice (s) do (s) fluxo (s) aac. Neste exemplo, o resultado mostra o fluxo aac como índice do fluxo 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

Então use -map 0:2em seu ffmpegcomando.

llogan
fonte
Eu estou no windows. Como o ffmpeg não pode fazê-lo diretamente (ainda), você tem o mais próximo. Obrigado.
Azevedo