Você pode usar a -map
opção . Caso contrário, você estará limitado ao comportamento padrão seleção de fluxo , que pode não escolher o que você deseja.
Exemplo
Isso mapeará o áudio da segunda entrada ( 2.avi
):
-map 1:a
-
Como
ffmpeg
começa a contar a partir de 0, o primeiro ID de entrada é 0, o segundo é 1, o terceiro é 2, etc. -
Se a segunda entrada tiver vários fluxos de áudio, isso mapeará todos eles. Se, por exemplo, você quiser apenas o quarto fluxo de áudio da segunda entrada, use
-map 1:a:3
.
Com filtragem
Eu tenho a tendência de informar explicitamente ffmpeg
qual fluxo usar para evitar ambigüidade em vez de confiar nos padrões. Então, seu comando pode parecer com este exemplo abaixo:
ffmpeg
-i 1.avi -i 2.avi -i 3.avi -i 4.avi
-filter_complex "
nullsrc=size=640x480 [base];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=320 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=320:y=240[v]
"
-map "[v]" -map 1:a -c:v libx264 -shortest output.mkv
-
Observe as duas instâncias do
[v]
e do1:a
: elas mapearão o vídeo do filtro e o áudio da segunda entrada (2.avi
). -
Eu adicionei
-shortest
para garantir que a saída termine quando a entrada mais curta terminar ([v]
ou1:a
).