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

如何在不重命名文件的前提下,实现FFmpeg批量转换无固定起始编号的每日截图至视频?

如何在不重命名文件的前提下,实现FFmpeg批量转换无固定起始编号的每日截图至视频?

嘿,这个问题我之前折腾过!不用重命名文件的话,有两种靠谱的解决办法,我给你详细拆解下:

方法一:让FFmpeg自动识别图片序列(无需手动指定编号)

如果你的FFmpeg版本不算太老(3.0及以上),可以直接用glob模式让FFmpeg自动抓取所有截图并按正确顺序排序,完全不用管起始编号。

修改后的FFmpeg命令如下:

ffmpeg.exe -f image2 -framerate 25 -pattern_type glob -sort_flags +sequence -i "Y:\ft\!new_folder!\*.jpg" -c:v libx265 -b:v 5000k -g 100 "Y:\ft\!new_folder!.mp4"

关键参数说明:

  • -pattern_type glob:让FFmpeg匹配目标文件夹里所有.jpg格式的文件,不用依赖固定的数字序列模板;
  • -sort_flags +sequence:强制FFmpeg按文件名的数字序列排序(避免默认字典序导致的10.jpg排在2.jpg前面的问题),保证视频里的画面顺序和截图拍摄顺序一致。

这种方法最简单,不用额外写批处理逻辑,直接改FFmpeg命令就行。

方法二:在批处理中自动获取起止编号,传给FFmpeg

如果你更倾向于保留原来的%05d序列模式,可以在批处理里先自动找出截图的最小和最大编号,再把这两个值传给FFmpeg,精准控制序列范围。

完整的批处理代码如下:

@echo off
setlocal enabledelayedexpansion

:: 定义目标文件夹路径
set "target_folder=Y:\ft\!new_folder!"
:: 初始化最小/最大编号(设一个足够大/小的初始值)
set "min_number=99999"
set "max_number=0"

:: 遍历文件夹里的所有jpg截图,提取文件名中的数字部分
for %%f in ("%target_folder%\*.jpg") do (
    set "file_name=%%~nf"
    :: 假设文件名是纯5位数字,直接取文件名作为编号
    set "current_num=!file_name!"
    :: 更新最小编号
    if !current_num! lss !min_number! set "min_number=!current_num!"
    :: 更新最大编号
    if !current_num! gtr !max_number! set "max_number=!current_num!"
)

:: 调用FFmpeg,传入自动获取的起止编号
ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number !min_number! -end_number !max_number! -i "%target_folder%\%%05d.jpg" -c:v libx265 -b:v 5000k -g 100 "Y:\ft\!new_folder!.mp4"

endlocal

代码逻辑说明:

  • enabledelayedexpansion:开启延迟变量扩展,确保循环里的变量能正确更新;
  • 遍历所有截图文件,提取每个文件的文件名(不含扩展名)作为编号;
  • 通过逐个比较,找出所有编号里的最小值和最大值;
  • 最后把这两个值分别传给FFmpeg的-start_number和-end_number参数,让FFmpeg精准覆盖所有截图文件。

注意事项:

  • 方法二假设你的截图文件名是纯5位数字(比如03213.jpg),如果文件名带有其他字符,需要调整提取数字的逻辑;
  • 两种方法都完全不需要重命名文件,完美适配你的需求。

备注:内容来源于stack exchange,提问作者getho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:37:56