Пакетная обработка ручного тормоза с помощью CLI

2639
JK81

Использование инструмента GUI ВСЕГДА дает сбой, поэтому я пришел с командой, чтобы конвертировать мои файлы в мои потребности. Он берет предустановку, которую я создал в графическом интерфейсе, и преобразует файл.

У меня есть много видео, которые мне нужно конвертировать, и я хотел бы знать, можно ли выполнить пакетное конвертирование, используя какой-то скрипт, который читает все видео .MOV в папке и конвертирует их в .mp4, используя предоставленную мной команду.

Я использую Windows 10.

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

HandBrakeCLI.exe --preset-import-file "preset-name.json" -Z "preset-name" -i video.MOV -o video.mp4 

Отредактировано с более четким запросом.

0
(1) Исходя из того, что вы говорите «batch» и «.exe», я предполагаю, что вы говорите о Windows, но это хорошо сказать прямо. (2) Также будьте более откровенны в том, что вам нужно. Вы показываете одну команду. Что нужно для выпечки? Пожалуйста, не отвечайте в комментариях; [править] Ваш вопрос будет понятнее и полнее. Scott 6 лет назад 0
Обновлено .... натыкаясь JK81 6 лет назад 0
Просто проверяю ..... JK81 6 лет назад 0

2 ответа на вопрос

0
Scott

Хорошо, я думаю, у вас есть куча файлов, таких как

ant.mov bug.mov cat.mov dog.mov ︙ 

в каталоге (он же папка), и вы хотите сделать

HandBrakeCLI.exe (бла-бла-бла) -i ant.MOV -o ant.mp4 HandBrakeCLI.exe…… -i bug.MOV -o bug.mp4 HandBrakeCLI.exe…… -i cat.MOV -o cat.mp4 HandBrakeCLI.exe…… -i dog.MOV -o dog.mp4 ︙

для всех *.movфайлов. Это довольно просто:

для% F в (* .mov) выполните HandBrakeCLI.exe (бла-бла-бла) -i "% F" -o "% ~ nF.mp4"

В for %F in (*.mov)пробегах цикл, в котором %Fпринимает каждое применимое *.movимя. Затем doдля каждого файла выполняется следующая за ним команда, которая, %Fочевидно, заменяется .movименем файла. (Примечание: Fрегистр чувствителен.) (Вы можете обойтись без кавычек - то есть, скажем, просто %F, а не "%F"- но тогда произойдет сбой, если у вас есть имена файлов с пробелом (ами) или другие специальные символы в них) .) %~nFзаменяются на п Ame части файла (не включая расширение), поэтому %~nF.mp4становится вашим именем выходного файла.

Возможно, вы захотите разбить это на несколько строк, потому что ваша фактическая команда слишком длинная и / или потому что вы хотите делать другие вещи в цикле. Вы можете сделать это с помощью скобок:

для% F in (* .mov) do ( HandBrakeCLI.exe (бла-бла-бла) -i "% F" -o "% ~ nF.mp4" (другие команды, содержащие "% F", "% ~ nF" и т. Д.) )

Введите, for /?чтобы увидеть список всех ~кодов. (Например, %~dFдает вам букву диска и %~pFпуть. В документации неясно, можно ли комбинировать модификаторы; например, %~dpnFдиск, путь и имя, но не расширение - как будто вы напечатали %~dF%~pF%~nF.)

Вы также можете разбить длинные команды на несколько строк с помощью ^:

для% F in (* .mov) do ( HandBrakeCLI.exe - preset-import-file "preset-name.json" ^ -Z "имя-пресета" -i "% F" -o "% ~ nF.mp4" (другие команды, содержащие "% F", "% ~ nF" и т. д.) )

Все вышеперечисленное работает в командной строке (командной строке). То же самое работает в пакетном скрипте, за исключением того, что вы должны заменить каждый %на %%:

для %% F в (* .mov) do ( HandBrakeCLI.exe - preset-import-file "preset-name.json" ^ -Z "имя-пресета" -i "%% F" -o "%% ~ nF.mp4" (другие команды, содержащие "%% F", "%% ~ nF" и т. д.) )

Это проверено на Windows 7, но я был бы очень удивлен, если бы это не работало на Windows 10.

0
Timbuckto

Я хотел бы добавить немного к этому в случае, если вы конвертируете тот же тип файла из необработанного файла MKV (MakeMKV rip) в сжатый файл MKV. Приведенный выше код отлично подходит для просмотра одного файла, а затем преобразования в другой. Другой код, который я нашел, был похож и я копирую его с их сайта:

FOR /F "tokens=*" %%G IN ('DIR /B /S *.avi') DO "C:\Program Files\Handbrake\HandBrakeCLI" -i "%%G" -o "%%G".mp4 --preset="iPad" 

Однако это не помогло при конвертации .mkv -> .mkv. Я нашел методом проб и ошибок, что вам нужно удалить команду /Sв каталоге, чтобы она записывала только имя файла, а не весь путь к нему %%G.

Вот код, который я использую для извлечения профиля пользователя и отправки кода в другую папку:

FOR /F "tokens=*" %%G IN ('DIR /B *.mkv') DO "C:\Program Files\Handbrake\HandBrakeCLI" --preset-import-gui -Z "name of user preset" -i "%%G" -o "D:\Users\jeff\Videos\Path\To\File\%%G" pause 

Что следует отметить:

  1. Название пресета чувствительно к регистру, будь то ваше или встроенное.
  2. Если используется встроенная предустановка, вам не нужно иметь --preset-import-guiв коде
  3. Убедитесь, что переменная имеет кавычки после того, -iкак -i "%%G". Как будет указано выше, это позволит без ошибок использовать файлы с пробелами в имени.

Скопируйте нужный вам код в текстовый файл, а затем сохраните файл в виде файла .bat в каталоге фильмов, которые вы хотите конвертировать.

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

Похожие вопросы