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

FFmpeg批量转码脚本优化:跳过已存在输出文件的处理

FFmpeg批量转码脚本优化方案

核心需求

  • 提前过滤已存在于输出目录的文件,跳过遍历与FFProbe分析流程
  • 保留原脚本功能:批量转码MKV/MP4中EAC3、FLAC、DTS等音频为AAC
  • 解决多文件/子目录场景下变量传递失效问题

优化后的脚本实现

@echo off
setlocal enabledelayedexpansion

:: 设置输出目录
set "output_dir=Transcoded"
if not exist "%output_dir%" mkdir "%output_dir%"

:: 递归遍历当前目录及子目录下的MKV/MP4文件
for /r %%f in (*.mkv *.mp4) do (
    :: 生成输出文件路径(保持原文件名与后缀)
    set "input_file=%%f"
    set "output_file=!output_dir!\%%~nf%%~xf"
    
    :: 提前检查输出文件是否存在,存在则直接跳过后续所有处理
    if exist "!output_file!" (
        echo 跳过已存在文件: !input_file!
        goto next_file
    )
    
    :: 使用FFProbe提取音频编码格式
    for /f "delims=" %%a in ('ffprobe -v error -select_streams a:0 -show_entries stream^=codec_name -of default^=noprint_wrappers^=1:nokey^=1 "!input_file!"') do (
        set "audio_codec=%%a"
    )
    
    :: 判断是否需要转码
    if "!audio_codec!"=="eac3" (
        goto do_transcode
    ) else if "!audio_codec!"=="flac" (
        goto do_transcode
    ) else if "!audio_codec!"=="dts" (
        goto do_transcode
    ) else (
        echo 无需转码,直接复制文件: !input_file!
        copy "!input_file!" "!output_file!" >nul
        goto next_file
    )
    
    :do_transcode
    echo 正在转码音频为AAC: !input_file!
    ffmpeg -hide_banner -loglevel error -i "!input_file!" -c:v copy -c:a aac -b:a 192k "!output_file!"
    
    :next_file
)

echo 所有文件处理完成!
endlocal

关键优化点

  • 前置存在性检查:在FFProbe分析前执行if exist "!output_file!"判断,彻底跳过已处理文件的遍历与分析流程,大幅提升效率
  • 启用延迟变量扩展:通过setlocal enabledelayedexpansion解决循环中变量解析失效问题,确保多文件、子目录场景下路径变量正确传递
  • 递归遍历逻辑:使用for /r实现当前目录及所有子目录的视频文件遍历,覆盖更多场景

注意事项

需确保FFmpeg与FFProbe已添加至系统环境变量,或在脚本中指定完整可执行文件路径(例如"C:\Tools\ffmpeg\bin\ffprobe.exe")

若需调整音频质量,可修改FFmpeg命令中的-b:a 192k参数,数值越高音质越好但文件体积更大

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:31:13