2013-10-24 6 views
3

Во-первых, я искал для своей проблемы. Но никто не может ее решить.HandBrakeCLI bash script конвертировать все видео в папку

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

#!/bin/bash 

SRC="/home/abc/public_html/filex/store/vids/toriko/VIDEOS HERE" 
DEST="/home/abc/public_html/filex/store/vids/toriko/51-100" 
DEST_EXT=mp4 
HANDBRAKE_CLI=HandBrakeCLI 
PRESET="iPhone & iPod Touch" 

for FILE in "`ls $SRC`" 
do 
filename=$(basename $FILE) 
extension=${filename##*.} 
filename=${filename%.*} 

$HANDBRAKE_CLI -i "$SRC"/$FILE -o "$DEST"/"$filename".$DEST_EXT "$PRESET" 

done 

проблема в том, что выход файла будет без имени файла .. только ".mp4". и, есть только 1 файл сгенерирован .. означает, из 50 видео в папке, только 1 файл, сгенерированный с именем «.mp4», и после этого выйдет HandBrakeCLI. может ли кто-нибудь исправить мой код? я не получил Experince в кодировании баш .. поэтому, правильный сценарий giiven будет признателен :)

ответ

2

Ваша линия

for FILE in "`ls $SRC`" 

эффективно создает только одну итерацию, где FILE содержит список файлов (и не может обрабатывать пространство в $SRC). Лучше заменить его

for FILE in "$SRC"/* 

Пример:

$ ls test 
1.txt 2.txt 
$ SRC=test; for f in "`ls $SRC`" ; do echo $f; done 
1.txt 2.txt 
$ SRC=test; for f in "$SRC"/* ; do echo $f; done 
test/1.txt 
test/2.txt 

Side Примечание: вы можете иметь место в там без проблем

$ ls "the test" 
1.txt 2.txt 
$ SRC="the test"; for f in "$SRC"/* ; do echo $f; done 
the test/1.txt 
the test/2.txt 
+0

Я изменил сценарий. теперь процесс кодирования работает хорошо. Я могу это увидеть, посмотрев созданный им результат, который имеет свое имя вместо «.mp4» .. разрешите смотреть пару видео без ошибок, и я пометю ваш ans :) btw, спасибо :) – G3M

+0

Не забывайте;) – damienfrancois

+0

закончить без ошибок :) спасибо – G3M

0

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

Итак ...

имя_файла = $ (базовое "$ FILE")

и

$ HANDBRAKE_CLI -i "$ SRC"/"$ FILE" -o "$ DEST" /"$filename".$DEST_EXT "$ PRESET"

2

Я пробовал этот скрипт, а другим понравился, но мне захотелось преобразовать дерево рекурсивных каталогов и файлы, помещенные в тот же каталог с расширением .mp4 и удалить .avi файлы, после долгих проб и ошибок, я отказался от этого кода и искал новый код, id как кредит

http://www.surlyjake.com/blog/2010/08/10/script-to-run-handbrake-recursively-through-a-folder-tree/

Для исходного кода!

Вот мой модифицированный скрипт, едва модифицированный BTW, этот скрипт короткий, сладкий и понятный.

#!/bin/bash 

# This Script Goes in Root Folder of TV show -- Example Folder Structure 
# /Stargate/Season\ 1/Epiosde.avi 
# /Stargate/Season\ 2/Epiosde.avi 
# /Stargate/handbrake_folder.script 
# Outputs all Files back inside same dir's and does all folders inside Startgate DIR 
# /Stargate/Season\ 1/Epiosde.mp4 
# /Stargate/Season\ 2/Epiosde.mp4 

# PRESET = -o flags for CLI can be got from GUI under Activity Log or from https://trac.handbrake.fr/wiki/CLIGuide OR you can use actual Presets! 

# PRESET="iPhone & iPod Touch" 

PRESET="--modulus 2 -e x264 -q 20 --vfr -a 1 -E ac3 -6 5point1 -R Auto -B 384 -D 0 --gain 0 --audio-fallback ac3 --encoder-preset=veryfast --encoder-level="5.2" --encoder-profile=high --verbose=1" 

if [ -z "$1" ] ; then 
TRANSCODEDIR="." 
else 
TRANSCODEDIR="$1" 
fi 
find "$TRANSCODEDIR"/* -type f -name "*.avi" -exec bash -c 'HandBrakeCLI -i "$1" -o "${1%\.*}".mp4 --preset="$PRESET"' __ {} \; && find . -name '*.avi' -exec rm -r  {} \; 

предупреждает: ЭТО CONVERT ТОГДА УДАЛИТЬ ВСЕ .AVI ФАЙЛОВ над СЦЕНАРИЕМ В файловом дереве!

Вы можете удалить

[-name "*.avi"] & [&& find . -name '*.avi' -exec rm -r  {} \;] 

отключить только преобразования .avi и удаление .avi или изменения номера другого внутреннего абонента.

Приветствия и надежда это помогает кому-то!

+0

Извините, что беспокою вас, это не подходит для меня с текущей версией CLI: 0.10.2/OSX 10.11.2 Сценарий, по-видимому, немедленно заканчивается выходом; Любые идеи?/Спасибо за ваше время! – Levi

+1

У меня есть более длинная версия [здесь] (https://www.freesoftwareservers.com/index.php/2015/09/04/convert-videos-recursive-with-handbrake-script-handbrakecli/), но только из Любопытство u конвертирует AVI? и вы попробовали упростить PRESET? – FreeSoftwareServers

+0

Я получил скрипт! Да, я конвертирую файлы AVI, хотя, как ни странно, файлы mp4 больше, чем исходные файлы avi ... Я не пытался указать пресет, я попытался понизить -q-поле до 38, но я получаю тот же размер файла. Я попробую этот скрипт, спасибо за полезные советы! – Levi

1

Я нашел решение:

#!/bin/bash 

SRC="/home/abc/public_html/filex/store/vids/toriko/VIDEOS HERE" 
DEST="/home/abc/public_html/filex/store/vids/toriko/51-100" 
DEST_EXT=mp4 
HANDBRAKE_CLI=HandBrakeCLI 

for FILE in "$SRC"/* 
do 
    filename=$(basename "$FILE") 
    extension=${filename##*.} 
    filename=${filename%.*} 
    $HANDBRAKE_CLI -i "$FILE" -o "$DEST"/"$filename".$DEST_EXT 
done 

 Смежные вопросы

  • Нет связанных вопросов^_^