将多个.ttf文件批量附加到.mkv

时间:2019-02-15 05:44:49

标签: batch-file batch-processing true-type-fonts mkv

好吧,我是这方面的新手...基本上,我正在使用工具调用mkvmerge将多个字体文件(.ttf)附加到.mkv文件。我已经将.mkv文件与我要附加的相应字体分离到了文件夹中。

我的目的是创建一个批处理,该批处理将创建带有所有添加的附件的所有.mkv文件的副本,并将它们存放在父目录的新创建的文件夹(即“修订版”)中。

从一个文件夹开始:

mkdir Revised

for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "%%~.ttf"

如果我将“ %%〜.ttf”更改为实际的.tff文件名,则此方法有效 (即

mkdir Revised

    for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "sans serif.ttf"

,然后我将得到一个新创建的Revised文件夹,其中包含一个.mkv文件,在.mkv文件本身中附加了sans serif.tff文件。 但是,我想添加多个.ttf文件而不单独命名它们。 (在线搜索似乎我需要“ $ file”之类的东西,尽管我不知道如何使用它)

如果我的父文件夹包含多个子文件夹,则下一步:

mkdir Revised

for /R %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "%%~.ttf"

仅此操作不起作用。我敢肯定,不仅仅是因为“ %%〜.ttf”问题。

我知道这可能有点过于雄心勃勃,所以如果有人可以帮助解决我的问题的前半部分,那将是很可爱的。提前谢谢。

Ps:如果有人需要了解mkvmerge特定的命令来提供帮助,请执行以下操作:https://mkvtoolnix.download/doc/mkvmerge.html

更新:第一部分

mkdir Revised

for %%x in (*.ttf) do (
for %%A in (*.mkv) do "%mkvmerge%" -q -o "Revised\%%A" "%%A" --attachment-mime-type application/x-truetype-font --attach-file "%%x"
)

似乎效果更好,但我认为脚本现在将添加和删除.ttf文件,直到保留文件夹中的最后一个.ttf文件。

3 个答案:

答案 0 :(得分:3)

请尝试一下。 (请记住,将echo array_search($needle,array_keys($haystack), true); 变量设置为可执行路径):

%mkvmerge%

因此,请解释您的示例出了什么问题:

在for循环中,您从根文件夹内的@echo off set "mkvmerge=C:\Some Path\mkvmerge.exe" for %%a in (*.ttf) do ( for /f %%i in ('dir /s /b /a-d *.mkv ^| findstr /vi Revised') do ( if not exist "%%~dpiRevised" mkdir "%%~dpi\Revised" if not exist "%%~dpiRevised\%%~nxi" copy "%%~fi" "%%~dpiRevised" "%mkvmerge%" -q -o "%%~dpiRevised\%%~ni_rev%%~xi" "%%~dpiRevised\%%~nxi" --attachment-mime-type application/x-truetype-font --attach-file "%%~dpi%%a" ) ) 中获取Apply,并对其应用一个mkv文件,并创建带有附件{{1 }}到ttf目录,然后对于下一个mkv,再次从根目录复制,用新的覆盖ttf目录中的Revised文件,其中一个应用了新的ttf等。

相反,我们需要首先将mkv文件复制到Revised目录中,然后将第一个ttf文件应用于mkv中的自身,然后将已附加Revised的{​​{1}}并对其应用另一个ttf,直到所有Revised文件都已应用于{{1}内的新mkv }原始ttf和所有ttf文件将保留在父文件夹中。

注意,如果我所解释的内容没有任何意义,请告诉我,我会改写。

答案 1 :(得分:1)

我决定对此采取措施,目的是从保存您目录的父目录中运行,(我假设这些目录都在同一级别,因此不会通过嵌套递归目录)

请注意,我无法对此进行测试。

@Echo Off
Set "mkvm=%UserProfile%\Downloads\Video Players, Editors, & Downloaders\MKVTool Batch Modifier\mkvmerge.exe"
For /F Delims^=^ EOL^= %%A In ('Dir/B/AD 2^>Nul^|FindStr/IVXC:"Revised"'
) Do If Exist "%%A\*.mkv" (If Exist "%%A\*.ttf" (
        If Not Exist "Revised\" MD "Revised" 2>Nul||Exit /B
        Call :S1 "%%A"))
GoTo :EOF

:S1
PushD %1 2>Nul||Exit /B
Set "as=--attachment-mime-type application/x-truetype-font --attach-file"
Set "ttfs="
For /F Delims^=^ EOL^= %%A In ('Where .:*.ttf'
) Do Call Set "ttfs=%%ttfs%% %as% "%%~nxA""
For /F Delims^=^ EOL^= %%A In ('Where .:*.mkv'
) Do "%mkvm%" -q -o "%~dp0Revised\%%~nxA" "%%~nxA" %ttfs%
PopD

我想我也是这样做的,以允许一个目录中有多个.mkv文件,每个目录都将附加到所有相同的.ttf文件中

答案 2 :(得分:0)

Get-ChildItem *.mkv | ForEach-Object { 
        $FontFlags = ""
        Get-ChildItem -LiteralPath $_.BaseName -Exclude *.xml | ForEach-Object {
            $FontFlags += " --add-attachment `"$($_.FullName)`""
        }
        Write-Host "Running &`"C:\Program Files\MKVToolNix\mkvpropedit.exe`" `"$_`" $FontFlags"
        Invoke-Expression "&`"C:\Program Files\MKVToolNix\mkvpropedit.exe`" `"$_`" $FontFlags"
    }
    
    Read-Host "Press any key to exit..."

制作一个与 mkv 同名的文件夹,没有扩展名。将mkv文件,文件夹,这段代码放在同一个文件夹中并运行它。

我没有制作这个代码。我请人制作这个供我个人使用。