我搜索了很多,但找不到确切的解决方案。而且我是 ubuntu 新手,不了解音乐文件的技术细节。实际上我想叠加 2 个 mp3 文件。假设我有两个输入文件
A.mp3 ==> duration 03:00
B.mp3 ==> Duration 07:00
现在我想要 C.mp3(输出文件),它是 A.mp3 和 B.mp3 的组合。但这里我想要的是“A.mp3 文件应该播放到 C.mp3 的结尾。这意味着如果 A.mp3 文件的音乐在 03:00 分钟后停止,那么它应该立即开始播放直到 07:00 分钟(B.mp3 的持续时间)。”
我尝试按照命令操作,但这不是我真正想要的
ffmpeg -y -i A.mp3 -i B.mp3 -filter_complex "[0:0][1:0] amix=inputs=2:duration=longest" -c:a libmp3lame C.mp3
上述命令将覆盖两个文件。但 A.mp3 一旦完成将不会重复。
先感谢您。
答案1
您可以使用电影源过滤器来实现这一点
ffmpeg -i long.mp3 -filter_complex "amovie=short.mp3:loop=999[s];[0][s]amix=duration=shortest" c.mp3
答案2
实现此目的最透明的方法是手动循环:自动循环仅在 ffmpeg 的非常新的版本中有效,而许多发行版中可能不可用。
首先创建一个 concat 文件A.ffconcat
,重复 A 3 次:
file 'A.mp3'
file 'A.mp3'
file 'A.mp3'
现在调整你的命令行:
ffmpeg -y -f concat -i A.ffconcat -i B.mp3 -filter_complex "[0:0][1:0] amix=inputs=2:duration=shortest" -c:a libmp3lame C.mp3