From: Юрий Прушинский <prushinsky@hotbox.ru>
Newsgroups: gazette.linux.ru.net
Date: Mon, 4 Apr 2003 13:01:37 +0000 (UTC)
Subject: Запись собственных DVD на DVD+RW или DVD-RW приводе в Linux
Запись собственных DVD в Linux
Автор: (c) 2002 Chris Stoddard
Перевод: (c) 2003 Юрий Прушинский <prushinsky@hotbox.ru>
_________________________________________________________________
В этой статье речь пойдёт о том, как сделать собственный DVD-диск
(используя Linux и DVD+RW или DVD-RW привод), совместимый с
большинством стандартных плейеров.
Содержание
* 1. Вступление
* 2. Необходимое оборудование
* 3. Необходимое ПО
* 4. Кодирование и запись видео
* 5. Возможные проблемы с синхронизацией аудио сигнала
* 6. Заключение
Вступление
Меня всегда поражает насколько просто в Линуксе совершенствовать и
развивать уже начатые кем-то проекты. Запись собственных DVD в Линукс
тоже попадает в категорию подобных задач - вроде бы все инструменты
для этого есть, и в информации на эту тему недостатка не наблюдается,
но нигде до сих пор нет полного документа, описывающего весь процесс
"от и до". Конечно, запись DVD под Линукс находится еще во
"младенчестве", нет ещё продвинутых средств редактирования с
поддержкой меню и других функций, но на данном этапе уже вполне
возможно записывать и сохранять домашнее видео или ТВ-передачи в
формате DVD. Я не буду рассматривать редактирование видео, а просто
опишу процесс записи сигнала с ТВ или с видеокассеты на DVD.
Необходимое оборудование:
Я также не хочу вдаваться в тонкости установки и настройки
необходимого железа, если вы не знаете как его устанавливать, то
обратите внимание на следующие статьи, надеюсь, они вам помогут.
* Устройство для захвата видео. Лично я пользуюсь картой Hauppauge
WinTV PCI, карты с ТВ-тюнером достаточно дешевы и купить их можно
практически в любом компьютерном магазине. К тому же они довольно
хорошо поддерживаются в Линуксе. Естественно, есть и дорогие
аналогичные устройства, которые позволяют захватывать видео с
высоким качеством, но очень немногие из их числа будут работать в
Линуксе. См. статью "Видеоприложения на Вашем Linux" на Russian
Linux Gazette (http://gazette.linux.ru.net/lg62/articles/rus-silva.html)
* Привод DVD+RW или DVD-RW. Я пользуюсь старым приводом Ricoh
MP5120A DVD+RW, который я приобрел за 150 долларов. К счастью,
подобные приводы устанавливаются аналогично стандартным приводам
CD-RW. Кроме этого желательно, чтобы наш привод имел возможность
проигрывать DVD-диски. Поэтому убедитесь, что ваш DVD-плейер
поддерживает формат дисков, в котором вы собираетесь записывать их
на своем пишущем устройстве. См. статьи "Просмотр DVD в Linux"
на Russian Linux Gazette ( http://gazette.linux.ru.net/lg81/durodola.html)
и "Запись CD на приводе ATAPI CDR Mini-HOWTO" на Linux Gazette
http://linuxgazette.com/issue57/stoddard.html
* Быстрый ЦП (процессор) и большой жесткий диск. У меня лично Athlon
1600XP, RAM 384 MB и 40 GB жесткий диск. Я бы наверное и не
рискнул заниматься всем этим делом, если бы система была слабее
1Ghz и меньше 20Gb свободного места на диске.
Необходимое ПО:
Каждый из этих пакетов имеет свой способ и особенности установки, так
что пожалуйста, изучите инструкции по установке для каждого из них.
* xawtv понадобится нам в качестве стримера, который мы будем
использовать для записи видео: xawtv (http://bytesex.org/xawtv/)
* mjpeg-tools понадобятся для кодирования записанного видео в формат
DVD: mjpeg-tools (http://mjpeg.sourceforge.net/)
* dvdauthor является основной из всех других используемых программ,
без нее у нас ничего не получится. Эта программа генерирует IFO
файлы, которые необходимы для DVD-плейера. Устанавливается она
довольно просто - соберите командой make, и затем скопируйте
получившиеся "бинарники" в /usr/local/bin: dvdauthor
http://sourceforge.net/project/showfiles.php?group_id=59028
* dvdrtools, утилита-аналог cdrtools, которая потребуются для записи
на новые DVD-RW приводы: dvdrtools (http://www.freesoftware.fsf.org/dvdrtools/)
* dvd+rw tools понадобятся для записи на старые устройства DVD+RW,
так что они нужны только обладателям первого поколения приводов
DVD+RW: dvd+rw tools (http://fy.chalmers.se/~appro/linux/DVD+RW/)
У dvd+rw tools нет Makefile, поэтому собрать "бинарники" можно
следующим образом:
gcc dvd+rw-format.c
mv a.out dvd+rw-format
cp dvd+rw-format /usr/local/bin
gcc growisofs.c
mv a.out growisofs
cp growisofs /usr/local/bin
Кодирование и запись видео:
Одним из самых ответственных шагов является правильный захват видео:
нужно корректно указать размер видео и частоту смены кадров. Следующая
команда для записи видео использует стример, который входит в состав
xawtv:
streamer -n ntsc -t 60:00 -s 720x480 -r 30 -o stream.avi -f mjpeg -F stereo -
c /dev/video0
Здесь параметр -n указывает формат, так что если вы используете PAL,
то измените ntsc на pal. Параметр -t устанавливает время записи в
минутах, -s указывает размер видео, в США мы пользуемся NTSC, который
использует размер видео 720x480, если же вы используете PAL, то
смените размер на 720x576. Параметр -r определяет частоту смены
кадров, для NTSC нужно выставить значение 30, для PAL - 24. Ну, и
наконец, -c определяет видео устройство (измените его, если это
необходимо). Остальные параметры изменять не нужно.
Следующее, что нам необходимо сделать, это правильно закодировать
видео и аудио информацию в какой-нибудь удобоваримый для DVD-плейера
формат. Для этого мы воспользуемся утилитами из mjpeg-tools. Следующая
команда вытаскивает весь звуковой сигнал из avi-файла и кодирует его в
mp2 audio. Ключ -V здесь нужен для совместимости с форматом VCD:
lav2wav +p stream.avi | mp2enc -V -o audio.mp2
Далее вытаскиваем видео и кодируем его в mpeg. Продолжительность этого
процесса напрямую зависит от мощности вашей системы. Здесь для нас
важны опции -f 8, которая делает видео совместимым с DVD, а также -n
n, что означает "использовать NTSC", соответственно. Смените на -n p
для PAL:
lav2yuv +p stream.avi | mpeg2enc -n n -f 8 -s -r 16 -o video.m1v
Теперь надо объединить два получившихся закодированных файла. При этом
не забудьте про ключ -f 8 для совместимости с DVD:
mplex -f 8 audio.mp2 video.m1v -o complete.mpg
Чтобы наш диск читался на любом DVD-плейере, его структура ДОЛЖНА быть
идеальной, так что убедитесь что вы выполнили следующие команды именно
так, как показано:
mkdir dvd
mkdir dvd/VIDEO_TS
Далее создаем IFO файл, содержащий Table of Content:
tocgen > dvd/VIDEO_TS/VIDEO_TS.IFO
Теперь копируем наш кодированный видео файл в структуру директорий
диска и даем ему нужные атрибуты:
cp complete.mpg dvd/VIDEO_TS/VTS_01_1.VOB
chmod u+w dvd/VIDEO_TS/*.VOB
IFO и BUP файлы содержат информацию для DVD-плейера, определяющую
свойства видео файла, который он пытается воспроизвести. Утилита
ifogen анализирует видео и вытаскивает требуемую информацию. Для
создания необходимых файлов выполните следующую команду:
ifogen -f dvd/VIDEO_TS/VTS_01_1.VOB > dvd/VIDEO_TS/VTS_01_0.IFO
(cd dvd/VIDEO_TS; for i in *.IFO; do cp $i `basename $i .IFO`.BUP; done)
Далее надо создать iso образ, который можно будет записать на
DVD-диск. Только убедитесь, что вы воспользуетесь при этом той версией
mkisofs из состава dvdrtools, которая поддерживает файловую систему
DVD:
mkisofs -dvd-video -udf -o dvd.iso dvd/
Ну, и, наконец, приступаем к записи нашего диска. Если вы пользуетесь
приводом DVD+RW старого поколения, то сначала болванку диска нужно
отформатировать. Для этого выполните следующие команды и замените
srcd0 на имя вашего пишущего устройства:
dvd+rw-format -f /dev/srcd0
growisofs -Z /dev/srcd0=dvd.iso
Если же у вас новый привод DVD-RW, то это делать необязательно -- это
выполнит сама утилита dvdrecord:
dvdrecord -dao speed=2 dev=0,0,0 dvd.iso
Возможные проблемы с синхронизацией аудио сигнала
Наиболее часто возникают проблемы при синхронизации аудио сигнала. При
этом вам надо попробовать настроить ваш жесткий диск - включить 32 bit
I/O и DMA:
hdparm -c 1 -d 1 /dev/hda
Далее, загрузить драйвер bttv с опцией gbuffers=10:
modprobe bttv gbuffers=10
По идее это должно решить любые проблемы с синхронизацией звука. Если
это не помогло, то попробуйте использовать опцию -O n при
использовании утилиты mplex. Она позволяет задерживать видео на n
миллисекунд. Недостаток этого в том, что все надо делать методом проб
и ошибок, и довольно часто на обработке объединенного видеофайла
ifogen вылетает (segfault). Кроме этого, можно попробовать записать
видео в меньшем размере, скажем в 352x240. Для этого воспользуйтесь
yuvscaler из комплекта mjpeg-tools и уменьшите исходный размер с
720x480. Но лично я этого никогда не пробовал.
Заключение:
Весь вышеописанный процесс, конечно, не позволит вам записать DVD
такого же качества, как и на лицензионных дисках, которые продаются в
магазинах, хотя качество видео будет в основном зависеть от устройства
захвата видеосигнала или от самого источника видеосигнала, так что
используйте наилучшие настройки при записи на видеокассету, с которой
потом будете переписывать изображение на DVD. Сам процесс может занять
несколько часов, так что я написал скрипт, который делает всё за меня,
пока я занимаюсь своими делами или сплю. Учтите, что 100 минут видео
займет около 11 ГБ в несжатом виде, 2 ГБ после сжатия и 1ГБ в виде iso
образа.
Текстовая версия скрипта make-dvd.sh (http://gazette.linux.ru.net/lg83/misc/stoddard/make-dvd.sh.txt)
-----make-dvd.sh-----
#!/bin/sh
# Cleans out any left over files and makes the necessary directories
rm -r -f dvd video dvd.iso
mkdir dvd
mkdir dvd/VIDEO_TS
mkdir video
# Changes the channel on the TV tuner card
v4lctl setstation 3
# Records the video stream
streamer -n ntsc -t 60:00 -s 720x480 -r 30 -o video/stream.avi -f mjpeg -F ster
eo -c /dev/video0
# Builds DVD image from the encoded video
# This portion of the script was lifted directly from
# the writedvd script which comes with the dvdauthor tools
tocgen > dvd/VIDEO_TS/VIDEO_TS.IFO
cp video/complete.mpg dvd/VIDEO_TS/VTS_01_1.VOB
chmod u+w dvd/VIDEO_TS/*.VOB
ifogen -f dvd/VIDEO_TS/VTS_01_1.VOB > dvd/VIDEO_TS/VTS_01_0.IFO
(cd dvd/VIDEO_TS; for i in *.IFO; do cp $i `basename $i .IFO`.BUP; done)
mkisofs -dvd-video -udf -o dvd.iso dvd/
# Burns the DVD for 1st Generation DVD+RW
# Comment out the dvd+rw-format line if the disc is already formated and
# contains no data.
# Comment these two lines out if you are using a newer drive
dvd+rw-format -f /dev/srcd0
growisofs -Z /dev/srcd0=dvd.iso
# Burns DVD for more modern DVD formats like DVD-RW
# Uncomment this line if you are using a newer drive
#dvdrecord -dao speed=2 dev=0,0,0 dvd.iso
-----make-dvd.sh-----