我使用两个命令来删除字幕音频等,另一个命令是将字幕与同一文件夹中的 mkv 文件合并。
删除字幕或音频的方法:
FOR /F "delims=*" %%A IN ('dir /b *.MKV') DO "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "fixed_%%A" -s !1,2 --compression -1:none "%%A"
这个用于合并 mkv 和 srt 文件:
for %%A IN (*.mkv) do (
"C:\Program Files\MKVToolNix\mkvmerge.exe" -o "remux-%%~nxA" "%%~A" --forced-track "0:yes" --default-track "0:yes" --track-name "0:Arabic" --language "0:ara" "%%~nA.srt"
)
现在,每一个都要花费相当多的时间,我试图将它们结合起来但没有成功,你能帮忙吗?
答案1
1. 合并循环
第一步是将两个 for 循环合并为一个
for %%A IN (*.mkv) do (
"C:\Program Files\MKVToolNix\mkvmerge.exe" ^
-o "fixed_%%A" ^
-s !1,2 ^
--compression -1:none ^
"%%A"
"C:\Program Files\MKVToolNix\mkvmerge.exe" ^
-o "remux-%%~nxA" ^
"%%~A" ^
--forced-track "0:yes" ^
--default-track "0:yes" ^
--track-name "0:Arabic" ^
--language "0:ara" ^
"%%~nA.srt"
)
我使用了插入符号 (^) 来允许命令延伸到多行。这样更易于阅读和编辑。
为了使以后的事情更容易,让我们将选项名称的缩写形式(如-s
)扩展为其全名(如--subtitle-tracks
),因为这样可以更容易地跟踪正在发生的事情。
for %%A IN (*.mkv) do (
"C:\Program Files\MKVToolNix\mkvmerge.exe" ^
--output "fixed_%%A" ^
--subtitle-tracks !1,2 ^
--compression -1:none ^
"%%A"
"C:\Program Files\MKVToolNix\mkvmerge.exe" ^
--output "remux-%%~nxA" ^
"%%~A" ^
--forced-track "0:yes" ^
--default-track "0:yes" ^
--track-name "0:Arabic" ^
--language "0:ara" ^
"%%~nA.srt"
)
就其本身而言,将两个循环合并为一个循环不会显著提高速度,但这是必要的第一步。在一小组文件上尝试一下(将三个文件复制到“测试”目录并在那里运行批处理文件)确保它有效,然后再继续。
2. 组合命令
第二步是将两个命令合并为一个。这需要您阅读并理解mkvmerge 命令用户指南- 然后你就可以知道你想要的操作是否可以在同一个命令中执行,以及命令中每个项目的作用。最有可能的是,最终的命令将结合每个命令中的大多数项目,但不是全部
请注意,项目的顺序很重要,命令的一般形式是
mkvmerge [global options] {-o out} [options1] {file1} [[options2] {file2}] [@options-file.json]
因此,您需要确定两个命令中的哪些选项是全球的选项并将它们全部放在首位。
%%~nxA
我们还需要了解、%%~A
和的含义%%~nA.srt
。请参阅Windows 批处理文件中的 %~d0 是什么意思?