1

Every time a .mkv file is needed to be muxed it comes with random amount of subtitles, and each subtitle is different language code.

So e.g. Scenario 1:

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

Scenario 2:

video.mkv
rus.srt
spa.srt

The goal is to everytime running the same batch file make it pick it up amount of subtitles and mux it correctly with correct language codes, etc.

So far we got here:

        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"^
        )

So far this is fixed amount of subtitles approach, not dynamic, so e.g. scenario 1. It almost works except it picks up every subtitle as last variable, so from scenario 1 each subtitle is muxed three times and named as ger for language and ger.srt used as source all three times because it's last one in the list by alphabet.

Goal: Each !subtitle! should be correct language and subtitle, as I understand by alphabet.

4

1 回答 1

1

我没有安装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

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

如果完全定义,分配给环境变量的字符串SubtitleOptions始终以空格字符开头,这%SubtitleOptions%就是直接"%%I"在命令行执行之后的原因mkvmerge.exe

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

  • echo /?
  • endlocal /?
  • for /?
  • set /?
  • setlocal /?
于 2020-07-02T06:23:03.020 回答