如何编写CMD脚本生成过滤列表并批量转码非HEVC视频为x265?
完整解决方案:整合三步的CMD批处理脚本
以下是整合了所有三步任务的批处理脚本,重点解决了步骤2的过滤逻辑:
@echo off setlocal enabledelayedexpansion :: 步骤1:生成视频文件编码信息清单 echo 正在扫描视频文件... del /f /q Probe.txt 2>nul for /R %%f IN (*.mkv,*.avi,*.mp4,*.m2ts,*.mts,*.rm,*.m4v) do ( echo "%%f" >>Probe.txt ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat -select_streams v:0 -show_entries stream=codec_name "%%f" >>Probe.txt echo. >>Probe.txt ) :: 步骤2:筛选非HEVC编码的文件,生成转码列表 echo 正在筛选待转码文件... del /f /q TranscodeList.txt 2>nul set "current_file=" for /f "usebackq delims=" %%l in ("Probe.txt") do ( :: 识别文件路径行(以双引号开头) echo %%l | findstr /r "^\"" >nul if !errorlevel! equ 0 ( set "current_file=%%~l" ) else ( :: 排除HEVC编码的文件 echo %%l | findstr /r "streams.stream.0.codec_name=\"hevc\"" >nul if !errorlevel! neq 0 ( echo file !current_file! >>TranscodeList.txt ) ) ) :: 步骤3:批量转码为x265格式 echo 开始转码... for /f "usebackq delims=" %%l in ("TranscodeList.txt") do ( :: 提取原始文件路径 set "input_path=%%~l" set "input_path=!input_path:file =!" ffmpeg -hide_banner -hwaccel_output_format qsv -i "!input_path!" -c:v libx265 -c:a ac3 -x265-params crf=25 "!input_path!.mkv" ) echo 所有任务完成! endlocal
关键逻辑说明
步骤2的过滤实现
- 遍历
Probe.txt的每一行,用findstr识别以双引号开头的文件路径行,将其暂存到变量current_file中 - 遇到编码信息行时,检查是否为
hevc(即x265):- 如果编码不是HEVC,就将暂存的文件路径格式化为
file "*filepath*"写入TranscodeList.txt - 如果是HEVC编码,则跳过该文件
- 如果编码不是HEVC,就将暂存的文件路径格式化为
额外优化
- 启用
setlocal enabledelayedexpansion支持循环内的变量动态更新 - 执行前先删除旧的输出文件,避免残留数据干扰结果
- 添加简单的进度提示,方便观察执行状态
- 转码时从列表提取原始路径,避免重复遍历目录
内容的提问来源于stack exchange,提问作者Angel Lopez Jr
相关产品推荐
相关产品推荐

