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

如何在截图未全部生成时使用FFmpeg将其转换为MP4视频

实现FFmpeg实时转码生成中的截图序列

你的需求非常典型——面对超大容量的截图序列,边生成边转码能极大节省存储空间和等待时间。下面分两种场景给你解决方案:

方法一:用FFmpeg原生的follow参数(推荐,FFmpeg 4.1+可用)

FFmpeg从4.1版本开始,image2 demuxer支持follow参数,可以让它持续监听序列文件的新增,不用等所有截图生成完就开始转码。

修改后的命令如下:

ffmpeg -framerate 15 -f image2 -pattern_type sequence -follow 1 -i %06d.png -s hd1080 -vcodec libx264 -r 30 timelapse.mp4

参数解释:

  • -f image2:明确指定使用image2 demuxer处理图片序列
  • -pattern_type sequence:告诉FFmpeg我们处理的是按数字序列命名的文件(比如000001.png、000002.png)
  • -follow 1:开启持续监听模式,FFmpeg会不断检查是否有新的序列文件生成,直到你手动终止进程(Ctrl+C)
  • 其他参数保持你原来的设置:-framerate 15是输入的截图帧率(每秒15张),-r 30是输出视频的帧率,libx264保证压缩效率,hd1080输出1080P分辨率

方法二:旧版FFmpeg兼容方案(用脚本配合管道)

如果你的FFmpeg版本低于4.1,不支持follow参数,可以用shell脚本结合inotifywait(需要先安装inotify-tools)来监控截图目录,实时把新生成的图片传给FFmpeg:

  1. 先安装inotify-tools(以Debian/Ubuntu为例):
sudo apt install inotify-tools
  1. 创建一个脚本transcode_live.sh:
#!/bin/bash
# 监控当前目录下的png文件新增事件
inotifywait -m -e create --format '%f' . | while read filename; do
  # 只处理符合%06d.png格式的截图
  if [[ $filename =~ ^[0-9]{6}\.png$ ]]; then
    # 将图片内容通过管道传给FFmpeg
    cat "$filename"
  fi
done | ffmpeg -framerate 15 -f image2pipe -vcodec png -s hd1080 -vcodec libx264 -r 30 timelapse.mp4
  1. 给脚本加执行权限并运行:
chmod +x transcode_live.sh
./transcode_live.sh

注意事项:

  • 确保截图的命名严格遵循%06d.png格式(比如从000001.png开始,连续递增,没有跳号),否则FFmpeg可能会中断或漏帧
  • 转码过程中不要手动删除正在生成的截图,建议等转码完成后再清理(或者脚本里可以加上转码完成后自动删除对应截图的逻辑,比如在cat "$filename"后加rm "$filename")
  • 如果游戏生成截图的速度不稳定,FFmpeg会自动缓冲,不用担心帧率波动影响输出视频的流畅度
  • 终止转码时用Ctrl+C,FFmpeg会自动完成视频的收尾工作,生成完整的MP4文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:13:11