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

使用FFmpeg拼接图片为视频失败的技术求助

解决FFmpeg图片拼接成视频失败的问题

首先你的命令存在几个关键错误:

  1. 最初的测试命令ffmpeg -f -i -r 24 -vcodec mjpeg -y test.mov里,-f参数缺少具体格式值,-i后也没有指定输入源,完全不符合FFmpeg语法要求。
  2. Python代码里的命令逻辑错误:使用-f image2模式时,-i后面不能直接用空格拼接所有图片文件名。image2是专门处理序列图片的格式,需要用通配符匹配命名规律的图片,或者用文件列表+concat滤镜处理无规律命名的图片。

下面分两种场景给出修复方案:

场景1:图片文件名按序列规律命名(如img_0001.jpg、img_0002.jpg...)

如果你的图片是按固定格式连续命名的,直接用通配符匹配即可,修改Python代码如下:

# 假设图片命名为 img_0001.jpg、img_0002.jpg...,%04d代表4位数字的序号
cmd = f'ffmpeg -f image2 -r 24 -i "img_%04d.jpg" -vcodec mjpeg -y {first_secv}.mkv'
  • -r 24放在-i前面,用于设置输入帧率(即每张图片持续1/24秒)
  • 通配符要和你的文件名匹配:如果是img1.jpg、img2.jpg,就用img%d.jpg;如果是3位序号,用%03d

场景2:图片文件名无规律,无法用通配符

这种情况需要先生成一个包含所有图片路径的文本列表,再用concat滤镜拼接,Python代码示例:

# 第一步:生成图片列表文本文件
list_file_path = 'image_list.txt'
with open(list_file_path, 'w', encoding='utf-8') as f:
    for img_path in jpg_list:
        # 写入每张图片的路径,路径包含空格时要加引号
        f.write(f"file '{img_path}'\n")
        # 指定每张图片的持续时间(1/24秒,对应24帧率)
        f.write(f"duration {1/24}\n")

# 第二步:构建FFmpeg拼接命令
cmd = f'ffmpeg -f concat -safe 0 -i {list_file_path} -vcodec mjpeg -r 24 -y {first_secv}.mkv'
  • -safe 0参数用于允许FFmpeg读取任意路径的文件,避免路径报错
  • 文本里的duration行可以确保每张图片严格按24帧率的时长显示

额外注意事项

  • 检查所有图片是否为FFmpeg支持的JPG格式,有没有损坏的文件
  • 确保执行命令时能找到FFmpeg可执行文件(可以在命令前加上FFmpeg的完整路径,比如C:/ffmpeg/bin/ffmpeg.exe)
  • mjpeg编码搭配mkv容器没问题,若需要更好的兼容性,也可以将输出后缀改为.avi或.mov

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:19