Помощь скрипта пакетного преобразования ручного тормоза для установки выходного расширения, указанного в официальных пресетах

451
Saidul Hassan

Благодаря многочисленным дискуссиям о сети SE и других местах мне, наконец, удалось создать рабочий скрипт, который хорошо работает, кроме предустановок Matroska. Я понимаю, что проблема заключается в самом скрипте, так как он определяет расширение назначения как MP4.

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

Контейнер большинства пресетов - это MP4, поэтому он работает для большинства пресетов, кроме MKV. Вот пример скрипта, который работает для MP4:

#!/bin/bash # Configure these as needed SRC=~/hbCLI/src DEST=~/hbCLI/dest DEST_EXT=mp4 HANDBRAKE_CLI=HandBrakeCLI PRESET="Fast 480p30" IFS=$(echo -en "\n\b") # The script itself for FILE in `ls $SRC` do filename=$(basename $FILE) extension=$ filename=$ $HANDBRAKE_CLI -i $SRC/$FILE -o $DEST/$filename.$DEST_EXT --preset="$PRESET" --optimize --two-pass done 

Однако для Matroska пресетов нужно только изменить линию PRESET="Fast 480p30"на PRESET="H.264 MKV 480p30"но расширение выход еще mp4вместо mkv.


Дополнительный запрос:
не является частью вопроса, но если кто-то из вас может помочь мне улучшить скрипт, чтобы вывод сохранялся DEST=~/hbCLI/dest/$PRESETвместо того, чтобы DEST=~/hbCLI/destозначать, что вывод будет сохранен в папке с заданным именем, если его не существует, создать папку.

Спасибо!

0
Если вам придется вручную вводить имя предустановки, не проще ли будет просто добавить расширение вручную? slhck 5 лет назад 0
@slhck Да, это именно то, чем я сейчас управляю, но для этого мне нужно знать заранее заданный формат контейнера. Вот почему я искал способ, если формат контейнера может быть автоматически выбран в соответствии с предустановкой. Saidul Hassan 5 лет назад 0
Я думал, что имя контейнера уже является частью имени предустановки, как показано в вашем примере? (То есть `PRESET =" H.264 MKV 480p30` означает, что он использует MKV) slhck 5 лет назад 0
Не все предустановленные имена являются такими информативными, например, «Gmail Large 3 Minutes 720p30». Тем не менее я вижу, что ваша точка зрения имеет неоспоримую логику. Я думаю, я пытаюсь сделать все как можно более автоматическим. Меньше ввода, вероятно, :) Saidul Hassan 5 лет назад 0
Я могу взглянуть позже, но в принципе вы можете посмотреть, где Handbrake сохраняет свои пресеты (я предполагаю, что это просто текстовые файлы где-то на вашем компьютере), из которых вы можете прочитать требуемое расширение. В вашем скрипте есть несколько настроек, которые можно автоматизировать. (Я предполагаю, что ваша цель состоит в том, чтобы закодировать один и тот же входной файл или несколько входных файлов со всеми доступными пресетами или хотя бы выбранным подмножеством из них?) slhck 5 лет назад 0
Именно так! И спасибо за ваше внимание. Ожидание в ожидании. Saidul Hassan 5 лет назад 0
На какой ОС вы работаете? Похоже, что предустановки хранятся в файле JSON в `~ / Library / Application Support / HandBrake / UserPresets.json`, поэтому их будет немного сложнее читать из сценария Bash. На самом деле, может быть проще использовать Python для анализа этих данных. slhck 5 лет назад 0
Я на Linux Mint 18.3 Cinnamon. Saidul Hassan 5 лет назад 0
как вы решаете, какой пресет вы хотите? Может быть, вы могли бы подумать о выборе пресета в зависимости от типа файла. если $ extension = mkv, то $ preset = $ presetmkv, иначе $ presetmp4 Antony 5 лет назад 0

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

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