FFMPEG adiciona trilha de áudio ao converter formatos de vídeo

FFMPEG adiciona trilha de áudio ao converter formatos de vídeo

Fundo

Preciso converter arquivos AVI para H264 (MP4). Estou fazendo isso com sucesso com o seguinte:

-i mymovie.avi -c:v libx264 -crf 19 -preset slow -c:a libfaac -pix_fmt yuv420p -f mp4 -b:a 192k -y -an output.mp4

Estou chamando o comando por meio de aplicativos C # .Net Winforms, embora suspeite que isso terá pouco impacto na resposta.

A questão

Como adiciono uma faixa de áudio? Preciso adicionar um, pois preciso poder enviar os vídeos para o Instagram, que parece rejeitar arquivos sem trilha de áudio (para meu aborrecimento). Na realidade não preciso de uma faixa de áudio muito longa. Meus pensamentos foram alguns segundos de “silêncio” em formato MP3.

Acho que precisarei de áudio AAC como saída.

Só para constar, também percebo que o -ancomando não fornecerá áudio e retirei isso em minhas tentativas posteriores.

Tentativas até agora

Concluí que precisarei usar o -shortestcomando, pois o áudio será mais curto que o vídeo. Na realidade, adicionarei um MP3 em branco (ou similar) para que, durante a codificação, obtenha um fluxo de áudio incorporado no vídeo.

Eu também tentei usar o -mapcomando, mas sem sucesso.

Responder1

Ok, aqui está o comando que estou trabalhando. Descobri que não tinha o libfaacffmpeg em minha compilação, então troquei. Eu também não precisei das -mapopções, pois o FFMPEG pode lidar bem com 2 entradas sem configuração extra.

-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a libvo_aacenc -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4

As diferenças entre o meu original e o que funciona são:

  • libvo_aacenc substituilibfaac
  • -shortesté adicionado para lidar com áudio mais curto que vídeo
  • -ié usado para fornecer a entrada de áudio

Atualizar

O comando depois de algumas ótimas contribuições nos comentários é agora

-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4

Responder2

Você pode gerar um fluxo de áudio silencioso com oaevalsrcfonte de áudio:

ffmpeg -y -i test.avi -f lavfi -i aevalsrc=0 -c:v libx264 -crf 19 -preset slow \
-pix_fmt yuv420p -shortest output.mp4

Isso é mais fácil do que usar um arquivo de áudio em branco como entrada.

informação relacionada