@echo off
setlocal enabledelayedexpansionset "parent_dir=D:\res"
set "output_dir=D:\output"if not exist "%output_dir%" mkdir "%output_dir%"
for /d %%d in ("%parent_dir%\*") do (
set "sub_dir=%%~nxd"
echo Sub Directory Name: !sub_dir!
set "image_base_path=%%d\"
set "image_pattern=!image_base_path!!sub_dir!_%%05d.jpg"
set "output_video=!output_dir!\!sub_dir!.mp4"rem 检查是否有匹配的图像文件
dir /b /a-d "!image_pattern:~0,-6*" "!image_base_path!" > nul 2>&1
if %errorlevel% equ 0 (
echo Processing images in: !image_base_path!
echo Image Pattern: !image_pattern!
echo Output Video: !output_video!
ffmpeg -framerate 30 -i "!image_pattern!" -c:v libx264 -pix_fmt yuv420p -vf scale=1920x1080 "!output_video!"
if errorlevel 1 (
echo An error occurred while processing !image_base_path!
) else (
echo Video created successfully: !output_video!
)
) else (
echo No matching image files found in !image_base_path!
)
)echo All directories have been processed.
endlocal
快速使用:
set "parent_dir=D:\res" 这里改为自己的图片路径 例如: D:\res下面 有多个文件夹 D:\res\111 D:\res\112 D:\res\113... 里面文件都为图片 且命名方式为 xxx.00000.jpg
xxx.00001.jpg xxx.00002.jpg... 这样子,这里填的是最外层的目录路径
set "output_dir=D:\output" 这里改为自己生成文件放在哪里 或者直接不动
然后直接执行就行。
详解:
这段批处理脚本(.bat 文件)用于在 Windows 系统中自动地将指定目录下的子目录中的图像序列文件转换为 MP4 视频文件。下面是脚本的逐行详细解释:
@echo off
关闭命令回显,使得脚本运行时不会显示每条命令本身。
setlocal enabledelayedexpansion
启用延迟环境变量扩展,允许在循环或条件语句中使用 ! 符号来访问和修改变量值。
set "parent_dir=D:\res"
set "output_dir=D:\output"
设置变量 parent_dir 和 output_dir 分别指向包含图像序列的父目录和输出视频文件的目录。
if not exist "%output_dir%" mkdir "%output_dir%"
如果输出目录不存在,则创建它。
for /d %%d in ("%parent_dir%\*") do (
遍历 %parent_dir% 下的所有子目录。
set "sub_dir=%%~nxd"
echo Sub Directory Name: !sub_dir!
获取当前子目录的名称(包括路径)并去除路径部分,然后打印子目录名。
set "image_base_path=%%d\"
set "image_pattern=!image_base_path!!sub_dir!_%%05d.jpg"
set "output_video=!output_dir!\!sub_dir!.mp4"
设置图像基础路径、图像文件模式(假设图像命名规则为子目录名加下划线加五位数字序号加 .jpg 扩展名)以及输出视频文件的完整路径。
dir /b /a-d "!image_pattern:~0,-6*" "!image_base_path!" > nul 2>&1
if %errorlevel% equ 0 (
使用 dir 命令查找与图像模式匹配的文件,去掉最后的六字符(即数字序号和后缀),并将错误输出和标准输出都重定向到空设备以隐藏输出。如果找到匹配的文件,errorlevel 应为0。
echo Processing images in: !image_base_path!
echo Image Pattern: !image_pattern!
echo Output Video: !output_video!
打印正在处理的图像路径、图像模式和输出视频的路径。
ffmpeg -framerate 30 -i "!image_pattern!" -c:v libx264 -pix_fmt yuv420p -vf scale=1920x1080 "!output_video!"
使用 FFmpeg 转换工具,以30帧/秒的速度从图像序列创建视频,采用 H.264 编码,像素格式为 YUV420P,并将视频尺寸调整为1920x1080。
if errorlevel 1 (
echo An error occurred while processing !image_base_path!
) else (
echo Video created successfully: !output_video!
)
根据 FFmpeg 的执行结果判断是否成功,如果失败则打印错误信息,否则打印成功消息。
echo No matching image files found in !image_base_path!
如果没有找到匹配的图像文件,则打印此消息。
)
echo All directories have been processed.
endlocal
循环结束后,打印所有目录已处理的消息,然后结束局部变量扩展环境。
这个脚本是一种自动化工具,可以极大地简化将多个图像序列转换为视频的过程,特别适用于处理大量数据或定期执行的任务。