ffmpeg windows bat脚本 批量将图片合成视频

@echo off
setlocal enabledelayedexpansion

set "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

循环结束后,打印所有目录已处理的消息,然后结束局部变量扩展环境。
这个脚本是一种自动化工具,可以极大地简化将多个图像序列转换为视频的过程,特别适用于处理大量数据或定期执行的任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值