将音频文件循环播放至指定长度

将音频文件循环播放至指定长度

我目前面临的一个问题是,我需要获取某个 mp3 文件并制作另一个 mp3 文件,其中第一个文件播放给定的时间,如果需要则循环播放。我最好寻找一个命令行解决方案。尝试过 ffmpeg 和 sox,但找不到解决方案。所以现在我正在寻找一些选项。

进一步解释:假设我有一个文件 foo.mp3,我需要创建一个具有给定长度(比如说 30 秒)且包含 foo.mp3 文件的文件 bar.mp3,如果 foo.mp3 短于 30 秒,则它会循环多次,直到填满整个 30 秒。我希望现在我所要求的已经很清楚了。

答案1

ffmpeg 可以为你做到这一点,但你可能需要两个步骤

可选步骤 1:查找原始文件的长度

ffmpeg -i '/path/to/original.mp3' 2>&1 | grep 'Duration :'

现在您可以计算出需要的重复次数。或者,您也可以使用“安全”的重复次数,因为重复次数太多也不会造成伤害。

步骤 2:将锉刀打成环并将其剪至所需长度

用此内容创建“concat.txt”

file '/path/to/original.mp3'
file '/path/to/original.mp3'
...
file '/path/to/original.mp3'
file '/path/to/original.mp3'
file '/path/to/original.mp3'

它必须至少包含与重复次数相同的行数,但同样,更多也不会有害,因此您可以使用安全的(太高)行数

并运行 ffmpeg(假设您需要 123.456 秒):

ffmpeg -t 123.456 -f concat -i concat.txt -c copy -t 123.456 output.mp3

答案2

这可以通过使用(附加)以下命令来实现:

-stream_loop -1 -i D:\music\mp4.mp3

这意味着 D:\music\mp4.mp3 文件应该无限循环,直到视频结束。

https://ffmpeg.org/ffmpeg.html

答案3

单线解决方案:

ffmpeg -f concat -safe 0 -i <(for i in {1..8} ; do echo "file '$PWD/sample.wav'" ; done) -c copy output.wav

相关内容