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

如何编写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的过滤实现

  1. 遍历Probe.txt的每一行,用findstr识别以双引号开头的文件路径行,将其暂存到变量current_file中
  2. 遇到编码信息行时,检查是否为hevc(即x265):
    • 如果编码不是HEVC,就将暂存的文件路径格式化为file "*filepath*"写入TranscodeList.txt
    • 如果是HEVC编码,则跳过该文件

额外优化

  • 启用setlocal enabledelayedexpansion支持循环内的变量动态更新
  • 执行前先删除旧的输出文件,避免残留数据干扰结果
  • 添加简单的进度提示,方便观察执行状态
  • 转码时从列表提取原始路径,避免重复遍历目录

内容的提问来源于stack exchange,提问作者Angel Lopez Jr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:26:28