Пакетное вложение нескольких файлов .ttf в .mkv - PullRequest
0 голосов
/ 15 февраля 2019

Хорошо, я новичок в этом ... По сути, я использую инструментальный вызов 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"

Это работает, если я изменяю "%% ~ .ttfmsgstr "к фактическому имени файла .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 в папке.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Я решил попробовать, он предназначен для запуска из родительского каталога, содержащего ваши каталоги, (я предположил, что все эти каталоги находятся на одном уровне, это не повторяется через вложенныекаталоги) .

Имейте в виду, что я не могу проверить это.

@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 файлам.

0 голосов
/ 15 февраля 2019

Пожалуйста, попробуйте.(Не забудьте установить переменную %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 вы берете apply изmkv внутри корневой папки, примените к ней файл ttf и создайте новый файл mkv с прикрепленным ttf к каталогу Revised, затем для следующего ttf вы снова скопируете изкорневой каталог, перезаписывая файл mkv в каталоге Revised новым каталогом, к которому был применен новый ttf и т. д.

Вместо этого нам сначала нужно сделать копию файла mkvв каталог Revised, затем мы применяем первый ttf файл к себе в Revised, а затем берем mkv с уже прикрепленным ttf и применяем еще один ttf к нему, пока все ttf файлы не получатбыл применен к новому mkv внутри Revised Оригинальный mkv и все файлы ttf останутся в родительской папке.

Примечание , если что-либо из этогообъяснять не имеет смысла, дайте мне знать и я перефразирую.

...