Respostas:
Use a -map
opção para escolher seus fluxos. A seleção de fluxo padrão escolherá apenas um de cada tipo de fluxo; é por isso -map
que deve ser usado.
ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
0:v
- O 0
refere-se à primeira entrada que é video.mkv
. O v
meio "selecione o tipo de fluxo de vídeo".
0:a:0
- O 0
refere-se à primeira entrada que é video.mkv
. O a
meio "selecione o tipo de fluxo de áudio". O último 0
refere-se ao primeiro fluxo de áudio desta entrada. Se apenas 0:a
for usado, todos os fluxos de vídeo serão mapeados.
1:a
- O 1
refere-se à segunda entrada que é audio.mp3
. O a
meio "selecione o tipo de fluxo de áudio".
-codec copy
vai transmitir cópia (re-MUX) em vez de codificar. Se você precisar de um codec de áudio específico, especifique -c:v copy
(para manter o vídeo) e, por exemplo, -c:a libmp3lame
para recodificar o fluxo de áudio em MP3.
-shortest
finalizará a saída quando a entrada mais curta terminar.
ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
amerge
filtro é usado aqui, para que o áudio não possa ser copiado em fluxo neste exemplo.-codec copy
, mas eu consertei isso (versão diferente do ffmpeg), o outro problema que tive foi com o -map
, ele reclamou do número errado de fluxos.
-map 0:v -map 1:a
. Suponho que isso significa tirar o vídeo do primeiro arquivo (video.mkv) e depois pegar o áudio do segundo arquivo (audio.mp4) para criar output.mkv ... Não sei ao certo o que -map 0:a:0
é isso. Excluí-o e obtenho os resultados desejados.