我正在尝试将 4 个视频合并为 1 个,并循环播放背景音频。2 个视频已经有声音,其他 2 个视频没有。当无声视频开始播放时,循环音频突然停止播放。
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
该命令的理念是可以合并任意数量的视频,并且音频将继续循环播放而不提供结束时长。如果我用循环音频覆盖所有音频,则此功能会成功,但如果我用循环音频覆盖视频,则无法实现。
以下是覆盖音频的示例:
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
我怎样才能让音频在所有 4 个视频(包括没有声音的视频)中循环播放?
这是我正在合并的视频的链接。
encoded_test1.mp4
encoded_test2.mp4
encoded_test3.mp4 (no sound)
修复此问题的最简单的方法是
-t
剪切音频文件,而longest
不是shortest
:如果您希望它是动态的,您可以
-shortest
使用-t
:剪切较短的视频流。不过,这会导致编码时间较长。
如果您还需要
-stream_loop -1
它(因为它后来被添加了),它应该仍然可以使用,并在视频结束时切断循环。为什么不起作用
duration=shortest
?因为视频中的音频流比视频流结束得早,并且amix
只考虑音频流。最优解决方案是以涵盖音频流直至视频结束的方式正确合并视频。