Хакер, выпуск #111, стр. 111-088-1
DVD'шных дел мастер
Создаем Video DVD в Linux
За последние годы Linux из операционной системы, предназначенной для решения узкоспециализированных задач, постепенно превратился в полноценное решение, комфортно себя чувствующее на рабочих столах пользователей. Количество проигрывателей и программ для редактирования видео и аудио, записи и мастеринга CD/DVD-дисков, доступных для этой системы, не меньше, чем в Windows. Сегодня мы попробуем разобраться с утилитами, которые помогут создать Video DVD с записями цифровой камеры, фильмами и/или фотками.
Захват видео
С цифровой камеры в иксах удобнее всего захватывать видео с помощью Kino. Чтобы результат можно было обработать в более мудреных редакторах (вроде Cinelerra), нужно захватывать материал в сыром виде в формате DV («Edit -<>
$ sudo apt-get install dvgrab
В простейшем случае достаточно ввести команду:
$ dvgrab
Found AV/C device with GUID 0x00804580b12d823d
Capture Started
"dvgrab-001.avi": 20.34 MB 143 frames timecode 00:51:53.22 date 2007.08.07 01:04:44
Начнется захват видеопотока с устройства /dev/raw1394. Когда его нужно будет остановить, просто убиваем процесс нажатием . На выходе получаем файл в формате DV с расширением AVI.
$ file dvgrab-001.avi
dvgrab-001.avi: RIFF (little-endian) data, AVI, 720 x 576, 25.00 fps, video:, audio: uncompressed PCM (stereo, 32000 Hz)
Иногда dvgrab ругается на отсутствие устройства /dev/raw1394. Ничего страшного, если камера не определяется (лучше использовать gscanbus), просто загрузи модуль sudo modprobe raw1394.
Описанный выше подход не всегда удобен. Файл с часовым фильмом получается очень большой, и с ним могут быть проблемы. Поэтому стоит использовать такую конструкцию:
$ dvgrab --timestamp --autosplit --size 1998 --csize 4400 --cmincutsize 10 my_video-
Параметр timestamp указывает на необходимость добавления метки времени к результирующему файлу. Это очень удобно, когда гонишь кассеты оптом, а потом собираешь их в DVD. Максимальный размер файла мы ограничили 1998 Мб, это предел ISO9660 в старых ядрах. Однако сегодня с этим проблем уже нет, поэтому можешь опустить данный параметр. Второе ограничение - csize - указывает на предельный размер файлов, собранных в одну группу. Учитывая предстоящее перекодирование в MPEG, его также можно не использовать. Соответственно, cmincutsize показывает минимальный размер файла. Запустив такую команду, на выходе мы получим набор авишек с именами my_video-*. Так как у нас принят стандарт PAL, нелишним будет добавить параметр ‘-frames 25’, он укажет количество фреймов, которые нужно сохранить в новый файл при разделении.
Для захвата через USB с использованием video4linux применяем команду:
$ dvgrab -v4l -input /dev/video1
Конечно, захватывать таким образом не очень удобно, хочется руководить процессом. Без проблем - используем интерактивный режим:
$ dvgrab -i
Going interactive. Press '?' for help.
q=quit, p=play, c=capture, Esc=stop, h=reverse, j=backward scan, k=pause
l=forward scan, a=rewind, z=fast forward, 0-9=trickplay,
Теперь по подсказке для захвата нажимаем клавишу , воспроизведение/пауза – <Пробел> и т.д.
Для того чтобы создать DVD-диск при помощи dvdauthor (подробнее о нем ниже), на выходе нам нужно получить видеофайл в формате MPEG-2. Например, если установлен VLC, можно применить такую конструкцию:
$ dvgrab --format dv2 --timestamp - | vlc - :demux=rawdv --no-sub-autodetect-file ":sout=#transcode{vcodec=mp2v,vb=4096,scale=1,acod ec=a52,ab=128,channels=2}:duplicate{dst=display,dst=std{access=file,mux=file,dst="~/my_video.mpg"}}" --sout-ffmpeg-strict-rc
Как вариант - можно использовать mencoder:
$ dvgrab - | mencoder -of mpeg -mpegopts format=dvd:vaspect=4/3:vframerate=25 -srate 48000 -ofps 25 -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:keyint=15: vrc_maxrate=9800:vbitrate=4900:aspect=4/3:acodec=ac3:abitrate=192 -o my_video.mpeg
Все, видео с камеры готово.
Подготовка видео
Видео не обязательно должно быть на камере. Если тебе вдруг захочется создать DVD из своей коллекции фильмов или фоток, то, покопавшись в Сети, ты найдешь кучу готовых скриптов, облегчающих эту процедуру, не говоря уже о графических надстройках.
Для перекодирования в Linux традиционно используются transcode и mencoder. В первом случае процесс будет состоять из двух этапов:
$ transcode -i my_video.avi -y mpeg2enc,mp2enc -F 9 -E 44100 -b 128 -o my_video
Параметр '–F' для mpeg2enc означает профиль кодирования. Для разных утилит используются разные значения. Цифра 9 - DVD MPEG-2 (можно заменить буквой d). В результате в текущем каталоге мы получим два файла: *.m2v (MPEG-2 видео) и *.mpa (аудио). В скриптах обычно используется параметр '–V', который отвечает за установку видеоформата YV12/I420. С некоторыми кодеками он вызывает конфликт, в подобном случае попробуй '--use_rgb'. Теперь соединяем полученные файлы в MPEG:
$ mplex -f 9 -S 800 -o my_video.mpg my_video.m2v my_video.mpa
Другой вариант - использовать mencoder. Общий пример может выглядеть так:
$ mencoder -of mpeg -mpegopts format=dvd:vaspect=4/3:vframerate=25 -srate 48000 -ofps 25 -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:keyint=15: vrc_maxrate=9800:vbitrate=4900:aspect=4/3:acodec=ac3:abitrate=192 my_video.avi -o my_video.mpeg
Если у тебя под рукой файлы в форматах wmv, mov, asf, mkv, ogm, то преобразовать их в avi при помощи mencoder проще простого:
$ mencoder -o output_file.avi -ovc lavc -lavcopts vbitrate=5000:vhq -ffourcc DX50 -oac pcm -srate 48000 -ofps 25 movie.mov
DVD-мастеринг
Процесс создания Video DVD несколько отличается от записи обычного DATA-диска. Сначала подготавливается видеоматериал и выполняется деление на разделы, затем создается структура меню. Дополнительно в проект можно добавить субтитры, всякие украшения вроде интерактивных меню и кнопок, фоновых рисунков, звуковое сопровождение. После этого нужно сварганить структуру DVD-диска, которая состоит из двух каталогов: AUDIO_TS и VIDEO_TS (содержит VOB-файлы, меню и субтитры).
Когда проект создан, остается записать его на диск. Основой всех программ для DVD-мастеринга в Linux служит утилита dvdauthor (dvdauthor.sf.net), разработанная Скоттом Смитом. Создать с ее помощью готовый диск вполне реально, но на проект со сложными разветвленными меню и музыкальным оформлением у тебя уйдет куча времени. С другой стороны, все графические программы вроде KMediaFactory, QDVDAuthor и других являются лишь фронт-эндами к нему.
Из подготовленных mpeg-файлов создаем файловую систему DVD:
$ dvdauthor -o dvd/ -t my_video.mpeg
По окончании снова запускаем dvdauthor, но уже для создания TOC (Table of Contents):
$ dvdauthor -o dvd/ -T
INFO: dvdauthor creating table of contents
INFO: Scanning dvd/VIDEO_TS/VTS_01_0.IFO
Вот в принципе и все, содержимое DVD у нас теперь есть, осталось создать ISO-образ и записать его на диск:
$ mkisofs -dvd-video -o dvd.iso dvd/
$ growisofs -dvd-compat -Z /dev/dvd=dvd.iso
Файл dvdauthor
Конфигурационный файл, используемый утилитой dvdauthor, представлен в формате XML. Здесь описывается все: видеофайлы, используемые в проекте, VMGM (Video Manager Menu) меню, кнопки, формат видео (обычный или wide) и прочее. Простейший файл, описывающий подключение одного фильма с двумя главами к проекту, имеет следующий вид:
$ nano dvdauthor.xml
Параметр vmgm отвечает за основные настройки меню. Для упрощения в этом поле ничего не используется, поэтому мы его сразу же и закрыли, оставив значения по умолчанию. Но настроек здесь предостаточно. Так, при помощи параметра format можно указать формат ntsc или pal, за соотношение сторон отвечает aspect. Что делать при переходе на widescreen, указывается с помощью одноименного параметра. Значениями могут быть nopanscan, noletterbox или crop. А еще здесь можно задать рисунок, музыкальный или видеофайл, кнопки, команды. Тело проекта с меню и видео описывается параметрами, заключенными в titleset. В проекте должен быть как минимум один titleset. После объявления titleset может следовать секция menus, в которой описано меню. Параметры совпадают с vmgm. В подменю titles описываются подключенные ресурсы, в терминологии автора pgcgroup. Здесь может быть один видеофайл, до восьми звуковых файлов и 32 файла рисунков. Для удобства просмотра файлы разделяются на главы, к которым можно быстро перейти, указав время в формате [[HH:]MM:]SS. В примере я поделил видео на две главы: chapters="0,30:00". Вторая глава, как видно, будет начинаться с 30-й минуты видео. Можно загнать и два мувика одной главой:
Дополнительно предусмотрен параметр pause, позволяющий указывать время задержки перед воспроизведением следующего файла. В качестве аргумента здесь может выступать цифра, показывающая время в секундах, или inf, то есть неопределенная задержка. Команды, которые необходимо выполнить перед или по окончании воспроизведения, заключаются в конструкции «
commands;
» и «Добавляем субтитры
Файлы «пререндеренных» и мягких субтитров могут быть в форматах sub, srt, ssa, smi, rt, txt. Отличаются они в основном возможностями форматирования. Как пример:
00:36:54,960 --<>
Приказ господина ПЖ - всем пацакам
надеть намордники и радоваться.
Самостоятельно извлечь субтитры в ASCII из vob-файлов, принадлежащих первому фильму из текущего каталога, можно, набрав следующие команды:
$ сat vts_01_?.vob | tcextract -x ps1 -t vob -a 0x20 | subtitle2pgm -o movie_1
$ pgm2txt movie_1
$ srttool -s -i movie_1.srtx -o my_movie_1.srt
В качестве примечания необходимо уточнить, что фильмы могут содержать несколько субтитров, значение 0x20 соответствует первым, 0x21 - вторым и так далее.
Процесс этот долгий и на слабом компьютере времени займет порядочно. На выходе мы получим файл my_movie_1.srt, содержащий субтитры.
Программа spumux из пакета dvdauthor способна преобразовать текстовые субтитры в картинки, которые можно объединить с mpeg-файлом. В работе spumux обращается к каталогу ~/.spumux, где должен находиться файл шрифтов. Копируем шрифт TrueType (.ttf), например Arial.ttf, в этот каталог и создаем файл-описание.
$ nano subtitle.xml
fontsize="24.0" font="Arial.ttf" horizontal-alignment="center"
vertical-alignment="bottom" left-margin="60" right-margin="60"
top-margin="20" bottom-margin="30" subtitle-fps="25"
movie-width="720" movie-height="480" />
Теперь записываем субтитры в видеофайл и наслаждаемся результатом:
$ spumux -s0 subtitle.xml <>
$ mplayer video_with_sub.mpg
Посмотреть, как выглядят субтитры, можно, разобрав файл:
$ spuunmux video_with_sub.mpg
В текущем каталоге получим большое количество png-файлов.
Программа dvd-slideshow
Есть еще один проект, которым я часто пользуюсь, - dvd-slideshow (sf.net/projects/dvd-slideshow). C его помощью можно быстро и легко создавать DVD из рисунков. Для установки в Ubuntu достаточно ввести sudo apt-get install dvd-slideshow. Учитывая, что dvd-slideshow представляет собой набор скриптов, его установка даже из исходных текстов не вызовет трудностей. Но перед инсталляцией необходимо позаботиться обо всех зависимостях - это dvdauthor, MjpegTools, ImageMagick, Ffmpeg, кодеки lame, OggVorbis и tooLAME.
В составе пакета dvd-slideshow идет несколько утилит, каждая из которых отвечает за свой участок работы. Для начала следует собрать все фотографии в один каталог. Кадрируем, подгоняем размеры, переворачиваем, чтобы они одинаково отображались на экране. Далее генерируем файл, содержащий описание изображений каталога, используемые эффекты и другие установки.
$ dir2slideshow –o ~/dvd -n 'Title' -t 5 -s "Foto" -c 1 /home/bobr/foto/
Параметр '–n' указывает название проекта, оно будет выведено в заголовке. При помощи '–t' выставляем время демонстрации снимка. Используя '–s', к снимкам можно добавить подпись. '–с' позволяет установить время действия эффектов перехода. Для сортировки файлов применяем '–T' (время, дата, имя) и '–M' (дата и имя).
Полученный в результате файл Title.txt является входным для dvd-slideshow. При желании его можно отредактировать вручную, открыв в любом текстовом редакторе. К примеру, можно установить персональное время видимости для каждого снимка, подпись, эффекты перехода. Для упрощения можно использовать и заранее подготовленный файл с настройками - ~/dvd-slideshowrc, в архиве имеется образец. Теперь полученный файл передаем утилите dvd-slideshow:
$ dvd-slideshow –f Title.txt
Можно добавить и музыку, формат музыкального файла выбирай любой: mp3, ogg, wav, mp2, ac3, если только для него имеются кодеки в системе. И не бойся, что разрешение изображения больше, чем требует стандарт PAL, 720х576, оно будет подогнано без обрезки. Параметр '–n' позволяет указать имена выходных файлов, поэтому можно использовать один и тот же каталог для нескольких проектов. По умолчанию видеофайл генерируется в формате NTSC, для PAL используем параметр '–p'. Некоторым не нравится черный цвет в качестве фона, особенно он бросается в глаза в вертикальных снимках, когда по краям видны большие черные полосы. Применив параметр '–b', можно указать фоновое изображение, например jpeg-файл размером 720х576.
Проверяем получившееся видео, запустив mplayer. Если все нормально, добавляем его в другой проект. Или создаем меню и структуру каталогов при помощи утилит, входящих в комплект dvd-slideshow:
$ dvd-menu -o dvd_complete -p -t 'My_DVD' -t 'DVD' –f menu1.xml -f menu2.xml –e /home/bobr/button.jpg –n
Здесь '-o' - выходной каталог; '–t' предназначен для создания меню; '–f' указывает на файл, откуда будут браться параметры для меню (это может быть как XML-файл, созданный нами раннее, так и готовый VOB-файл); '–е' позволит добавить изображение, которое будет размещено слева от кнопок; '–n' указывает на подпись, которая будет выводиться в оглавлении.
Из полезных опций также можно отметить '–iso' для генерирования готового ISO-образа и '–с' для выполнения заданной POST-команды после воспроизведения.
Вот, собственно, и все. Надеюсь, теперь проблем с созданием своего Video DVD в Linux у тебя не будет.