2

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

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

#!/bin/bash

SRC="/home/usr/temp/encode"
PRESET="-e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1"    

find $SRC -type f -name '*.mp4' -exec bash -c 'name="{}"; HandBrakeCLI -i "$name" -o "${name}.tmp" $PRESET && rm "$name" && mv "${name}.tmp" "$name"' \;

find $SRC -type f -name '*.wmv' -exec bash -c 'name="{}"; HandBrakeCLI -i "$name" -o "${name%.wmv}.mp4" $PRESET && rm "$name"' \;

find $SRC -type f -name '*.mov' -exec bash -c 'name="{}"; HandBrakeCLI -i "$name" -o "${name%.mov}.mp4" $PRESET && rm "$name"' \;

exit

Если бы я делал этот файл за файлом из командной строки, он бы выглядел так

HandBrakeCLI -i "filename.mov" -o "filename.mp4" -e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1

Если бы я изменил размер файла mp4, я бы сделал это, чтобы не перезаписывать файл, так как он кодируется. Вот почему у меня есть дополнительные вещи на первую находку.

HandBrakeCLI -i "filename.mp4" -o "filename.NEW.mp4" -e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1

1 ответ1

1

Подстановка переменных не работает в одинарных кавычках. Используйте двойные кавычки и escape-символ, чтобы поместить двойные кавычки в двойные кавычки.

find $SRC -type f -name '*.mp4' -exec bash -c "name=\"{}\"; HandBrakeCLI -i \"$name\" -o \"${name}.tmp\" $PRESET && rm \"$name\" && mv \"${name}.tmp\" \"$name\"" \;

Это относится и к другим линиям.

Обновлено: Ах, извините. Я неправильно понял ваш вопрос.

Здесь пересмотренный сценарий. Вместо использования exec, я использую while-do для зацикливания

#!/bin/bash

SRC="/home/usr/temp/encode"
PRESET="-e x264 -q 20.0 -E faac -B 128 -6 dpl2 -w 1280 --loose-crop --loose-anamorphic --x264-preset veryfast --h264-profile high --h264-level 4.1"    

find $SRC -type f -name '*.mp4' | while read name; do HandBrakeCLI -i "${name}" -o "${name}.tmp" ${PRESET} && rm "${name}" && mv "${name}.tmp" "${name}"; done

find $SRC -type f -name '*.wmv' | while read name; do HandBrakeCLI -i "${name}" -o "${name%.wmv}.mp4" ${PRESET} && rm "${name}"; done

find $SRC -type f -name '*.mov' | while read name; do HandBrakeCLI -i "${name}" -o "${name%.mov}.mp4" ${PRESET} && rm "${name}"; done

exit

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