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

FFmpeg批量合并MP4与字幕的批处理命令无法运行求助

批处理合并MP4与同名英文字幕转MKV的修正方案

原命令的核心问题

  • 路径错误:for /R遍历的是InputFolder下所有子目录的MP4文件,但你用%%~ni.mp4和%%~ni-eng.srt时,只会在批处理所在目录查找文件,而非MP4实际所在目录,导致ffmpeg找不到字幕文件。
  • 缺少存在性检查:未判断对应字幕文件是否存在,即使找不到srt也会执行ffmpeg命令,引发报错。

修正后的完整批处理代码

@echo off
setlocal enabledelayedexpansion
mkdir inputs 2>nul
mkdir outputs 2>nul
set "InputFolder=%~dp0inputs"

for /R "%InputFolder%" %%i in (*.mp4) do (
    :: 构建同目录下的字幕文件路径
    set "SubFile=%%~dpni-eng.srt"
    :: 检查字幕文件是否存在
    if exist "!SubFile!" (
        ffmpeg -n -i "%%i" -i "!SubFile!" -c copy -max_interleave_delta 0 ^
        -map 0 -map -0:v:1? -map -0:v:2? -map 1 ^
        -fflags +bitexact -map_metadata:g -1 -map_metadata -1 ^
        -metadata title="" -metadata comment="" ^
        -metadata:s:v title="" -metadata:s:v language="und" -metadata:s:v VENDOR_ID="" ^
        -metadata:s:a title="" -metadata:s:a:0 language="eng" -metadata:s:a:0 handler_name="English" -metadata:s:a VENDOR_ID="" ^
        -metadata:s:s:0 language="eng" ^
        "outputs\%%~ni.mkv"
    ) else (
        echo 未找到对应字幕文件:!SubFile!,跳过处理%%i
    )
)
endlocal
pause

关键修正点说明

  1. 路径匹配:用%%~dpni获取MP4文件的目录路径+文件名,拼接成字幕文件路径%%~dpni-eng.srt,确保能定位到同目录下的字幕。
  2. 延迟变量扩展:通过setlocal enabledelayedexpansion启用延迟扩展,保证循环内的变量SubFile能正确读取赋值结果。
  3. 错误抑制:mkdir命令添加2>nul,避免目录已存在时输出冗余错误提示。
  4. 代码可读性优化:用^将长命令拆分换行,避免命令行过长导致的执行异常。
  5. 存在性检查:添加if exist判断,仅在找到对应字幕时执行ffmpeg转换,避免无意义报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:48:23