Estou tentando fazer um loop de áudio de fundo em 4 vídeos mesclados em 1. 2 vídeos já têm som, os outros 2 vídeos não. O áudio em loop para de tocar de repente quando os vídeos sem som começam a tocar.
ffmpeg -y -i merged_video.mp4 -stream_loop -1 -i bgmusic.mp3 -filter_complex "[0]volume=1.0[a];[1]volume=1.0[b];[a][b]amix=inputs=2:duration=shortest" -c:a libmp3lame merged_video_withAudio.mp4
A ideia do comando é que qualquer número de vídeos pode ser mesclado, e o áudio continuará em loop sem fornecer uma duração final. Essa habilidade é bem-sucedida se eu sobrescrever todo o áudio com o áudio em loop , mas não é possível se eu sobrepor o vídeo com o áudio em loop.
Aqui está um exemplo de como substituir áudio:
ffmpeg -i merged_video.mp4 -stream_loop -1 -i bgmusic.mp3 -shortest -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 merged_video_withAudio.mp4
Como posso fazer o áudio repetir em todos os 4 vídeos (incluindo aqueles sem som)?
Aqui está um link para os vídeos que estou mesclando.
encoded_test1.mp4
encoded_test2.mp4
encoded_test3.mp4 (no sound)
Aqui estão os vídeos e o script mesclados. Aqui está o vídeo de saída.
A maneira mais simples de consertar isso é
-t
cortar o arquivo de áudio e,longest
em vez deshortest
:Se você quiser que seja dinâmico, você pode usar
-shortest
em vez de-t
:para cortar no fluxo de vídeo mais curto. Isso tem uma desvantagem de codificação mais longa, no entanto.
Se você também precisar,
-stream_loop -1
como foi adicionado posteriormente, ele ainda deve funcionar e cortar o loop quando o vídeo terminar.Por que não
duration=shortest
funciona? Porque o fluxo de áudio no vídeo termina antes do fluxo de vídeo eamix
considera apenas fluxos de áudio.A solução mais adequada seria mesclar os vídeos adequadamente de forma que abrangesse o fluxo de áudio até o final do vídeo.