找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 5290|回复: 8

[文件操作] [已解决]批处理调用mkvmerge.exe把MKV换成新字幕,播放器打开不显示字幕如何解决

[复制链接]
发表于 2025-7-1 23:53:38 | 显示全部楼层 |阅读模式
本帖最后由 1139054012 于 2025-7-4 14:55 编辑

代码
https://download.gg/file-18901546_f060ac239bab6651


文件生成成功,但是PotPlayer打开就是不显示字幕?外挂字幕可以正常显示


PS: 换了PotPlayer版本好了
发表于 2025-7-2 00:47:34 | 显示全部楼层
播放时 ,界面右键-->字幕-->选择字幕
看看是否真的有字幕
 楼主| 发表于 2025-7-2 07:55:20 | 显示全部楼层
本帖最后由 1139054012 于 2025-7-2 08:05 编辑

回复 2# Five66


   右键选择字幕是默认选中状态,但就是不显示,奇怪
https://download.gg/zh/file-18901314_79
c2a908b45bc0ea



播放器测试
https://download.gg/file-18901315_777b1df258c7bf8d
发表于 2025-7-2 13:23:47 | 显示全部楼层
本帖最后由 flashercs 于 2025-7-2 19:10 编辑

脚本保存为ANSI编码
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. REM 名称: 智能MKV字幕打包工具
  4. REM 版本: v1.3
  5. REM 功能:
  6. REM 1. 查找MKV视频文件
  7. REM 2. 查找对应ASS字幕
  8. REM 3. 封装进 new\ 文件夹下
  9. REM 4. 设置字幕为默认显示轨道
  10. REM 参数: 拖放或手动输入文件夹路径
  11. REM 使用示例: 把含 video.mkv 和 video.ass 的文件夹拖进来

  12. REM 设置mkvmerge路径
  13. set "MKVMERGE=E:\新建文件夹\濡以沫o\MKV\MKVToolNix\mkvmerge.exe"

  14. REM 显示欢迎信息
  15. echo.
  16. echo ████ 智能 MKV 字幕打包工具 v1.3 █████
  17. echo.
  18. echo === 请把包含 MKV 视频的文件夹拖放到此处 ===
  19. echo [注意] 如果路径中含 ^& 或 ) 等特殊字符,请手动清理后再拖放!

  20. REM 获取用户输入路径
  21. set /p "ROOT=请输入路径: "

  22. REM 检查路径是否存在
  23. if not exist "!ROOT!" (
  24.     echo 错误:路径不存在,请重新输入。
  25.     pause>nul
  26.     exit /b
  27. )

  28. REM 检查是否有mkv文件
  29. dir "!ROOT!\*.mkv" /b >nul 2>&1
  30. if %errorlevel% neq 0 (
  31.     echo 错误:未找到任何 .mkv 文件,请确认路径是否正确。
  32.     pause>nul
  33.     exit /b
  34. )

  35. REM 显示即将处理的文件列表
  36. echo.
  37. echo === 即将处理以下 MKV 视频 ===
  38. dir "!ROOT!\*.mkv" /b
  39. echo ==============================
  40. echo 如确认无误请按任意键继续...
  41. pause >nul

  42. REM 创建输出文件夹 new\
  43. set "OUTPUT_DIR=!ROOT!\new"
  44. if not exist "!OUTPUT_DIR!" mkdir "!OUTPUT_DIR!"

  45. REM 遍历每个mkv文件
  46. for %%F in ("!ROOT!\*.mkv") do (

  47.     REM 设置当前视频路径
  48.     set "VIDEO_FILE=%%~fF"

  49.     REM 获取视频所在目录
  50.     set "VIDEO_DIR=%%~dpF"

  51.     REM 获取视频文件名(不含扩展名)
  52.     set "VIDEO_NAME=%%~nF"

  53.     REM 构造对应的字幕文件路径
  54.     set "SUBTITLE_FILE=!VIDEO_DIR!!VIDEO_NAME!.srt"

  55.     REM 显示当前处理的视频
  56.     echo.
  57.     echo 正在处理视频: !VIDEO_FILE!

  58.     REM 检查字幕文件是否存在
  59.     if exist "!SUBTITLE_FILE!" (

  60.         REM 显示找到的字幕文件
  61.         echo 找到字幕文件: !SUBTITLE_FILE!

  62.         REM 构造输出文件路径(保存在 new\ 下,保留原文件名)
  63.         set "OUTPUT_FILE=!OUTPUT_DIR!\!VIDEO_NAME!.mkv"

  64.         REM 调用mkvmerge添加字幕并设置默认轨道和字幕名
  65.         "!MKVMERGE!" ^
  66.             -o "!OUTPUT_FILE!" ^
  67.             --no-subtitles "!VIDEO_FILE!" ^
  68.             --language 0:und ^
  69.             --track-name 0:"中文" ^
  70.             --default-track 0 ^
  71.             "!SUBTITLE_FILE!"

  72.         REM 显示完成信息
  73.         echo 完成处理: !OUTPUT_FILE!

  74.     ) else (

  75.         REM 显示未找到字幕文件
  76.         echo 未找到字幕文件: !SUBTITLE_FILE!

  77.     )
  78. )

  79. REM 显示全部处理完成
  80. echo.
  81. echo 所有文件处理完成!输出位于:!OUTPUT_DIR!
  82. pause >nul
复制代码
发表于 2025-7-2 14:25:15 | 显示全部楼层
回复 1# 1139054012

用一楼代码批量生成的 *.mkv 用 potplayer 看不到其中封装的字幕吗?还是有些可以看到?看不到的 *.mkv 用手动载入其对应的 *.ass 字幕文件能否看到?
 楼主| 发表于 2025-7-2 16:21:36 | 显示全部楼层
本帖最后由 1139054012 于 2025-7-2 16:29 编辑

回复 4# flashercs

测试了下,直接复制1楼代码不全,直接粘贴有问题,直接网盘放一份
https://download.gg/file-18901546_f060ac239bab6651
   
 楼主| 发表于 2025-7-2 16:35:59 | 显示全部楼层
回复 5# aloha20200628


    PotPlayer设置版无法正常显示字幕,原来MKV可以显示,外挂字幕也可以显示,说明就是封装失败的问题,换srt字幕还是不行


但是PotPlayer重置设置,可以显示字幕,但音轨又失效了

MPC也是,可以显示字幕,音轨失效

发表于 2025-7-2 19:13:41 | 显示全部楼层
本帖最后由 flashercs 于 2025-7-2 19:50 编辑

4楼代码修改了;
注意:1 注释符号不要用::,必须用REM,很多AI的代码都是错误的;2 不要遍历子文件夹;
potplayer播放器有问题,你的视频用其他播放器可以有字幕
发表于 2025-7-3 00:04:12 | 显示全部楼层
本帖最后由 Five66 于 2025-7-3 01:26 编辑

回复 3# 1139054012


    保存为ansi或gbk或gb2312编码的bat

  1. @echo off&goto :begin

  2. :: 名称: 智能MKV字幕打包工具
  3. :: 版本: v1.3
  4. :: 功能:
  5. :: 1. 查找MKV视频文件
  6. :: 2. 查找对应ASS字幕
  7. :: 3. 封装进 new\ 文件夹下
  8. :: 4. 设置字幕为默认显示轨道
  9. :: 参数: 拖放或手动输入文件夹路径
  10. :: 使用示例: 把含 video.mkv 和 video.ass 的文件夹拖进来

  11. :begin

  12. rem 设置mkvmerge路径
  13. set "MKVMERGE=E:\新建文件夹\濡以沫o\MKV\MKVToolNix\mkvmerge.exe"

  14. rem 显示欢迎信息
  15. echo.
  16. echo ████ 智能 MKV 字幕打包工具 v1.3 █████
  17. echo.
  18. echo === 请把包含 MKV 视频的文件夹拖放到此处 ===
  19. echo [注意] 不包括子目录及其文件

  20. rem 获取用户输入路径
  21. set /p "ROOT=请输入路径: "
  22. set "ROOT=%ROOT:"=%"

  23. rem 检查路径是否存在
  24. if not exist "%ROOT%" (
  25.     echo 错误:路径不存在,请重新输入。
  26.     pause&exit /b
  27. )

  28. rem 检查是否有mkv文件
  29. dir "%ROOT%\*.mkv" /b >nul 2>&1
  30. if %errorlevel% neq 0 (
  31.     echo 错误:未找到任何 .mkv 文件,请确认路径是否正确。
  32.     pause&exit /b
  33. )

  34. rem 显示即将处理的文件列表
  35. echo.
  36. echo === 即将处理以下 MKV 视频 ===
  37. dir "%ROOT%\*.mkv" /b
  38. echo ==============================
  39. echo 如确认无误请按任意键继续...
  40. pause >nul

  41. rem 创建输出文件夹 new\
  42. set "OUTPUT_DIR=%ROOT%\new"
  43. if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"

  44. rem 遍历每个mkv文件
  45. for %%F in ("%ROOT%\*.mkv") do (

  46.     rem 设置当前视频路径
  47.     set "VIDEO_FILE=%%~fF"

  48.     rem 获取视频所在目录
  49.     set "VIDEO_DIR=%%~dpF"

  50.     rem 获取视频文件名(不含扩展名)
  51.     set "VIDEO_NAME=%%~nF"

  52. setlocal enabledelayedexpansion

  53.     rem 构造对应的字幕文件路径
  54.     set "SUBTITLE_FILE=!VIDEO_DIR!!VIDEO_NAME!.ass"

  55.     rem 显示当前处理的视频
  56.     echo,&echo 正在处理视频: !VIDEO_FILE!

  57.     rem 检查字幕文件是否存在
  58.     if exist "!SUBTITLE_FILE!" (

  59.         rem 显示找到的字幕文件
  60.         echo 找到字幕文件: !SUBTITLE_FILE!

  61.         rem 构造输出文件路径(保存在 new\ 下,保留原文件名)
  62.         set "OUTPUT_FILE=!OUTPUT_DIR!\!VIDEO_NAME!.mkv"

  63.         rem 调用mkvmerge添加字幕并设置默认轨道和字幕名
  64.         "!MKVMERGE!" ^
  65.             -o "!OUTPUT_FILE!" ^
  66.             --language 0:und ^
  67.             --no-subtitles ^
  68.             -T ^
  69.             "!VIDEO_FILE!" ^
  70.             --track-name 0:defsub ^
  71.             --language 0:und ^
  72.             --default-track 0:1 ^
  73.             "!SUBTITLE_FILE!"

  74.         rem 显示完成信息
  75.         echo 完成处理: !OUTPUT_FILE!

  76.     ) else (

  77.         rem 显示未找到字幕文件
  78.         echo 未找到字幕文件: !SUBTITLE_FILE!

  79.     )
  80. endlocal
  81. )

  82. rem 显示全部处理完成
  83. echo,
  84. echo 所有文件处理完成!输出位于:"%OUTPUT_DIR%"
  85. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:46 , Processed in 0.012953 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表