用FFmpeg将视频或音频自身重复多次并输出为新的视频或音频
🔁 循环重复在创作中的应用
将一段媒体自身重复多次生成新文件在多种创作场景中广泛使用:
- 循环背景视频:把几秒钟的动态背景素材重复延长到需要的时长,用于直播背景、舞台大屏、海报动态化等场景。
- 加长音频素材:将短促的音效、节拍、白噪声片段重复拼接,快速生成长时间的环境音或伴奏。
- 定长输出:配合
-t参数用无限循环素材生成精确时长的成片,无需手动计算重复次数。
📖 FFmpeg循环重复详解
FFmpeg让一段媒体自身重复多次,最常用的是输入选项 -stream_loop,它放在 -i 之前,控制该路输入循环读取多少次。另一种方法是concat滤镜自拼接,适合需要重编码的场景。核心要点如下:
-stream_loop N:把该路输入重复读取。注意语义是额外重复N次:-stream_loop 2播放原素材1遍再重复2遍,共3遍;-stream_loop 4共5遍,依此类推。-stream_loop -1:无限循环。必须配合-t 秒数或-shortest限制输出时长,否则FFmpeg不会停下来。-c copy:循环读取后直接拷贝流,不重新编码,速度快、无损。少数情况下容器时间戳不兼容导致异常时,去掉-c copy重新编码即可。- concat滤镜自拼接:把同一输入列出多份流标签再拼接,如
[0:v][0:a][0:v][0:a]concat=n=2:v=1:a=1表示把该文件连续播2遍。适合需要与其他滤镜串联处理的场景。 - 视频与音频通用:
-stream_loop对视频、音频文件同样有效,命令结构完全一致,只是输出扩展名不同。
广告
{{v.name}}
将视频重复播放3遍并输出为新视频(无损拷贝),代码如下
$ ffmpeg -stream_loop 2 -i input.mp4 -c copy output.mp4
将音频重复播放5遍并输出为新音频(无损拷贝),代码如下
$ ffmpeg -stream_loop 4 -i input.mp3 -c copy output.mp3
无限循环视频并输出为60秒的定长视频,代码如下
$ ffmpeg -stream_loop -1 -i input.mp4 -t 60 -c copy output_60s.mp4
无限循环音频并输出为30分钟的环境音,代码如下
$ ffmpeg -stream_loop -1 -i input.mp3 -t 1800 -c copy output_30min.mp3
用concat滤镜把视频自身拼接2遍(需重编码的场景),代码如下
$ ffmpeg -i input.mp4 -filter_complex "[0:v][0:a][0:v][0:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output_twice.mp4
循环拷贝出现时间戳异常时,重新编码解决,代码如下
$ ffmpeg -stream_loop 2 -i input.mp4 -c:v libx264 -c:a aac -pix_fmt yuv420p output_reencode.mp4