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

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

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

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

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

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

2 ответа2

0

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

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

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

HandBrakeCLI.exe  (blah blah blah)  -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 .  Это довольно просто:

for %F in (*.mov) do HandBrakeCLI.exe  (blah blah blah)  -i "%F" -o "%~nF.mp4"

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

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

for %F in (*.mov) do (
    HandBrakeCLI.exe  (blah blah blah)  -i "%F" -o "%~nF.mp4"
    (other command(s) featuring "%F", "%~nF", etc.)
)

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

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

for %F in (*.mov) do (
    HandBrakeCLI.exe --preset-import-file "preset-name.json" ^
                      -Z "preset-name" -i "%F" -o "%~nF.mp4"
   (other command(s) featuring "%F", "%~nF", etc.)
)

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

for %%F in (*.mov) do (
    HandBrakeCLI.exe --preset-import-file "preset-name.json" ^
                      -Z "preset-name" -i "%%F" -o "%%~nF.mp4"
   (other command(s) featuring "%%F", "%%~nF", etc.)
)

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

0

Я хотел бы добавить немного к этому в случае, если вы конвертируете тот же тип файла из необработанного файла 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 в команде directory, чтобы она записывала только имя файла, а не весь путь к %%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 в каталоге фильмов, которые вы хотите конвертировать.

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

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