如何使用ffmpeg将不同命名的图片合成为演示视频?
无统一命名规则图片通过FFmpeg合成视频方法
你提到的ffmpeg -i image-%03d.png video.webm是ffmpeg针对固定规则命名序列图的内置读取模式,仅能匹配带连续序号的文件名。要处理pilot.png、airplane.png这类自定义名称的无规则图片,可通过以下两种方案实现:
方案1:Concat分离器(推荐,支持自定义播放顺序、单张图片停留时长)
该方案灵活性最高,是自定义图片合成的首选方案:
- 先在图片所在目录新建纯文本文件(例如命名为
img_list.txt),按照你需要的播放顺序逐行写入图片配置,格式参考如下:file 'pilot.png' duration 2.5 file 'airplane.png' duration 3 file 'landing_scene.png' duration 4 file 'end_card.png'注意:最后一张图片不需要配置duration参数,但必须单独补一行对应文件的
file 'xxx.png'条目,否则最后一帧会被ffmpeg截断,这是concat分离器的已知特性。
如果不需要给每张图单独设置停留时长,可省略所有duration行,仅保留file条目,后续在命令中统一指定单图停留时长即可。 - 执行合成命令:
核心参数说明:ffmpeg -f concat -safe 0 -i img_list.txt -framerate 25 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm-f concat:指定使用concat分离器解析输入列表-safe 0:关闭路径安全限制,支持任意命名的文件、相对/绝对路径引用-framerate 25:设置输出视频的编码帧率,若已在列表中为每张图单独指定duration,该参数不影响单图停留时长,仅影响编码流畅度-c:v libvpx-vp9 -crf 30 -b:v 0:webm格式的推荐编码参数,crf取值范围0-63,数值越小画质越高、输出文件体积越大
方案2:Glob模式匹配(无需额外配置文件,仅支持按文件名字典序播放)
如果不需要自定义播放顺序,接受所有图片按文件名的字典序排序播放,可以直接用glob匹配模式,无需创建额外列表文件:
ffmpeg -framerate 1/3 -pattern_type glob -i '*.png' -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm
其中-framerate 1/3表示每张图片停留3秒,可根据需求调整,例如1/5为每张停留5秒,1为每张停留1秒。
注:Windows原生cmd环境对glob模式支持较差,该方案更推荐在Linux/macOS终端下使用
常见适配说明
- 建议提前将所有图片调整为相同分辨率,否则ffmpeg会默认以第一张图片的分辨率为编码基准,后续尺寸不符的图片会被拉伸变形。如果图片尺寸不统一,可以添加缩放滤镜自动适配,例如要输出1920*1080分辨率、图片居中补黑边的效果,在命令中加上
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2"即可。 - 如果需要添加背景音乐,只需在输入参数中追加音频文件、指定音频编码即可,示例命令:
其中ffmpeg -f concat -safe 0 -i img_list.txt -i bgm.mp3 -c:v libvpx-vp9 -c:a libopus -shortest output.webm-shortest参数表示视频长度以时长更短的输入为准,一般为音频播放结束后即终止视频。
内容的提问来源于stack exchange,提问作者UserErrorLoL
相关产品推荐
相关产品推荐

