Os filtros filtram os fluxos de áudio por padrão no FFMpeg?

0

Eu tenho o seguinte comando no FFMpeg:

ffmpeg -i file_input.mp4 -filter_complex split=2[i1][i2];[i1]scale=trunc(oh*a/2)*2:480[o1];[i2]scale=trunc(oh*a/2)*2:640[o2] -map [o1] -map 0:a -pix_fmt yuv420p -vcodec libx264 file_out_1.mp4 -map [o2] -map 0:a -pix_fmt yuv420p -vcodec libx264 file_out_2.mp4

O que este comando faz é essencialmente dividir meu arquivo de origem em dois, dimensionar o vídeo em dois formulários diferentes e recodificar os fluxos de vídeo usando o codec x264 . Até aí tudo bem.

Agora, observe o sinal -map 0:a . Se eu remover isso de um dos dois fluxos, o arquivo de saída resultante não terá áudio algum. Isso me faz pensar se o filtro scale remove automaticamente o áudio do bouquet ou se é outra coisa.

Se eu alterar um pouco o comando para isso e tentar buscar o fluxo de áudio do resultado [o1] ou [o2], ainda não consigo obter som:

ffmpeg -i eFront_sample.mp4 -filter_complex split=2[i1][i2];[i1]scale=trunc(oh*a/2)*2:480[o1];[i2]scale=trunc(oh*a/2)*2:640[o2] -map [o1]:a -pix_fmt yuv420p -vcodec libx264 file_out_1.mp4 -map [o2]:a -pix_fmt yuv420p -vcodec libx264 file_out_2.mp4

O que estou perdendo aqui?

Obrigado antecipadamente.

    
por kstratis 24.04.2015 / 19:34

1 resposta

1

Seleção de vapor

Por padrão, um fluxo por tipo de fluxo será selecionado. Se você usar -map , esse comportamento padrão seleção de fluxo será desativado.

No entanto, geralmente é recomendado definir explicitamente as entradas e saídas do filtro, em vez de confiar nos padrões para evitar problemas inesperados de seleção de fluxo.

Escala

Em vez de trunc(oh*a/2)*2 , você provavelmente poderia usar apenas -2 . Da documentação do filtro de vídeo em escala:

If one of the values is -n with n > 1, the scale filter will also use a value that maintains the aspect ratio of the input image, calculated from the other specified dimension. After that it will, however, make sure that the calculated dimension is divisible by n and adjust the value if necessary.

O x264 exige que a largura e a altura sejam divisíveis por 2 ao gerar yuv420p, portanto, o -2 lidará com isso supondo que seu valor declarado seja aceitável.

Exemplo

Seu comando resultante poderia ser algo assim:

ffmpeg -i input.mp4 -filter_complex \
"[0:v]split=2[i1][i2]; \
 [i1]scale=-2:480,format=yuv420p[o1]; \
 [i2]scale=-2:640,format=yuv420p[o2]" \
-map "[o1]" -map 0:a -c:v libx264 output1.mp4 \
-map "[o2]" -map 0:a -c:v libx264 output2.mp4
    
por 24.04.2015 / 20:25