我们如何从音频文件中使用 ffmpeg 创建循环音频?
用于循环音频的命令是
ffmpeg -lavfi "amovie=audio.wav:loop=3" out.wav
Run Code Online (Sandbox Code Playgroud)
但这会创建整个音频的循环文件,而不是其中的一部分。
我需要的是:如果音频文件的持续时间为 4 分 30 秒,我想获取 2 分 25 秒到 3 分 55 秒的部分音频并循环播放
我怎样才能做到这一点?
您可以使用atrim过滤器首先将输入修剪为所需的部分,然后使用aloop过滤器循环该部分。
ffmpeg -i input.m4a \
-filter_complex " \
[0:a] \
atrim=0:3,asetpts=PTS-STARTPTS, \
asetrate=48000,aloop=2:size=3*48000 \
[outa]" \
-map "[outa]" \
-c:a aac \
out.m4a
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,请注意以下设置:
atrimaloop=2- 你得到一次原始音频,和两个循环)size=3*48000-c:a aac)如果您想要不同的持续时间,例如从 5 秒到 10 秒,请更改atrim=5:10,然后更改size=5*48000。
不幸的是,aloop过滤器需要设置样本中循环部分的大小——在我们的例子中,是 3 秒?48,000 个样本。由于您不知道输入采样率,因此您必须首先使用asetrate滤波器将其设置为 48,000 Hz 。
如果有更简单的方法,我很高兴知道它,但不幸的是amovie输入源不允许即时修剪。
另一种选择可能是:
ffmpeg -ss 0 -i input.m4a \
-filter_complex " \
[0:a]asetrate=48000,aloop=1:size=3*48000[outa]" \
-map "[outa]" \
-t 6 \
-c:a aac \
out.m4a
Run Code Online (Sandbox Code Playgroud)
在这里,输入没有被修剪;它只是确定循环长度的循环大小。但是,您必须使用 指定总输出持续时间(即 6 秒)-t。如果您想要不同的偏移量,请使用ffmpeg -ss <timestamp> -i input.m4a,其中<timestamp>是查找点。