使用FFmpeg将多张图片转视频时如何设置每张图片的显示时长?
FFmpeg设置图片转视频单张显示时长解决方案
完全可以通过FFmpeg实现该需求,分两种常用场景处理:
场景1:所有图片统一显示固定时长(如每张6秒)
你原本使用的-framerate 1参数代表每秒输出1帧,也就是每张图片显示1秒,要设置每张显示6秒,直接将帧率改为1/6即可,无需额外设置-loop和-t参数,参考命令:
ffmpeg -framerate 1/6 -pattern_type glob -i '*.jpg' -pix_fmt yuv420p video.mp4
场景2:每张图片设置不同的独立时长
如果需要给不同图片设置不一样的显示时长,需要先创建一个配置文件,例如命名为input.txt,按如下格式填写图片路径和对应时长:
file '1.jpg' duration 6 file '2.jpg' duration 3 file '3.jpg' duration 10 # 最后需要重复写一次最后一张图片的文件名,避免最后一帧时长失效 file '3.jpg'
之后使用concat demuxer模式读取配置文件生成视频,参考命令:
ffmpeg -f concat -safe 0 -i input.txt -pix_fmt yuv420p video.mp4
其中-safe 0参数允许FFmpeg读取任意路径的图片文件,不限制仅读取工作目录内的资源。
可选补充配置
如果你的图片分辨率不一致,可以在命令中加入缩放滤镜参数,统一输出视频的分辨率,避免编码报错,示例(统一输出1920*1080分辨率,自动黑边填充):
# 统一固定时长场景的示例 ffmpeg -framerate 1/6 -pattern_type glob -i '*.jpg' -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuv420p video.mp4
内容的提问来源于stack exchange,提问作者Ayèch Hamza
相关产品推荐
相关产品推荐

