将多个 .ttf 文件批量附加到一个 .mkv
Batch attachment of multiple .ttf files to a .mkv
好的,我对此完全陌生...基本上,我使用名为 mkvmerge 的工具将多个字体文件 (.ttf) 附加到 .mkv 文件。我已将 .mkv 文件与我要附加的相应字体一起放入文件夹中。
我的目标是创建一个批处理,创建一个包含所有添加附件的所有 .mkv 文件的副本,并将它们存放在父目录中新创建的文件夹(即 Revised)中。
从一个文件夹开始:
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 文件保留下来。
请试一试。 (记得将您的 %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
你再次从根目录复制,用新文件覆盖 Revised
目录中的 mkv
文件应用了新的 ttf
等
相反,我们需要先将 mkv
文件复制到 Revised
目录中,然后我们将第一个 ttf
文件应用于 Revised
中的自身,然后然后使用 mkv
和已经附加的 ttf
并应用另一个 ttf
直到所有 ttf
文件都已应用到 [= 内的新 mkv
16=] 原始 mkv
和所有 ttf
文件将保留在父文件夹中。
注意如果我解释的任何内容没有意义,请告诉我,我会重新措辞。
我决定尝试一下,它的目的是 运行 来自包含您的目录的父目录,(我假设这些目录都在同一个目录中级别,这不是通过嵌套目录递归).
请注意,我无法对此进行测试。
@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
个文件。
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 文件、文件夹、这段代码放在同一个文件夹和 运行 它。
我没有编写此代码。我请人做了这个供我个人使用。
好的,我对此完全陌生...基本上,我使用名为 mkvmerge 的工具将多个字体文件 (.ttf) 附加到 .mkv 文件。我已将 .mkv 文件与我要附加的相应字体一起放入文件夹中。
我的目标是创建一个批处理,创建一个包含所有添加附件的所有 .mkv 文件的副本,并将它们存放在父目录中新创建的文件夹(即 Revised)中。
从一个文件夹开始:
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 文件保留下来。
请试一试。 (记得将您的 %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
你再次从根目录复制,用新文件覆盖 Revised
目录中的 mkv
文件应用了新的 ttf
等
相反,我们需要先将 mkv
文件复制到 Revised
目录中,然后我们将第一个 ttf
文件应用于 Revised
中的自身,然后然后使用 mkv
和已经附加的 ttf
并应用另一个 ttf
直到所有 ttf
文件都已应用到 [= 内的新 mkv
16=] 原始 mkv
和所有 ttf
文件将保留在父文件夹中。
注意如果我解释的任何内容没有意义,请告诉我,我会重新措辞。
我决定尝试一下,它的目的是 运行 来自包含您的目录的父目录,(我假设这些目录都在同一个目录中级别,这不是通过嵌套目录递归).
请注意,我无法对此进行测试。
@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
个文件。
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 文件、文件夹、这段代码放在同一个文件夹和 运行 它。
我没有编写此代码。我请人做了这个供我个人使用。