使用 ffmpeg 叠加两个 mp3 并重复最小的 mp3

使用 ffmpeg 叠加两个 mp3 并重复最小的 mp3

我搜索了很多,但找不到确切的解决方案。而且我是 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

相关内容