Скрипт для кодирования AVI mencoder'ом c dvd


Данный скрипт,  делает двухпроходное видео.

Использование:

Для начала копруем фильм с DVD

   mencoder dvd:// -oac copy -ovc copy -o name.vob

Заметьте, что имя файла имеет разширение vob (маленькими буквами),
скрипт сам переделает его потом в avi. 2. Считаем переменную CROP :

   mplayer -vf cropdetect name.vob

Должны появиться строки наподобии

   crop area: X: 10..711  Y: 73..497  (-vf crop=688:416:18:78).6% 0 0              
   crop area: X: 10..711  Y: 73..497  (-vf crop=688:416:18:78).6% 0 0              
   crop area: X: 10..711  Y: 73..497  (-vf crop=688:416:18:78).6% 0 0              

В данном случае нам нужно "688:416:18:78", именно это и ставим в значение переменной
Только убедитесь что значения получены правильно.
Иногда mencoder ошибается. Поправте значение ABITRATE (битрейт аудио потока) если нужно.

сохраняем скирт с именем coder ,даем команду chmod +x coder

Далее запускаем:

   ./coder -a

Это заставит mencoder выдать битрейт для видео.
После того как поправили значение VBITRATE (битрейт видео потока), запускаем

   ./coder

Скрипт:

#!/bin/sh

IN_FILE="`ls -1|grep *.vob`"
OUT_FILE="`echo ${IN_FILE}|sed s/vob/avi/`"
VBITRATE=""
ABITRATE="128"
CROP=""
ASPECT=""
EQ="eq=0:0"
XY="640"
PASS1="pass=1"
PASS2="pass=2"
PP="pp=hb/vb/dr/ci"
#/al - авто яркость
OVC="-ovc xvid -xvidencopts bitrate=${VBITRATE}:vhq=4"
OAC="-oac mp3lame -lameopts br=${ABITRATE}:vbr=3 -alang ru"
CODER="mencoder"
VFILTER="${ASPECT} -vf ${EQ},${PP},crop=${CROP},scale -zoom -xy ${XY} -ofps 24"
AFILTER="-af volnorm,volume=0:1"
MAIL="stress@stress.volot.net"
WD="${PWD}"
DATA="`date`"
clean ()
{
    rm -fr frameno.avi
}

audio_convert ()
{
    clean;
    ${CODER} ${IN_FILE} \
    -ovc frameno \
    ${OAC} \
    ${AFILTER} \
    ${VFILTER} \
    -o /dev/null
    clean;
}
 
video_convert ()
{
    clean
    if [ -z "${VBITRATE}" ]
    then
    {
        echo "Битрейт видео потока не установлен!"
    }
    fi
    
    if [ "${1}" != "d" ]
    then
    {
        OUT_FILE_1="/dev/null"
    }
    else
    {
        OUT_FILE_1="${OUT_FILE}"
    }
    fi
    
    nice -n 19 ${CODER} ${IN_FILE} \
    ${OVC}:${PASS1} \
    -oac copy \
    ${VFILTER} \
    -o ${OUT_FILE_1} && \
    nice -n 19 ${CODER} ${IN_FILE} \
    ${OVC}:${PASS2} \
    ${OAC} \
    ${AFILTER} \
    ${VFILTER} \
    -o ${OUT_FILE}
}

#send_mail [a,v]
#a - аудио обработка; v - видео обработка
send_mail ()
{
    MSG="/tmp/coder"
    A="аудио"
    V="видео"
    
    if [ $1 = "a" ]
    then
    {
        WORK=${A}
    }
    fi
    if [ $1 = "v" ]
    then
    {
        WORK=${V}
    }
    fi
    

    echo "" >> ${MSG}
    echo "Закончена ${WORK} обратотка файла"  >> ${MSG}
    echo "Директория ${WD}" >> ${MSG}
    echo "Входящий файл ${IN_FILE}" >> ${MSG}
    echo "Исходящий файл ${OUT_FILE}" >> ${MSG}
    echo "Обработка файла начата ${DATA}"
    echo "Обработка закончена `date`"
    cat $MSG | mail -s "coder in ${WD}" ${MAIL} \
        -a "Content-Type: text/plain; charset=\"koi8-r\"" -a "Content-Transfer-Encoding: 7bit"
    rm -f ${MSG}
}

if [ "${1}" = "-a" ]
    then
    {
    audio_convert && \
    send_mail a
    }
fi
if [ "${1}" = "-d" ]
    then
    {
        video_convert d && \
    send_mail v

    }
fi

if [ "${1}" = "" ]
    then
    {
        video_convert && \
    send_mail v

    }
    
fi