如何让FFmpeg批处理脚本逐个处理150个文件夹中的MP4文件
批量逐个处理视频文件夹的BAT脚本实现
需求说明
现有单文件夹MP4处理脚本,可生成去Logo后的视频文件,需扩展为逐个遍历处理指定目录下的150个视频文件夹,避免同时运行多进程耗尽系统资源。
原单文件夹处理脚本:
for %%a in ("*.mp4") do ffmpeg -i "%%a" -filter:v "crop=1280:700:0:0" -c:a copy "%%~na-old.mp4" for %%a in ("*.mp4") do ffmpeg -i "%%~na-old.mp4" -vf scale=1280:720,setsar=1:1 "%%~na-no-Logo.mp4" for %%a in ("*.mp4") do del "%%~na-old.mp4"
优化后的批量处理脚本
将以下脚本保存为Batch_Process_Videos.bat,修改ROOT_DIR为你的视频文件夹所在的根目录(比如D:\Video_Folders):
@echo off setlocal enabledelayedexpansion :: 替换为你的视频文件夹根目录 set "ROOT_DIR=D:\Video_Folders" :: 遍历根目录下的所有子文件夹 for /d %%d in ("%ROOT_DIR%\*") do ( echo 开始处理文件夹: %%~fd :: 进入目标文件夹 pushd "%%~fd" :: 执行原有的MP4处理逻辑(合并循环减少重复遍历) for %%a in ("*.mp4") do ( ffmpeg -i "%%a" -filter:v "crop=1280:700:0:0" -c:a copy "%%~na-old.mp4" ffmpeg -i "%%~na-old.mp4" -vf scale=1280:720,setsar=1:1 "%%~na-no-Logo.mp4" del "%%~na-old.mp4" ) :: 返回上级目录 popd echo 完成文件夹处理: %%~fd echo. ) echo 所有文件夹处理完成! pause
关键逻辑说明
for /d %%d in ("%ROOT_DIR%\*"):遍历指定根目录下的所有子文件夹,%%d代表每个文件夹的完整路径pushd "%%~fd":进入当前遍历到的文件夹,确保后续FFmpeg命令在目标文件夹内执行- 合并原脚本的三次
for循环:原脚本重复遍历MP4文件三次,优化后仅遍历一次,减少冗余操作 popd:处理完当前文件夹后自动返回根目录,继续下一个文件夹的处理- 状态输出:通过
echo打印处理进度,方便实时查看当前处理的文件夹
额外建议
- 若需排除特定文件夹,可在
for /d循环内添加判断,例如:if not "%%~nd"=="不需要处理的文件夹名" - 若FFmpeg未加入系统环境变量,需在脚本中指定其完整路径,比如
"C:\Program Files\ffmpeg\bin\ffmpeg.exe"
内容的提问来源于stack exchange,提问作者Ashraf El-Madhoun
相关产品推荐
相关产品推荐

