我的场景:
我在一个文件夹中有多个 mkv 文件,这些文件具有单独但对应的 srt 文件,我想将它们混合在一起。
我只对当前目录中的文件感兴趣,我正在从 Win10 x64 上的 cmd 窗口运行脚本。
我想将生成的多路混合文件写入原始目录下的新子目录。
例子:
- 视频1.mkv
- subtitle1.srt
- 视频2.mkv
- subtitle2.srt
- 视频3.mkv
- subtitle3.srt
我找到了一个带有脚本的线程,它几乎可以在这里做我想做的事情:https ://forum.videohelp.com/threads/365907-MKVMERGE-Batch-Muxing-multiple-audio-and-su...ks# post2407646
我已将该脚本修改为:
for %%a in (.) do call :set_file_names
:set_file_names
set "output_name="
set "input_name="
set "subtitle_name="
for %%m in (*.mkv) do set "output_name=%%~dpmtemp\%%~nxm" & set "input_name=%%~nxm"
for %%m in (*.srt) do set "subtitle_name=%%~nxm" & call :mux
:mux
echo ***** Starting MKVmerge *****
"C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%output_name%" --language 0:eng --default-track-flag 0:yes --audio-tracks 1 --language 1:eng --default-track-flag 1:yes "%input_name%" --language 0:eng --track-name 0:English "%subtitle_name%"
我的问题是设置 mkv 文件名的行总是导致最后一个(在我的示例中为第三个)文件名。
它正确地遍历生成的字幕文件名:
- video3.mkv + subtitle1.srt
- video3.mkv + subtitle2.srt
- video3.mkv + subtitle3.srt
我敢肯定有一个简单的解决方法,但作为一个批处理文件新手,这对我来说并不明显!
任何人都可以帮忙吗?
更新#1:根据@stephan 的评论,我的脚本现在看起来像这样,我似乎更接近答案,但它仍然不起作用:
for %%M in (*.mkv) do (
for %%S in (%%~n_*.srt) do (
"C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~dpMtemp\%%~nxM" "%%~nxM" "%%~nxS"
)
)
执行时,这会产生 3 个 mkvmerge 结果,其中包含正确的 mkv 文件且没有任何 srt 文件。该脚本似乎没有正确获取 srt 文件名? 脚本结果的屏幕截图 有 什么建议吗?