DVD ===> MP4? *** За 3 прохода ***:
rm frameno.avi # удалить этот файл со звуком, если такой остался с прошлого 3-хпроходного кодирования
mencoder -dvd 1 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
mencoder -dvd 1 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=1057 -oac copy -o movie.avi
mencoder -dvd 1 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=1057 -oac copy -o movie.avi
Кодирование делается в три прохода.
- сначала делается звуковой файл, чтобы его не кодировать дважды.
- после первого прохода mencoder советует видео-bitrate для успешного кодирования на CD-диски (650/700/800Mb)
- на первом проходе звук кодируется в MP3 с использованием программы Lame, выбирается способ с переменным битрейтом (vbr=3).
:vbitrate=1057 указывает, что bitrate видео должен быть сделан 1057Kb/sec.
-dvd 1 - говорит, что кодировать надо первую видеозапись. На некоторых дисках фильм идет вторым, тогда опция будет выглядеть так: -dvd 2
-oac copy - говорит, что аудиокодек это просто копирование звуковой дорожки.
-o указывает название выходного файла movie.avi
-:vpass указывает номер прохода.
Для пробы за 1.5 часа на PIV-2.4/DVD-16x без проблем обработал 94-минутный фильм.
Может потребоваться указать номер русской звуковой дорожки. Определить номер дорожки можно так:
mencoder -v -endpos 0 -dvd 1 -nosound -ovc frameno
В информации, выдаваемой mencoder-ом, найдите строку про звук "ru", Там и будет указана цифра для ключа -aid
Для автоматизации процесса можно использовать простенький скрипт:
#!/bin/bash
#
# Простенький скрипт для создания mpeg4 <== DVD
#
#
# VN - номер видеозаписи в заголовке
#
VN=1
#
# Первый шаг - узнать ID русской звуковой дорожки
#
# Для этого получим инфо о DVD (ключ -v)
#
SS="language: ru aid:"
typeset -i aid
s=`mencoder -v -endpos 0 -dvd $VN -nosound -ovc frameno | grep "$SS" `
echo "$s"
if [ `echo "$s" | wc -l` != "1" ]
then
echo "Проблемы с определением русской аудиодорожки"
echo "Вот:$s"
exit 1;
fi
aid=`echo "$s" | awk -F: '{print $5}'`
if [ $? != 0 ] ; then echo "Проблемы с определением русской аудиодорожки"; exit 1; fi
if [ -f frameno.avi ]
then
# remove this file, which can come from a previous 3-pass encoding (it interferes with current one)
rm -f frameno.avi; if [ $? != 0 ] ; then echo "Error removing frameno.avi"; exit 1; fi
fi
#
# Получаем файл со звуком, по дороге узнаем предполагаемый видео-битрейт.
#
SS="for 800MB CD:"
typeset -i vr
vr=`mencoder -dvd $VN -aid $aid -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3 \
| grep "$SS" | awk -F: '{print $2}'`
if [ $? != 0 ] ; then echo "Error on pass0"; exit 1; fi
mencoder -dvd $VN -aid $aid -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=$vr \
-oac copy -o movie.avi
if [ $? != 0 ] ; then echo "Error on pass1"; exit 1; fi
mencoder -dvd $VN -aid $aid -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=$vr \
-oac copy -o movie.avi
if [ $? != 0 ] ; then echo "Error on pass2"; exit 1; fi
Убого, но удобно. Иногда ручками стоит поменять предполагаемый размер CD(800MB) и номер видеозаписи (-dvd 1).