用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
友链