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

如何将序号步长为6的PNG图片拼接生成MP4视频(FPS=5)

解决FFmpeg处理步长为6的序号图片生成5fps MP4视频的问题

方案1:修正你的文本列表拼接法(保证帧率正确)

你的思路没问题,但原代码漏掉了帧率控制,直接运行的话视频速度会不对。给FFmpeg命令加上-r参数就能锁定输出帧率,修改后的代码如下:

import subprocess

# 配置参数
output_fps = 5
input_path = "/content/drive/MyDrive/depth/depthframe_%04d.png"
output_path = "/content/drive/MyDrive/depth.mp4"

# 生成步长为6的图片路径列表
frames = [input_path % i for i in range(0, 2671, 6)]  # 起始、结束数值按需调整

# 写入临时列表文件
with open('frames.txt', 'w') as f:
    for frame in frames:
        f.write(f"file '{frame}'\n")

# 修正后的FFmpeg命令:添加-r参数锁定帧率
command = [
    "ffmpeg",
    "-r", str(output_fps),  # 输入阶段指定帧率,确保帧间隔符合要求
    "-f", "concat",
    "-safe", "0",
    "-i", "frames.txt",
    "-c:v", "libx264",
    "-pix_fmt", "yuv420p",
    "-r", str(output_fps),  # 输出阶段再次指定,双重保险
    output_path
]

subprocess.run(command, check=True)

方案2:用FFmpeg glob模式直接处理(更省事)

如果你的图片命名规范(比如depthframe_0000.png、depthframe_0006.png这种),可以不用生成临时文件,直接用通配符匹配+排序滤镜搞定:

ffmpeg -framerate 5 -pattern_type glob -i "/content/drive/MyDrive/depth/depthframe_*.png" -vf "sort=key=filename" -c:v libx264 -pix_fmt yuv420p "/content/drive/MyDrive/depth.mp4"

各参数作用:

  • -framerate 5:直接设定视频帧率为5,保证播放速度正确
  • -pattern_type glob:允许用*通配符匹配所有目标图片
  • -vf "sort=key=filename":强制按文件名排序,避免系统自动排序乱序
  • 这种方法不用写Python循环,适合快速批量处理

原代码的问题点

你之前的代码没加帧率参数,FFmpeg的concat分离器默认会把每帧按1fps处理,导致视频播放速度飞快。加上-r参数后,FFmpeg会按指定帧率分配每帧的播放时长,就能得到正常速度的5fps视频了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:36:11