|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> Мелочи
—> dvd в avi
Кодирование dvd в avi
Автор: serge.
  Все началось с того, что каталог в котором хранится видео стал занимать неприлично много места. Он был общий для всего нашего отдела и каждый приносил и скидывал что-то интересное и новое. Причем формат файлов был преимущественно DVD. Тогда и пришла мысль пережимать VOB файлы, создавая из них AVI.
  В портах FreeBSD для этих целей существует несколько решений, но мой выбор пал на MPlayer (MEncoder). Понравился он мне тем, что поддерживает огромное (без преувеличения) количество различных форматов, обладает таким же огромных количеством настроек кодирования и умеет работать без иксов.
  Устанавливаем MPlayer.
server# cd /usr/ports/
server# make search name=mplayer
...
Port: mplayer-0.99.8_5
Path: /usr/ports/multimedia/mplayer
Info: High performance media player/encoder supporting many formats
Maint: riggs@rrr.de
...
server# cd /usr/ports/multimedia/mplayer
server# make install clean
|   При установке выбираем следующие опции
   
¦ ¦[ ] DEBUG Include debug symbols in mplayer's binary files ¦ ¦
¦ ¦[X] RTCPU Let mplayer dynamically check for CPU features ¦ ¦
¦ ¦[X] OCFLAGS Use optimized compiler flags ¦ ¦
¦ ¦[X] MENCODER Support encoding of multimedia files ¦ ¦
¦ ¦[ ] IPV6 Include inet6 network support ¦ ¦
¦ ¦[ ] X11 Enable X11 support for mplayer's video output ¦ ¦
¦ ¦[ ] GUI Enable GTK2 graphical user interface with X11 ¦ ¦
¦ ¦[ ] SDL Enable SDL video output ¦ ¦
¦ ¦[X] VIDIX Enable VIDIX video output on supported archs ¦ ¦
¦ ¦[ ] NVIDIA Enable experimental nvidia xvmc driver ¦ ¦
¦ ¦[ ] SKINS Force dependency on mplayer-skins ¦ ¦
¦ ¦[ ] FREETYPE Use freetype for OSD fonts (TrueType!) ¦ ¦
¦ ¦[ ] RTC Add support for kernel real time clock timing ¦ ¦
¦ ¦[ ] ARTS Enable KDE sound system support ¦ ¦
¦ ¦[ ] ESOUND Enable GNOME esound support ¦ ¦
¦ ¦[ ] POLYP Enable polyp sound server support ¦ ¦
¦ ¦[X] LIBUNGIF Enable gif support ¦ ¦
¦ ¦[ ] AALIB Enable aalib support ¦ ¦
¦ ¦[X] LIBCACA Enable libcaca support ¦ ¦
¦ ¦[ ] SVGALIB Enable svgalib support ¦ ¦
¦ ¦[ ] LIBDV Enable libdv support ¦ ¦
¦ ¦[ ] MAD Enable mad MPEG audio engine support ¦ ¦
¦ ¦[X] DTS Enable DTS audio codec support ¦ ¦
¦ ¦[ ] SPEEX Enable speex audio codec support ¦ ¦
¦ ¦[ ] TREMOR Use built-in tremor instead of libvorbis ¦ ¦
¦ ¦[ ] XMMS Enable XMMS plugin support ¦ ¦
¦ ¦[ ] THEORA Enable ogg theora video support ¦ ¦
¦ ¦[X] WIN32 Enable win32 codec set on the IA32 arch ¦ ¦
¦ ¦[ ] X264 Enable x264 (H.264) video codec support ¦ ¦
¦ ¦[ ] XANIM Enable xanim DLL support ¦ ¦
¦ ¦[X] XVID Enable XVID video codec support ¦ ¦
¦ ¦[ ] REALPLAYER Enable real player plugin ¦ ¦
¦ ¦[ ] LIVEMEDIA Enable LIVE555 streaming support ¦ ¦
¦ ¦[ ] FRIBIDI Enable FriBiDi support ¦ ¦
¦ ¦[ ] LIRC Enable lirc support ¦ ¦
¦ ¦[ ] CDPARANOIA Enable cdparanoia support ¦ ¦
|
  LIBCACA - в общем-то не нужна. Но советую ее поставить, так как позже покажу как ее задействовать для просмотра видео в консоли!
  Установка продлится приличное время и потянет из инета порядка 20-30 Мб различных пакетов.
  Если все завершилось удачно, то проверяем все это в работе. Повторюсь что у меня на сервере иксы отсутствуют, поэтому рассматриваем работу mplayera и mencodera без них. Для этого нам и понадобится возможность вывода видео непосредственно в консоли.
 
server# mplayer -vo caca -quiet film.avi
|   Вы должны увидеть изображение построенное из ASCII символов (целых 16! цветов).
  Переходим к кодированию DVD в AVI. Документация по MEncoder'у советует использовать кодеки семейства libavcodec или xvid, так как они обеспечивают максимально возможное качество изображения. Я выбрал кодек mpeg4 - ISO standard MPEG-4 (DivX 5, XviD compatible) из первого семейства. Для настроек кодирования MEncoder имеет море опций, описание которых лучше всего читать в документации. Так же там приведены настройки для кодирования DVD в AVI в 4 режимах качества (очень высокое качество, высокое качество, быстрое, реального времени). Основываясь на них я написал shell скрипт, в котором объединены и автоматизированы все основные этапы кодирования. Комментарии смотрите в самом скрипте.
 
#!/bin/sh
#-----------------------------------------------------------------------
#/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 -vf cropdetect"
AFILTER="-af volnorm,volume=0:1"
MAIL="serge@serge.int"
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,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
| В заключении хотел бы добавить, что с небольшими доработками планирую его поставить в крон для автоматического обхода заданных директорий и при наличии в них VOB файлов пережимать их в AVI. Такой вот своеобразный сервис получится!
размещено: 2006-11-06,
последнее обновление: 2007-12-23,
автор: serge
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Статистика сайта
|
Сейчас на сайте находится: 18 чел.
|
За последние 30 мин было: 60 человек
|
За сегодня было 341 показов, 96 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [10 шт.]