Поэтому я искал ответ на этот вопрос и смог найти очень много подобных случаев, но не смог найти ответ на то, что я пытаюсь сделать.

Я взглянул на эти две темы, в частности:

Кроме того, Google будет вокруг и читать кучу страниц справки безрезультатно. (Это не значит, что ответов там нет, я просто не могу их найти!)


В любом случае, с этим предисловием, вот что я пытаюсь сделать:

У меня есть три папки (и миллиард файлов) этого:

  • Показать имя - S ## E ## - Title.mp4
  • Показать имя - S ## E ## - Title.eng.srt

Я пытаюсь объединить все .mp4 и .srt в просто Show Name - S##E## - Title.mkv с субтитрами, включенными в файл.

Проблема с первым связанным потоком, который я связал, заключается в том, что он просто превращает .mp4 в .mkv и вообще не объединяет субтитры.

Код:

FOR %%A IN (*.mp4) DO "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~nA.mkv" "%%~A"

Это создает файл .mkv, но не включает субтитры. Если я пытаюсь добавить "%%~dpnA.srt" или что-либо после "%%~A" , я получаю сообщение: Error: The file 'C:\Users\xnaas\Desktop\test\Show Name - S##E## - Title.srt' could not be opened for reading: open file error. и тому подобное. Я думаю, что моя самая большая путаница в том, что я не знаю, что делает то, что я печатаю. Что делает ~ или nA ?

Проблема со второй ссылкой заключается в том, что я не знаю, как адаптировать ее к пакетной форме, потому что я не совсем уверен, как это сделать с помощью ffmpeg. Я предполагаю, что это просто еще один цикл, но я не настолько знаком с ним.

Это единственный скрипт, который я использовал для ffmpeg (Linux сейчас против Windows выше):

for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -preset medium -crf 18 -c:a copy "encoded/${f%.mkv}.mkv"; done

Я уверен, что это может быть адаптировано, но я не уверен, как.

for f in *.mp4; do ffmpeg -i "$f" -c copy "test/${f%}.mkv"; done

Это лучшее, что я мог придумать после долгого перебора, но это, очевидно, не приводит к файлам субтитров, а также называет все .mp4.mkv .


Извините за массивную стену дерьма там. Я с нетерпением жду любой помощи / идеи, которую может предложить каждый. Спасибо!

1 ответ1

0

Я попытаюсь объяснить, как указанные здесь параметры пакета применяются к заданному вами сценарию.

Базовым параметром в цикле FOR является %%A %%A изменяется следующим образом:

  • "%%~nA.mkv" удаляет кавычки (~) и использует только имя файла (n).
  • "%%~A" просто удаляет любые кавычки (~)

Я думаю, что ваша последняя команда должна выглядеть так:

FOR %%A IN (*.mp4) DO "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~nA.mkv" "%%~A" "%%~nA.eng.srt"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .