Estou adicionando áudio a um arquivo de vídeo usando ffmpeg assim
ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4
No entanto, isso estende o arquivo de vídeo de saída para que seja o comprimento do arquivo de áudio, se for maior que o vídeo. O uso de -shortest reduz o arquivo de vídeo se ele for menor que o vídeo. Então, existe um sinalizador para dizer ao ffmpeg para cortar a duração do vídeo de saída para o comprimento do vídeo de entrada?
Respostas:
Acredito que você pode alcançar o objetivo desejado usando a opção -filter_complex e a opção apad filter para extrair o áudio com silêncio no final, se o vídeo for mais longo. Seu comando seria:
ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4
Isso pressupõe que o áudio que você deseja esteja no primeiro fluxo do audiofile.wav, a sintaxe [A: B] diz para pegar o fluxo B'th da entrada A'th (ambos começando com 0, então [1: 0] é o 1º fluxo da 2ª entrada ou audiofile.wav acima).
Detalhes em: https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68
fonte
-filter_complex
forças de opção reencodar - é, por exemplo, possível executarffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4
, mas nãoffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
-shortest
é o que você deseja.Não há sinalizador para automatizar esta decisão.
EDITAR
Inspirado pela resposta do @ deadcode, preciso deixar claro que "nenhum sinalizador para automatizar" obviamente não é verdadeiro, se você estiver disposto a recodificar : nesse caso, siga
apad
as sugestões do @deadcode.Se, no entanto, você deseja evitar a recodificação (ou seja
-c:v copy
), a resposta permanece.Existe uma solução alternativa usando o
ffconcat
desmuxador, mas ele precisa de um pouco de trabalho:.
ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4
Isso sintetizará o
apad
filtro sem um gráfico de filtro, permitindo assim um mux sem recodificação.fonte
-shortest
, use esta solução alternativa se você quiser adicionar silêncio sem recodificar.Se você souber o tamanho do seu arquivo de vídeo, poderá fazer isso usando
Onde 43 é a duração do seu arquivo de vídeo em segundos.
fonte