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

问题描述 投票:1回答:2

好吧,我是全新的...基本上我使用工具调用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文件,其中sans serif.tff文件附加在.mkv文件中。但是我想添加多个.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文件仍然存在。

batch-file batch-processing true-type-fonts mkv
2个回答
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文件中。


3
投票

请试一试。 (请记住将%mkvmerge%变量设置为可执行路径):

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

所以要解释你的例子出了什么问题:

在for循环中,你从根文件夹中的mkv开始应用,并将ttf文件应用到它并使用附加的mkv创建新的ttf文件到Revised目录,然后为下一个ttf再次从根目录复制,覆盖mkv目录中的Revised文件,其中添加了一个新的ttf等。

相反,我们需要首先将mkv文件复制到Revised目录然后我们在ttf中将第一个Revised文件应用于自身,然后将mkv与已经附加的ttf一起使用并应用另一个ttf直到所有ttf文件适用于mkv内部的新Revised原始的mkv和所有ttf文件将保留在父文件夹中。

请注意,如果我解释的任何内容没有意义,请告诉我,我会重新说明。

© www.soinside.com 2019 - 2024. All rights reserved.