带有 mkvmerge 的复用视频文件批量具有动态文件量



每次需要复用.mkv文件时,它都会带有随机数量的字幕,每个字幕都是不同的语言代码。

所以例如 场景 1:

video.mkv
eng.srt
fre.srt
ger.srt

场景 2:

video.mkv
rus.srt
spa.srt

目标是每次运行相同的批处理文件时,使其拾取大量的字幕,并使用正确的语言代码等正确复用。

到目前为止,我们到了这里:

EnableDelayedExpansion
for %%A in ("*.srt") do (
set subtitle=%%~nA
)
for %%A in ("*.mkv") do (
mkvmerge.exe -o "%%~nA.mkv" --default-track 0:yes "%%A"^
--language 0:!subtitle! --default-track 0:no "!subtitle!.srt"^
--language 0:!subtitle! --default-track 0:no "!subtitle!.srt"^
--language 0:!subtitle! --default-track 0:no "!subtitle!.srt"^
)

到目前为止,这是固定数量的字幕方法,而不是动态的,例如场景 1。它几乎可以工作,除了它选取每个字幕作为最后一个变量,因此从场景 1 开始,每个字幕被复用三次并命名为语言gerger.srt三次用作源,因为它是列表中的最后一个字母表。

目标:每个!subtitle!都应该是正确的语言和副标题,正如我所理解的那样。

我没有安装mkvmerge.exe也没有阅读 mkvmerge 的文档,所以不知道有问题的选项是否真的正确。

下面的批处理文件创建具有可变数量的--language--default-track选项的命令行,具体取决于当前目录中找到.srt文件。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SubtitleOptions="
setlocal EnableDelayedExpansion
for %%I in (*.srt) do set "SubtitleOptions=!SubtitleOptions! --language 0:%%~nI --default-track 0:no "%%I""
endlocal & set "SubtitleOptions=%SubtitleOptions%"
for %%I in (*.mkv) do mkvmerge.exe -o "%%I" --default-track 0:yes "%%I"%SubtitleOptions%
endlocal

请阅读此答案,了解有关命令SETLOCAL和 ENDLOCAL 以及使用 Windows 批处理文件的具有多个命令的单行的详细信息,以了解在命令行上使用ENDLOCAL在批处理文件的初始环境中设置变量SubtitleOptions的运算符&,延迟扩展无法处理文件名中!.mkv文件。

分配给环境变量的字符串SubtitleOptions如果定义的话,总是以空格字符开头,这就是为什么%SubtitleOptions%在命令行上执行mkvmerge.exe"%%I"之后。

要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,然后完整而仔细地阅读每个命令的显示帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • set /?
  • setlocal /?

最新更新