http://www.lissyara.su/?id=1274
Скрипт кодирования dvd в avi. Кодек DIVX (FMP4),
2 прохода, качество выбирается вручную, размер видео 700 Мб.
Либо, если кодируемый файл небольшой, то битрейт видео ставится равный 1000, а размер как получится, но < 700 Мб.
Аудио дорожка кодируется в mp3 с битрейтом 128 и выравнивается громкость.
По окончании кодирования отсылается уведомление на почту.
#! /bin/bash #----------------------------------------------------------------------- #/dvd2divx.sh #Скрипт кодирования dvd в avi. Кодек DIVX (FMP4), #2 прохода, качество выбирается вручную, размер видео 700 Мб. #Либо, если кодируемый файл небольшой, то битрейт видео ставится равный 1000, #а размер как получится, но < 700 Мб. #Аудио дорожка кодируется в mp3 с битрейтом 128 и выравнивается громкость. #По окончании кодирования отсылается уведомление на почту. #ВНИМАНИЕ!!! Кодирование с качеством идет очень медленно. #Основные настройки скрипта задаются в ниже идущих переменных. #------------------------------------------------------------------------ FILESCOUNT=0 OUT_FILE="VideoOut.avi" VBITRATE="" CROP="" PASS1="vpass=1" PASS2="vpass=2" OAC="-oac mp3lame -lameopts br=128:vbr=3" CODER="nice -n 19 mencoder -quiet" PLAYER="nice -n 19 mplayer -frames 100 -vo null -ao null -vf scale=730:-2,cropdetect" AFILTER="-af volnorm,volume=0:1" MAIL="xxxx@xxxx.ru" DATA="`date`" #Проверка входных параметров if [ $# -lt 2 ] ; then echo "dvd2divx.sh <каталог с VOB файлами> <качество>" echo "Качество кодирования:" echo " vhq - очень высокое;" echo " hq - высокое;" echo " f - быстрое;" echo " rt - реального времени." echo "Пример: dvd2divx.sh /decode vhq" exit 1 fi if [ -d "$1" ] ; then cd $1 else echo "Ошибка! Директория $1 не существует." exit 1 fi FILELIST=`ls $1 | grep VOB` if [ -z "$FILELIST" ] ; then echo "Ошибка! В директории $1 не найдено VOB файлов." exit 1 fi for FILE in $FILELIST do if [ -f "$FILE" ] ; then CROPFILE="$FILE" else echo "Ошибка! $FILE не является файлом." exit 1 fi done #Оценка обрезки ${PLAYER} ${CROPFILE} > crop.log CROP=`tail -n 4 crop.log | grep crop | awk -F= '{print $2}' \ | awk -F\) '{print $1}'` VFILTER="-vf pullup,softskip,scale=730:-2,crop=${CROP},hqdn3d=2:1:2" rm -r crop.log #Размер аудио файла. Битрейт видео. nice -n 19 cat *.VOB | ${CODER} -ovc frameno ${OAC} ${AFILTER} \ -o frameno.avi -ni - > bitrate.log VBITRATE=`cat bitrate.log | grep "Recommended video bitrate for 700MB CD" \ | awk '{print $7}'` rm -rf frameno.avi rm -rf bitrate.log #Кодирование видео if [ -z "$VBITRATE" ] ; then echo "Ошибка! Битрейт видео не определен. \ Устанавливаем значение по умолчанию." VBITRATE=1000 fi if [ "$VBITRATE" -gt "2000" ]; then echo "Ошибка! Битрейт слишком высокий: $VBITRATE. \ Устанавливаем значение по умолчанию." VBITRATE=1000 fi case "$2" in vhq) OVC="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:\ mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:\ vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vhq=4:autoaspect" ;; hq) OVC="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:mbd=2:\ trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:\ subcmp=3:precmp=0:vqcomp=0.6:turbo" ;; f) OVC="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:mbd=2:\ trell:v4mv:turbo" ;; rt) OVC="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:mbd=2:turbo" ;; *) echo "Ошибка! Не существующий параметр качества кодирования." exit 1 esac nice -n 19 cat *.VOB | ${CODER} ${OVC}:${PASS1} -oac copy -o /dev/null - && \ nice -n 19 cat *.VOB | ${CODER} ${OVC}:${PASS2} ${VFILTER} ${OAC} \ ${AFILTER} -o ${OUT_FILE} - #Шлем письмо хозяину echo "" >> messages echo "Закончено кодирование DVD файла" >> messages echo "Директория $1" >> messages echo "Входящий(e) файл(ы) ${FILELIST}" >> messages echo "Исходящий файл ${OUT_FILE}" >> messages echo "Обработка файла начата ${DATA}" >> messages echo "Обработка закончена `date`" >> messages cat messages | mail -s "Decode dvd in $1" ${MAIL} rm -f messages rm -f divx2pass.log