Трудности перегонаЮрий «bober» Раззоренов (zloy.bobr@gmail.com, linuxforum.org.ua) Хакер, номер #112, стр. 112-102-1
Грабим DVD в LinuxСегодня DVD-приводом в системном блоке мало кого удивишь, а большая часть фильмов уже давно продается в формате DVD-Video. Держать свою коллекцию на жестком диске в таком оригинальном виде не очень удобно, да и места DVD-Video требует прилично. Поэтому давай разбираться, как можно конвертировать DVD-диск. Ведь при помощи пары команд нам под силу вместо 4,7 Гб получить видео гораздо меньшего объема и без потери качества. Грабим в консоли – MEncoderДекодирование DVD в Linux производится при помощи MEncoder или Transcode. Все графические интерфейсы – это лишь надстройки над этими весьма мощными утилитами, поэтому перед тем, как браться за DVD::rip, не лишним будет пройти путь истинного хакера, познакомившись с первоосновами. Вполне возможно, потом ты и не захочешь давить батоны в графике, ведь это скучно и долго. Консольная утилита MEncoder (MPlayer's Movie Encoder) является частью проекта MPlayer, поэтому при ручной компиляции последнего mencoder ставится автоматом. В репозитариях многих дистрибутивов кодировщик идет отдельным пакетом. Установка в Ubuntu и Debian выглядит так: $ sudo apt-get install mencoder MEncoder понимает те же источники сигнала, что и MPlayer, умеет конвертировать видеофайлы во все мыслимые и немыслимые форматы (MPEG-1,2,4 и другие), контейнеры (AVI, Matroska, ASF, Ogg) и использовать разные кодеки (DivX, XviD, lavc и прочие). Плюс ко всему поддерживает все фильтры, которые может использовать MPlayer: обрезание пустых мест в кадре, масштабирование, отражение, вращение, изменение яркости или контраста, коррекция цветности, сглаживание шума и прочее. При использовании параметров «-ofps» или «-speed» изменяется количество кадров в секунду, выполняется дублирование или пропуск кадров. Результат преобразования при необходимости легко перенаправляется для просмотра в MPlayer. Возможно простое копирование без преобразования видео или аудио в результирующий файл. Перечислению функций MEncoder можно посвятить целую книгу, но, как уже говорилось, утилита консольная, и чтобы полностью их реализовать, придется изучить и экспериментально подобрать не один параметр. У разных кодеков будут действительны различные параметры, придется разбираться и с их особенностями. Чтобы получить информацию по доступным видео и аудиокодекам, просто набери: $ mencoder -ovc help $ mencoder -oac help При кодировании как аудио, так и видео, возможно использование постоянного или переменного битрейта, а также кодирование в несколько проходов для получения нужного качества или результирующего размера файла. Бывалые пользователи, найдя нужные установки, чтобы их не запоминать, используют сценарии командной оболочки, в котором записаны все команды. Теперь ближе к делу. В простейшем случае перекодировать видео с DVD можно так: $ mencoder dvd:// -o movie.avi -ovc lavc -oac lavc VDec: vo config request - 352 x 576 (preferred colorspace: Mpeg PES) ... Opening video decoder: [libmpeg2] MPEG 1/2 Video decoder libmpeg2-v0.4.0b Selected video codec: [mpeg12] vfm: libmpeg2 (MPEG-1 or 2 (libmpeg2)) Даже беглого взгляда на вывод утилиты достаточно, чтобы понять, что это не лучший вариант, и качество полученного видео будет далеким от идеала. Поэтому следует добавить еще парочку параметров: $ mencoder dvd:// -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=694 \ -oac mp3lame -lameopts br=128 -o movie.avi За полной информацией обращайся к man mencoder (1), но, чтобы было понятно, разберем подробнее этот пример. Здесь использован кодек lavc (в документации он помечен как best quality). Другими рекомендуемыми вариантами являются xvid или x264 (кодек H.264). Если с кодеком не определился, или есть желание что-то подправить в редакторе вроде Kino, можно просто перегнать видео в сыром виде, используя значение raw. Через lavcopts изменяются параметры работы lavc. Для того чтобы указать конкретные видео и аудиокодеки, работающие с lavc, используются соответственно параметры vcodec и acodec. От последнего в примере я отказался, поэтому поговорим о vcodec. По умолчанию lavc кодирует видео с mpeg4, но после vcodec можно использовать, наверное, с два десятка вариантов (mjpeg, ljpeg, h263, h263p, msmpeg4 (DivX 3), msmpeg4v2 (MS MPEG4v2), wmv1, wmv2, rv10, mpeg1video, mpeg2video, asv1 и другие). Каждый из них имеет свои особенности и настройки, которые можно ввести после названия кодека через двоеточие. При помощи vhq я разрешил использование специального алгоритма (macroblock decision algorithm), оптимизирующего конечный результат. Вообще, этот алгоритм подключается при помощи mbd=0-2. Среднее значение mbd=1 является оптимальным по скорости/качеству, и ему как раз и соответствует короткое обозначение vhq. Немного о битрейтеПараметр vbitrate определяет битрейт, который будет использован при кодировании. На глаз значение можно рассчитать так: video bitrate = нужный размер файла/продолжительность видео (в мин) - audio bitrate Например: 600/75 - 1,6 = 6,4 или 6400 кбит/с Хотя есть специальные программы, которые помогут сделать это более тонко. Например, divxcomp – калькулятор битрейта для DivX, написанный на Perl. Ничего сверхсложного работа с ним не представляет, следует ввести только параметры, о которых сказано выше, и на выходе получишь искомое число. Список онлайн калькуляторов ждет тебя по адресу www.martindalecenter.com/Calculators1B_5_TV.html. По умолчанию для кодирования используется алгоритм с переменным битрейтом (VBR – Variable BitRate), в котором, в зависимости от насыщения сцены, битрейт может повышаться или понижаться. Это оптимальный выбор, так как качество в сложных, быстроменяющихся эпизодах будет выше, а там, где высокий битрейт не нужен, мы сэкономим на размере. В этом случае указанное число битрейта означает некоторое среднее значение, вокруг которого все и будет «крутиться». При помощи vpeak=<значение> можно ограничить битрейт сверху. Современные проигрыватели поддерживают VBR, и проблем обычно не возникает. Но если понадобится, можно использовать сonstant bitrate (CBR), указав параметр vmode=cbr. Кодирование аудиопотокаКодирование звука не менее ответственный момент – нахимичив здесь, можно либо испортить себе весь просмотр плохим саундом, либо сильно увеличить размер файла при неоптимальном качестве. Если по аналогии с видео ты решишь, что после параметра «oac» следует описание алгоритма кодирования, то окажешься абсолютно прав. Список предложенных вариантов не очень большой, но выбирать есть из чего. Например, «-oac copy» просто скопирует звуковую дорожку в том виде, в котором она записана, без какого-либо кодирования. Если в дальнейшем планируется редактирование звука, такой вариант в самый раз. Выбрав «-oac pcm», ты получишь несжатый PCM весьма приличного размера, соизмеримого с видеопотоком. Чтобы сжать поток MP3 кодеком LAME, набирай «-oac mp3lame2. Как я уже говорил, параметр lavc тоже может быть использован при кодировании аудио: «-oac lavc». После названия алгоритма можно указать его параметры, если тебя не будут устраивать предлагаемые по умолчанию. Как и в случае с видео, у каждого алгоритма свои названия допустимых параметров. Например, lameopts относится к параметрам кодека LAME, который, в свою очередь, может использовать разные алгоритмы кодирования: vbr, abr (average bitrate) и cbr. Принцип работы первого и последнего описан выше, а average bitrate считается одной из форм vbr, в которой диапазон изменения битрейта несколько ограничен. По умолчанию используется vbr, для которого можно указать либо средний битрейт (br), либо качество (q). Качество указывается цифрой в диапазоне от 0 (лучше) до 9 (хуже). Кстати, «-oac mp3lame br=128» можно записать в виде «-oac lavc -lavcopts acodec=libmp3lame:abitrate=128». Здесь уже как нравится. Продвинутое кодированиеКодирование в один проход – это самый примитивный способ, который подходит в том случае, если тебя не очень интересует качество, размер и прочее. Даже самые интеллектуальные кодеки не смогут за один раз оптимально выставить параметры. Если мощности компьютера позволяют, лучше прогнать диск в два этапа: $ mencoder dvd:// -ovc lavc -lavcopts vpass=1 -nosound -o movie.avi $ mencoder dvd:// -ovc lavc -lavcopts vpass=2 -oac mp3lame -o movie.avi Ничего нового здесь нет. Я убрал дополнительные параметры, чтобы они не мешали. Появились только vpass, который активирует режим кодирования в два этапа, и «-nosound», так как при первом проходе звук можно не учитывать. При vpass=1 создается файл статистики, который и считывается при vpass=2. На выходе получаем оптимальное видео по соотношению качество/размер. Часто нужно получить не все видео с DVD, а только некоторые его главы. Без проблем: $ mencoder dvd:// -chapter 10-15 -ovc lavc -lavcopts \ vcodec=mpeg4 -oac mp3lame -o movie2.avi В результате в файл movie2.avi будут записаны только разделы с 10 по 15 включительно. Существует много параметров, позволяющих тем или иным образом изменить видео. Например, чтобы уменьшить размер файла, можно не только использовать меньший битрейт, но и указать меньшее разрешение. Если сильно не увлекаться, качество можно сохранить на том же уровне. Стандартный размер видеокадра стандарта PAL равен 720x576 точек, стандарта NTSC – 720x480. Уменьшим его до 640х480: $ mencoder dvd://2 -vf scale=640:480 -oac mp3lame -ovc lavc \ -lavcopts vcodec=mpeg4 -o video-640x480.avi Использовав параметр «-aspect», можно принудительно установить соотношение сторон 4:3 или 16:9. В некоторых фильмах все впечатление от просмотра портят черные полосы по краям кадра, чтобы их убрать, добавь параметр «-vf crop» с указанием диапазона. Узнать нужные цифири, можно запустив команду «mplayer dvd:// -vf cropdetect». Чтобы проверить, как будет выглядеть видео после «обрезания», вводим: $ mplayer dvd://1 -vf rectangle=698:354:11:23 Всяческие удобстваКроме опций, о которых говорилось выше, есть еще одна удобная штука, о которой тебе точно следует знать – пресеты. Если посмотреть в мане, там уже можно найти ряд предустановок: medium, standart, extreme и так далее. Например, «-lameopts preset=medium» означает кодирование с VBR в хорошем качестве с битрейтом 150-180. Не знаю почему, но информацию о том, что все параметры можно занести в конфигурационный файл и не вбивать каждый раз по-новому, от юзера принято скрывать. Файл называется ~/.mplayer/mencoder.conf, формат его простой: option=<value>. $ nano mencoder.conf # Имя выходного файла по умолчанию o=encoded.avi # Параметры lavcopts=vcodec=mpeg4:autoaspect=1 lameopts=aq=2:vbr=4 ovc=lavc=1 oac=lavc=1 # Возможно описание профилей, которые указываются при вызове утилиты при помощи параметра «-profile» [mpeg4] profile-desc=«MPEG4» ovc=lacv=yes lavcopts=vcodec=mpeg4:vbitrate=1300 [mpeg4-hq] profile-desc=«HQ MPEG4» profile=mpeg4 lavcopts=mbd=2:trell=yes:v4mv=yes [xvid] profile-desc=«XviD» ffourcc=dx50 ovc=xvid=1 xvidencopts=quant_type=mpeg:max_bframes=1:trellis=1 Примеры можно усложнять до бесконечности. Если хочешь получить в руки графический инструмент, обрати внимание на AcidRip и DVD::rip. Есть и другие проекты, предлагающие графические оболочки к MEncoder: Kmencoder, Konverter, Kmenc15 и Gmencoder, но они уже долгое время не развиваются, хотя еще доступны в репозитариях пакетов. Полезные утилитыВ процессе работы с DVD тебе, возможно, понадобится получить некоторую информацию о диске: продолжительность и количество разделов, субтитры, аудиопотоки и прочее. Для этого используй утилиту lsdvd. В простейшем случае команда выглядит так: $ lsdvd libdvdread: Using libdvdcss version 1.2.9 for DVD access Disc Title: Video Title: 01, Length: 01:18:21.060 Chapters: 12, Cells: 12, Audio streams: 01, Subpictures: 00 Title: 02, Length: 01:20:38.280 Chapters: 12, Cells: 12, Audio streams: 01, Subpictures: 00 Title: 03, Length: 01:17:39.130 Chapters: 12, Cells: 12, Audio streams: 01, Subpictures: 00 Longest track: 02 Как видишь, для доступа к информации пришлось задействовать и libdvdcss. Утилита имеет ряд дополнительных параметров. Например, подробности по второму заголовку получаем так: $ lsdvd -t 2 -a -s Disc Title: Video Title: 02, Length: 01:20:38.280 Chapters: 12, Cells: 12, Audio streams: 01, Subpictures: 00 Audio: 1, Language: ru - Russian, Format: ac3, Frequency: 48000, Quantization: drc, Channels: 2, AP: 0, Content: Undefined, Stream id: 0x80 Если есть субтитры, то будет выведена информация и о них. Таким образом, ты узнаешь все, что нужно по своему диску. Именно lsdvd использует AcidRip для получения информации о DVD. Альтернативой является запуск такой команды: «mplayer -identify dvd://». Утилита dvdbackup (dvd-create.sf.net), которая есть в репозитариях большинства дистрибутивов Linux, позволяет сохранить содержимое DVD в указанный раздел жесткого диска с сохранением его структуры. Чтобы создать полную копию диска, вводим: $ dvdbackup -i /dev/dvd –I А команда: $ dvdbackup -M -i /dev/dvd -o ~/dvd/ -v 3 cоздаст каталог, который затем можно записать обратно на болванку. Утилита vobcopy (www.linux-programming-newbie.org) может копировать VOB файлы и декодировать их на лету (если установлена libdvdcss), сохранив на диск единым файлом: $ vobcopy -i /dvd –m Скопировать DVD можно и при помощи cpvts (www.lallafa.de/bp/cpvts.html): $ cpvts -d /dev/dvd -s 4096 dvd_copy/ Для копирования двухслойных односторонних дисков (формат DVD-9), которые вмещают 8,5 Гб информации, лучше всего использовать программу DVD95 (dvd95.sourceforge.net). С ее помощью ты легко разделишь такой диск на два стандартных объемом 4,7 Гб. Программа не требует никаких зависимостей, и проблем с установкой обычно не бывает. Пользоваться DVD95 очень просто. Вставляем диск в привод, некоторое время ждем, пока его структура будет прочитана, и нажимаем кнопку «Преобразовать». На выходе получаем готовые ISO образы или, как вариант, каталоги с файлами, которые затем можно записать на диск при помощи любой программы для записи, вроде K3B. Если места на DVD диске не хватает, можно использовать сжатие – ползунок Evaulation позволяет изменить качество. Если диск имеет несколько аудио дорожек и субтитров на разных языках, в одноименных полях можно отметить те, которые следует оставить в результирующих дисках. Также DVD95 позволяет просмотреть видеодиск с помощью внешней программы. Хотя рассказано далеко не все, но, надеюсь, теперь с граббингом DVD дисков у тебя не будет проблем. CSS и AACS на лопаткахDVD диски имеют одну неприятную особенность, называемую CSS или Content Scrambling System. Эта система призвана затруднить копирование фильмов с DVD. Особой сложности CSS не представляет, его код был взломан практически сразу после появления, но за ним стоит закон DMCA, принятый в США в конце 1990-х, который трактует как преступление наличие любых систем обхода этой защиты. В Linux есть несколько решений, призванных решить эту проблему. Самым известным из них является кросс-платформенная библиотека libdvdcss от разработчиков VLC (www.videolan.org/developers/libdvdcss.html). Она используется программой libdvdread и многими проигрывателями DVD (VLC, Ogle, Xine, MPlayer) и не требует региональной привязки DVD-привода. Кроме Linux, она работает под *BSD, MacOS X, Solaris, BeOS, Windows и др. Использование и распространение libdvdcss в некоторых странах запрещено. Поэтому, чтобы пользователи не имели проблем с законом, в ряде дистрибутивов (Ubuntu, например) она по умолчанию не включена. Но ее легко найти в репозитарии пакетов, либо можно просто собрать самому. Благо, операция стандартна, и проблем обычно не вызывает. Второй вариант – использование DeCSS (www.cs.cmu.edu/~dst/DeCSS). Эта программа была выпущена осенью 1999 года тремя неизвестными кодерами, которые опубликовали информацию о ней в списке рассылки LiViD. Эта программа считывала зашифрованный DVD и выдавала записанный на нем фильм в открытом формате MP2. Основой кода послужил дизассемблированный ключ проигрывателя Xing. Когда стало известно имя одного из разработчиков, норвежца Йона Йохансена (Jon Lech Johansen), даже не смотря на то, что ему было всего 15, парню пришлось не сладко. Сначала полиция организовала рейд, как в самом крутом блокбастере, а судебные разбирательства длились вплоть до 2004 года. Всякое упоминание о DeCSS преследовалось, пострадал даже редактор журнала «2600», выложивший код в одном из номеров. Чтобы препятствовать поиску DeCSS в нете, была придумана программа с аналогичным названием, но выполнявшая другую функцию (копировала веб-страницы, удаляя из них каскадные таблицы стилей). Для распространения кода использовали стеганографию, T-Shirt, поэмы хайку, MIDI и другие варианты. Самая маленькая реализация efdtt была всего 434 байта. В HD DVD и Blu-ray используется более продвинутая технология защиты – Advanced Access Content System (AACS). Еще до ее появления Йон Йохансен предсказал, что долго ей не жить. Сегодня самое обычное натуральное число 09F9..., оказавшееся ключом к данным, зашифрованным этим методом, известно любому хакеру. И оно уже включено в список запрещенных. Извлечение субтитровС русскими субтитрами дело обстоит не ахти, английские распознаются на ура. Чтобы сграбить субтитры, следует узнать SID: $ mplayer -vo null -ao null -frames 0 -v 2>&1 | grep sid Если субтитров несколько, выбираем sid, соответствующий нужному языку. Извлекаем субтитры: $ tccat -i /dev/dvd -T 1 -L | tcextract -x ps1 -t vob -a 0x21 > subs Теперь делаем pgm файлы: $ subtitle2pgm -o subtitre -c 255,255,255,0 < subs Получаем srt файл: $ pgm2txt subtitre $ srttool -s -w < subtitre.srtx > subtitre.srt Далее реплики можно проверить на ошибки при помощи aspell. DVDНа прилагаемом к журналу диске ты найдешь последние версии Mplayer (MEncoder входит в его состав), Transcode, AcidRip и DVD::rip. INFO
WWW
|