【问题标题】:Mux video files with mkvmerge in a batch with dynamic amount of files使用 mkvmerge 以动态文件数量批量复用视频文件
【发布时间】:2020-07-01 19:10:57
【问题描述】:

每次需要混音的.mkv文件都会附带随机数量的字幕,每个字幕都有不同的语言代码。

例如 场景一:

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 开始,每个字幕被混合三次,并命名为 ger 用于语言,ger.srt 用作源代码,因为它是最后一个按字母顺序列出。

目标:每个!subtitle! 应该是正确的语言和字幕,正如我对字母的理解。

【问题讨论】:

    标签: windows batch-file video mkv matroska


    【解决方案1】:

    我没有安装mkvmerge.exe,也没有阅读documentation of mkvmerge,所以不知道提供的选项是否真的正确。

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

    @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
    

    请阅读this answer以了解有关命令SETLOCALENDLOCAL的详细信息以及single line with multiple commands using Windows batch file以了解在命令行中与一起使用的运算符&的说明ENDLOCAL 在具有延迟扩展的批处理文件的初始环境中设置变量 SubtitleOptions 无法处理正确的文件名中带有 !.mkv 文件。

    分配给环境变量SubtitleOptions 的字符串总是以空格字符开头(如果已定义),这就是在命令行执行mkvmerge.exe%SubtitleOptions% 直接位于"%%I" 之后的原因。

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2015-08-22
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      相关资源
      最近更新 更多