Задать вопрос
KorP
@KorP
Кратко о себе

Помогите отладить автоконвертер видео на bash плиз

Господа, пытаюсь написать скриптик, который бы проверял наличие уже сконвертированного файла в заданной папке и если его нет — кодировал. НАверное по коду будет проще понять что я имею ввиду.
pastebin.com/C7aG2LEQ

Проблема в 12 строке, почему то проскакивает проверку существующий файл, в итоге пытается кодировать его повторно, что в общем то совершенно и не нужно мне делать, ибо файлов там навалом. Подскажите плиз в чём ошибка
  • Вопрос задан
  • 2447 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
sledopit
@sledopit
М, а как это у вас между строчкой if и then ещё какие-то команды затесались?
if [[ ! -e i.mp4 ]]
then  
echo "$i.mp4 not exist" 
echo "Converting "$i"." 
/usr/local/bin/ffmpeg -i ${video_folder}$i.mkv -acodec aac -strict experimental -ab 128k -ac 2 -vcodec libx264 -b 1200k -s 1280x720 -r 30 -threads 0                 ${films_folder}$i.mp4 ; echo "Convert "$i" to mp4 is done!"
fi

Так всё ок.

Ну и я ещё позанудствую чуток:
for i in `ls -a $video_folder/*$file_mask*.mkv`

Никогда так не делайте, слышите? Никогда! Вдруг у вас в имени пробелы и всякие непечатыемые символы?
for i in $video_folder/*$file_mask*.mkv

Вот так правильно.
i=$(echo $i | sed 's/.mkv//' | sed 's%^.*/%%')

омг. на фига тут sed?
echo ${i/.mkv}

прекрасно со всем справится.

Ну и else с shift'ом тут совершенно не нужны.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Petr0vich
Зачем два раза квадратные скобки?
Ответ написан
Комментировать
@egorinsk
Bash-скрипт в 99% случаев должен начинаться с set -e. Странно, что никто не замечает таких вопиющих ошибок.
Ответ написан
Комментировать
@BrainHacker
Если у вас сообщение "${films_folder}$i.mp4 not exist" выводит правильное имя файла, то попробуйте перенести строки 13 и 14 внести под «then»:
if [[ ! -e "${films_folder}$i.mp4" ]]
then
    echo "${films_folder}$i.mp4 not exist"
    echo "Converting "$i"."

    /usr/local/bin/ffmpeg -i ${video_folder}$i.mkv -acodec aac -strict experimental -ab 128k -ac 2 -vcodec libx264 -b 1200k -s 1280x720 -r 30 -threads 0 ${films_folder}$i.mp4

    echo "Convert "$i" to mp4 is done!"
else
    shift
fi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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