Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Русификация
  COM-порт
  Монтирование образов
  dd
  burncd
  Консоль
  polling
  redirect_port
  wolf3d
  W.O.L.
  HDD->HDD
  bsdstats
  pdf в html
  monitord
  monit
  dvd в avi
  LAM
  Контроль провайдера
  pppd
  ru man
  geom_uzip
  colorize
  nettop
  немного о ssh
  установка по сети
  ClamAV mirror
  BlueTooth
  WiFi WPA
  iftop
  iPod
  2 CD -> 1 DVD
  ipcalc
  LACP и VLAN
  FFS из-под WinXP
  queues
  NFS & Win2k3
  Dynamic DNS
  ProFTPD+iconv
  deltup, xdelta, bdelta
  Приглашение csh/tcsh
  настрока bash
  Lan over Bluetooth
  pppoe
  метаданные exif
  dd : бэкапируем windows
  mozilla autoconfig
  Proxy Auto Configuration
  NNTP сервер
  Rinetd
  ISO DVD FreeBSD
  my disc1
  sftp+chroot
  SendXMPP
  APCUPSD
  Видеонаблюдение
  Настройка аудиоплеера на ximp3
  HDD(mbr) -> HDD(gpt)
  mc 4.6.2
  Динамический DNS
  axel
  LiveCD
  NAS на MPD
  backup конфигов на почту
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


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

оценить статью:

Роман, 2006-11-07 в 10:05:40

Хорошая статья, как раз хотел на днях пожать свои киношки. Спасибо!

gruz0, 2007-09-13 в 6:18:17

В тему, может дополнит:
http://scripts4nix.nnm.ru/ripaem_dvd_diski

MyMy, 2008-09-16 в 6:51:10

у меня вот такое вываливает:

The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.
Using SSE optimized IMDCT transform
Using MMX optimized resampler
[AO OSS] audio_setup: Can't open audio device /dev/dsp: No such file or directory
[mpeg1video @ 0x86647d0]removing common factors from framerate
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2.
Do not report crashes to FFmpeg developers.
nice: mencoder: No such file or directory
Ошибка! Битрейт видео не определен. Устанавливаем значение по умолчанию.
nice: mencoder: No such file or directory

Сирцея, 2008-09-29 в 17:56:37

ну в общем не для лузеров)))

m4rkell, 2008-10-24 в 9:48:31

MyMy, memcoder поставь и будет тебе счастье

m4rkell, 2008-10-24 в 10:08:24

А кто подскажет, как пропорции сохранить? а то он мне широкоформатный фильм в 4:3 сделал....

fox, 2009-04-05 в 21:23:15

memcoder у меня нет make config такой опции, что мне делать, а без ней не работает?

sool, 2009-04-07 в 21:07:28

ставь mencoder а то некоторые с ошибками пишут!

ivniq, 2009-12-17 в 15:46:51

Огромное спасибо, практически сразу добился нужного результатав.

nencu, 2010-08-17 в 17:58:00

>>LIBCACA - в общем-то не нужна. Но советую ее поставить, так как позже покажу как ее задействовать для просмотра видео в консоли!
Вообще, для просмотра в консоли можно использовать не только каку, но и нормальные библиотеки. Посмотреть их можно в mplayer -vo help


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

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

Время генерации страницы 0.0611 секунд
Из них PHP: 36%; SQL: 64%; Число SQL-запросов: 77 шт.
Исходный размер: 131699; Сжатая: 23673