Como usar o ffmpeg para silenciar seções específicas de um vídeo

0

Gostaria de silenciar um vídeo para seções muito específicas.

Por exemplo, para um vídeo de 3 minutos, quero silenciar de 5 a 10 segundos e de 33 a 36 segundos.

Agora,

Eu sei como aplicar um filtro de áudio.

ffmpeg -i input.mp4 -af "volume=enable='between(t,5,10)':volume=0, volume=enable='between(t,33,36)':volume=0" output.mp4

Mas parece que o ffmpeg tenta recodificar todo o vídeo! O vídeo e o áudio foram completamente transcodificados.

Eu só preciso silenciar as seções específicas, eu gostaria de manter tudo o resto do mesmo.

Existe uma maneira rápida de executá-lo?

Obrigado

    
por Zhen Liu 20.04.2017 / 02:52

1 resposta

1

O que está faltando aqui é a especificação de quais codecs você deseja usar para a transcodificação dos fluxos de áudio e vídeo.

  • para especificar o codec de áudio, use: -c: a
  • para especificar o codec de vídeo, use: -c: v

Se você quiser simplesmente reempacotar os dados e não realizar transcodificação, poderá usar "copiar" como os codecs de vídeo / áudio (ou seja, "-c: uma cópia" "-c: v copy").

No entanto, não é possível "copiar" os fluxos de vídeo ou áudio quando TODOS os filtros estão sendo usados nesse fluxo. Pense - se você está literalmente fazendo uma "cópia" dos 1s e 0s que compõem o áudio e o vídeo originais, e criando uma saída com esses mesmos 1s e 0s, você não pode alterar nada sobre os dados. Os filtros alteram os bytes reais que compõem os dados, portanto, não é possível aplicar um filtro e também "copiar" os dados ao mesmo tempo.

No seu caso, você será forçado a transcodificar o fluxo de áudio porque está usando um filtro de áudio nesse fluxo. No entanto, você pode deixar o fluxo de vídeo sozinho usando o argumento "-c: v copy".

Para o seu fluxo de áudio, se for de qualidade, você pode especificar um codec de áudio descompactado usando "-c: a pcm_s16le". No entanto, IIRC que o codec não é compatível com o contêiner MP4.

    
por 20.04.2017 / 07:33