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

如何在定时批处理文件中运行FFmpeg并实现文件排除与原文件删除?

解决MKV转AAC后的自动删原文件与跳过已转换文件问题

嘿,你已经搭好了定时转码的批处理框架,剩下的两个需求其实很容易实现,我直接给你改好代码,再逐行解释逻辑:

修改后的完整批处理代码

@echo off
setlocal enabledelayedexpansion

:: 遍历目标目录下所有MKV文件,递归包含子文件夹
for /r "C:\Users\USER\Desktop\TEST" %%a in ("*.mkv") do (
    :: 检查当前文件名是否包含CONVERTED(不区分大小写),如果不包含才处理
    echo "%%~nxa" | findstr /i "CONVERTED" >nul
    if !errorlevel! equ 1 (
        :: 构造输出文件名:原路径+原文件名+_CONVERTED.mkv
        set "output=%%~dpna_CONVERTED.mkv"
        
        :: 执行转码:复制视频流,音频转AAC(比特率可自行调整)
        ffmpeg -i "%%a" -vcodec copy -acodec aac -b:a 192k "!output!"
        
        :: 检查转码是否成功,成功则删除原文件
        if !errorlevel! equ 0 (
            echo ✅ 转码完成,已删除原文件:"%%a"
            del "%%a"
        ) else (
            echo ❌ 转码失败,保留原文件:"%%a"
            :: 清理转码失败生成的不完整文件
            if exist "!output!" del "!output!"
        )
    )
)

echo 所有转码任务已执行完毕!
pause

关键功能实现说明

  • 跳过已转换文件:通过findstr /i "CONVERTED"检查文件名,只要文件名(含扩展名)里包含CONVERTED(不区分大小写,比如xxx_converted.mkv也会被跳过),就跳过处理。转码后的文件会自动加上_CONVERTED后缀,确保下次运行时不会重复处理。
  • 转换完成后删除原文件:通过判断ffmpeg的退出码!errorlevel! equ 0(0表示执行成功),只有转码完全成功才会删除原文件,避免转码失败误删源文件。如果转码失败,还会自动清理生成的不完整输出文件,避免残留垃圾。
  • 额外优化:启用enabledelayedexpansion是为了在循环里正确读取变量值;-vcodec copy直接复制视频流,不用重新编码,能大幅节省转码时间(如果你的需求是只转音频,这个参数一定要加)。

注意事项

  • 如果你的ffmpeg没有添加到系统环境变量PATH里,要把代码里的ffmpeg改成完整路径,比如"C:\Program Files\ffmpeg\bin\ffmpeg.exe"。
  • 可以根据自己的需求调整AAC的比特率(-b:a 192k),比如改成256k获得更好的音质。
  • 建议先在测试文件夹里小范围测试,确认功能正常后再放到定时任务里。

内容的提问来源于stack exchange,提问作者MrZoops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:56