• [转载] 关于mkvtoolnix批量处理的


    需要的工具:
    mkvtoolnix、记事本

    案例介绍:
    用文件A的视频+文件B的音频+字幕合成新MKV,在文件列表中,按A、B、C顺序排列。其中A与B都是Mkv格式,所以A与B不能放在同一个文件夹中(就算不同名也不行),下面会解释。



    步骤一:获取单次任务处理的命令行。
    相信很多同学都知道了,看上图按UI下面中间的按钮就可以。然后新建记事本粘贴入去。将记事本后缀从TXT改成BAT,就成了一个批处理命令,直接双击运行就会自动调用mkvtoolnix执行任务。以下为案例的单次任务命令行。

    @echo off
    "C:Program Files (x86)mkvtoolnixmkvmerge.exe" -o "E:\DB_055_追到企鹅村.mkv"  "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "--display-dimensions" "0:640x480" "--language" "1:chi" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "D:\comic\Dragon.Ball\cc\DB_055_追到企鹅村.mkv" ")" "--language" "0:chi" "--default-track" "0:yes" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "D:\comic\Dragon.Ball\aa\DB_055_追到企鹅村.mkv" ")" "--language" "0:chi" "--forced-track" "0:no" "-s" "0" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "(" "D:\comic\Dragon.Ball\aa\DB_055_追到企鹅村.ssa" ")" "--track-order" "0:0,0:1,1:0,2:0"

    大家睇到,命令行中有记录A、B、C文件的详细地址,出现的顺序分别为1.输出文件名,2.A文件名,3.B文件名,4.C文件名。可以简单归纳为先显示输出,然后显示输入(按输入列表的顺序)。

    步骤二:将具体文件名变成变量。
    为了让此批处理更有通用性,能重复使用,建议将一些具体名字变成变量。不考虑重复使用的同学可以不做这一步。以下将文件地址变成变更
    @echo off
    set topath="E:\"
    set frompath="D:\comic\Dragon.Ball\cc\"
    set frompath1="D:\comic\Dragon.Ball\aa\"

    "C:Program Files (x86)mkvtoolnixmkvmerge.exe" -o "%topath%DB_055_追到企鹅村.mkv"  "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "--display-dimensions" "0:640x480" "--language" "1:chi" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "%frompath%DB_055_追到企鹅村.mkv" ")" "--language" "0:chi" "--default-track" "0:yes" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "%frompath1%DB_055_追到企鹅村.mkv" ")" "--language" "0:chi" "--forced-track" "0:no" "-s" "0" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "(" "%frompath1%DB_055_追到企鹅村.ssa" ")" "--track-order" "0:0,0:1,1:0,2:0"

    步骤三:加入循环命令。
    思路是,扫描frompath文件夹上的MKV文件,每扫描出一个就执行一次。所以如果两个源文件都是MKV,则不能都放在同一目录下。

    @echo off
    set topath="E:\"
    set frompath="D:\comic\Dragon.Ball\cc\"
    set frompath1="D:\comic\Dragon.Ball\aa\"

    pushd %frompath%
    for /f "tokens=*" %%i in ('dir/b *.mkv') do call :merge %topath%%%~ni".mkv"   %frompath%%%i   %frompath1%%%i   %frompath1%%%~ni".ssa"
    pause

    :merge 
    "C:Program Files (x86)mkvtoolnixmkvmerge.exe" -o "%1"  "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "--display-dimensions" "0:640x480" "--language" "1:chi" "--forced-track" "1:no" "-a" "1" "-d" "0" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "%2" ")" "--language" "0:chi" "--default-track" "0:yes" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "%3" ")" "--language" "0:chi" "--forced-track" "0:no" "-s" "0" "-D" "-A" "-T" "--no-global-tags" "--no-chapters" "(" "%4" ")" "--track-order" "0:0,0:1,1:0,2:0"

    解释一下代码含义。
    Pushd %frompath% :将扫描的文件夹定位在
    frompath

    for /f "tokens=*" %%i in ('dir/b *.mkv') :扫描目标文件夹中后缀为mkv的文件,如果输入源是MP4,这里可以改成*.MP4。

    do call :merge %topath%%%~ni".mkv" %frompath%%%i %frompath1%%%i %frompath1%%%~ni".ssa":每扫描出一个MKV文件则调用merge函数,后面用空格隔开的是函数的输入参数,%%i是扫描出来文件的带后缀文件名(不含路径信息),如DB_055_追到企鹅村.mkv。%%~ni是扫描出来文件的不带后缀文件名,如DB_055_追到企鹅村。案例中,字幕文件C与文件A同名,所以%%~ni“.ssa”就代表DB_055_追到企鹅村.ssa了。

    %1、%2、%3、%4:对应函数
    merge的4个输入变量,按顺序排列。

    步骤四:如何变成比较通用的批处理文件。
    按步骤一得到新的命令行,替换掉Merge函数的内容。将里面涉及的变更改成
    %1、%2、%3、%4等。
    变更Topath和Frompath的路径,如果有多个输入源路径,则新建多几个
    Frompath变更。
    按输入源文件的情况,替代
    Merge函数的输入参数组成,新的批处理文件就此生成。

  • 相关阅读:
    IOS技能点之Foundation之NSString
    JavaScript学习笔记 -- ES6学习(二) let 和const
    JavaScript 学习笔记-- ES6学习(一)介绍以及Babel的使用
    JavaScript 学习笔记: 扩充类型的功能
    PHP学习笔记(八)
    PHP学习笔记(六)
    Less 官方文档学习笔记
    PHP学习笔记(五)
    PHP 学习笔记 (四)
    PHP 学习笔记 (三)
  • 原文地址:https://www.cnblogs.com/mengxiaotian/p/5140194.html
Copyright © 2020-2023  润新知