You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg将图片合成视频并指定单张图片显示时长?

使用FFmpeg为每张图片指定单独时长合成视频

完全可以实现,以下是两种常用方案:

方案1:基于concat解复用器(适合批量图片)

这是处理大量图片的高效方式:

  1. 创建文本列表文件(比如命名为image_list.txt),按以下格式编写,每行对应一张图片及其显示时长(单位:秒,100毫秒=0.1秒):
file '1.jpg'
duration 0.1
file '2.jpg'
duration 0.12
file '3.jpg'
duration 0.115

注意:最后一张图片的duration可以省略,FFmpeg会自动将其时长设为到视频结束的长度。

  1. 执行FFmpeg命令:
ffmpeg -f concat -safe 0 -i image_list.txt -c:v libx264 -pix_fmt yuv420p output.mp4

参数说明:

  • -f concat:指定使用concat解复用器读取列表文件
  • -safe 0:允许引用任意路径的文件(如绝对路径)
  • -c:v libx264:采用H.264编码输出视频
  • -pix_fmt yuv420p:确保视频兼容绝大多数播放器

方案2:基于filter_complex手动拼接(适合少量图片)

如果图片数量较少,可直接在命令中逐个定义时长并拼接:

ffmpeg -loop 1 -i 1.jpg -loop 1 -i 2.jpg -loop 1 -i 3.jpg \
-filter_complex \
"[0:v]trim=duration=0.1,setpts=PTS-STARTPTS[v0]; \
 [1:v]trim=duration=0.12,setpts=PTS-STARTPTS[v1]; \
 [2:v]trim=duration=0.115,setpts=PTS-STARTPTS[v2]; \
 [v0][v1][v2]concat=n=3:v=1:a=0[v]" \
-map "[v]" -c:v libx264 -pix_fmt yuv420p output.mp4

参数说明:

  • -loop 1:让单张图片循环播放,直到被trim截断时长
  • trim=duration=X:截取对应时长的画面片段
  • setpts=PTS-STARTPTS:重置时间戳,避免拼接后出现跳帧问题
  • concat=n=3:v=1:a=0:拼接3个视频流,仅保留视频轨道

额外注意事项

  • 确保所有图片分辨率一致,若不一致,可在滤镜链中添加scale或pad统一尺寸,例如:[0:v]trim=duration=0.1,scale=1920:1080,setpts=PTS-STARTPTS[v0]
  • 时长需精确转换为秒,例如115毫秒对应0.115秒
  • 如需添加音频,可额外指定音频输入文件,或用anullsrc滤镜生成静音音轨

内容的提问来源于stack exchange,提问作者hanshenrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:53:20