Сибирский Лихоман
"DivX ;)". Кодирование, или Фильм с DVD качеством на одном CD.
Подготовлено по заказу журнала ХАКЕРспец. Авторский вариант.

Пролог.

Все программы и технологии, приведенные в статье служат учебным целям и не предназначены для нелегального копирования лицензионных видеоданных. Автор снимает с себя ответственность за применение его учебной статьи в нелегальных целях.

Общие принципы.

Процесс кодирования DVD в DivX условно можно разделить на несколько этапов:
1. Рипинг DVD - вскрытие защиты, перенос VOB-файлов на винт;
2. Подготовка к перецифровке - выдирание из VOB файлов звука, субтитров, фреймсерв;
3. Оцифровка - сжатие видео в Divx, а звука в mp3 (или АС3);
4. Монтаж - ручной или автоматический ММ4, наложение звука на видео, возможно два аудио потока, нарезка под размер болванок.

Каждый из этих этапов подразумевает наличие одной или нескольких специализированных программ, выбор и настройка которых зависит от ожидаемых результатов, а также от личных предпочтений.

Желаемое и действительное.

Чего же мы хотим от DivX? По видимому фильма DVD-качества на одном компакт диске. Но к сожалению чудес не бывает и технологии не настолько быстро рвутся вперед, чтобы за 10 лет создать кодек, в десятки раз уменьшающий поток при том же качестве. Недаром развитие архиваторов практически остановилось - посмотрите, за последние 10 лет, насколько хорошо научились архивировать данные? Ну может чуть-чуть сильнее, на десятые процента, ведь есть предел сжатия и последующего восстановления информации. Вот и от MPEG-4 (DivX) нельзя ожидать столь революционных сдвигов по отношению к MPEG-2 (DVD).

Первое правило, которое нужно усвоить: если вы хотите смотреть фильм в DVD-качестве - покупайте DVD. Все рекламные заявления о таком качестве на средних битрейтах, а особенно на низких (при которых можно впихать 3-часовой фильм на одну CD) - нереальны! Это значит, что чем-то приходится поступиться для того, чтобы качество осталось на более-менее приличном уровне. Скажем уменьшить размер кадра, ухудшить звук, размыть или заквадратить картинку, уменьшить количество кадров в секунду и т.д.

Второе правило, особенно для оверклокеров: если у вас глючит какая-то программа, попробуйте сначала поставить частоту процессора на номинал. Программы обработки видео очень сильно напрягают процессор, и если у вас на разогнанном процессоре не глючит Word, это еще не означает, что и Virtual Dub будет работать в тех же условиях. Хотя при этом не забывайте, что практически все программы для работы с DVD и DivX написаны хакерами и любителями, так что они вполне имеют право на глюки и неработоспособность.

Разобравшись с этими исходными данными, посмотрим, что же реально мы можем получить от DivX?

А реально мы можем получить фильм, примерно в 2-3 раза уменьшенный по площади кадра, возможно с ухудшенным звуком, несколько смазанный из-за применения фильтров сглаживания, требующий досточно много ресурсов по сравнению с DVD и, как следствие, с возможностью подтормаживания на слабых машинах. Что мы и наблюдаем в последнее время, покупая "Real DVD quality" диски...

Есть несколько категорий любителей фильмов в формате Divx.

Одни хотят максимального из возможного - качества, наиболее приближенного к DVD, не глядя на количество затраченного времени и CD. Они цифруют фильмы обычно на максимальных битрейтах на 2-3 CD и с оригинальным АС3 5.1 звуком, возможно двухпотоковым, с субтитрами, и могут перецифровывать фильм для получения наилучшего результата несколько раз, а также готовы вручную проделать все процессы, оценивая результаты на глаз и проверяя отсутствие артефактов в каждом кадре. Обычно имеют достаточно мощные компьютеры для последующего проигрывания своих фильмов.

Вторые хотят, по тем или иным причинам, иметь фильм обязательно на одном диске, неважно с каким звуком и качеством изображения, лишь бы был. Причины к тому могут быть разные - нежелание переставлять диски во время фильма, нежелание разоряться на лишнюю болванку, желание просто ознакомиться с фильмом перед походом в кинотеатр, дохленькая тачка, не справляющаяся с большим кадром и АС3 или просто ширпотребовские вкусы.

Есть еще третьи, кому в принципе все равно, насколько хорош будет результат, лишь бы он был побыстрее. Обычно это владельцы слабых машин и просто нетерпеливые люди.

В зависимости от желаний нам нужно нацеливаться на определенный результат. В основном это связано с выбором и настройками программ и количеством кодирования.

Рипинг DVD.

Что такое DVD?

Digital Versatile Disc (DVD), содержит обычно MPEG-2 поток в виде нескольких основных, VOB файлов по 1 Гб каждый, и индексные, IFO файле, содержащие дополнительную информацию о потоке. MPEG-2 поток может включать в себя несколько видео потоков, несколько аудио потоков, несколько потоков субтитров и другую информацию. Обычно фирменные DVD зашифрованы с помощью CSS (Content Scrambling System) технологии, возможно также применение Macrovision кодирования для предотвращения переписи с DVD проигрывателя.

Шифрованные диски приходится предварительно вскрывать DeCSS программами. Вскрытие DVD представляет собой копирование VOB файлов на жесткий диск с одновременным удалением из них защитного кода. Это позволяют сделать clad DVD, DeCSS, DVTool, DVD Decrypter, SmartRipper, FlasK MPEG, vStrip. У них разный уровень дружественности интерфейса и различные возможности для вскрытия и копирования.

Наиболее развитой, простой и популярной на данный момент программой для вскрытия DVD является SmartRipper (by TRON, последняя версия 2.41), позволяющая не просто дешифровать и скопировать голые VOB файлы на винт, но и предварительно выбрать главы (chapters), которые нужно копировать, звук, который нужно включать в поток и т.д. (рис.1). Программу можно взять в разделе ссылок на http://mydivx.lihoman.ru.

SmartRipper

Вставляем DVD в драйв, запускаем программу, она при запуске анализирует IFO файлы на DVD, затем открывается рабочее окно программы. Слева мы видим три способа копирования содержимого DVD - "movie" (как фильм, или по главам), "files" (оригинальные VOB файлы) или "backup" (полностью все содержимое).

Если нам нужен весь диск со всякими дописками (типа make of) и всеми аудио-видео потоками, то выбираем "backup" и копируем диск целиком. Если нужен только основной фильм, выбираем "movie" и выделяем "all chapters" (главы) основного "Title" (обычно он самый большой по размеру). Есть также возможность копировать отдельные потоки - в закладке "stream processing", в случае, если нам нужен только звук АС3, или только видео, или только видео с субтитрами и т.д. В поле "target" можно задать путь на диск и каталог, а в установках "Settings" можно задать "создание папки с именем фильма".

Если после выбора способа копирования у нас хватает места на диске, то под кнопкой "Settings" появится кнопка "Start", нажав на которую мы начнем процесс. В процессе копирования мы сможем наблюдать способы дешифровки, массу файлов, скорость диска в единицах DVD speed. В результате мы получим несколько файлов в папке по заданному пути. Это будут VOB файлы (файлы потока МПЕГ-2) и служебные файлы IFO. Если мы задавали копирование по главам, то в папке также окажутся файлы d2v, о которых чуть позже. Файлы .lst, .txt, .idx - это служебные файлы статистики самого SmartRipper.

Следующим шагом будет подготовка VOB файлов к кодированию в других программах. Наилучшим способом для этого является использование фрэймсерверов. Такой сервис предоставляют plug-in Avisynth для FlasK MPEG и программа VFAPI converter (by Hori) для проектов DVD2AVI (by Hiroko). Они довольно просты и в принципе обеими можно пользоваться. Возьмем за основу VFAPI. Для того, чтобы передать ей управление потоком MPEG-2 нам нужно сначала создать проект, который бы она понимала. Такой проект создает DVD2AVI (рис.2). Программу можно взять в разделе ссылок на http://mydivx.lihoman.ru.

DVD2AVI

Это программа может открывать один, или последовательность VOB файлов и кодировать их сразу в виде DivX, последние версии имеют встроенный ресайз, кропинг, но не имеют деинтерлейса и iVTC (о них позже), поэтому к сожалению ее нельзя использовать сразу для кодирования. Также программа может сохранять звуковые дорожки из выбранного фрагмента или целого фильма в любом формате, включенном в VOB файлах - АС3, МР2, LPCM WAV. Сохранять звук она может как в оригинальном виде, так и в виде декодированного wav (т.е. может смикшировать 6 каналов АС3 в стерео). Звук можно переводить из 48 кГц в 44 и нормализовать (повышать громкость звука до определенного предела).

Запускаем программу. File/Open. Выбираем нужные VOB файлы. Если нужна последовательность VOB, лежащих в одной папке, то выбираем первый - остальные VOB из той же серии DVD2AVI подключит в список сама. Программа может переводить интерлейсный NTSC формат 30 fps в прогрессивный формат 24 fps посредством включения опции Video/Field Operation/Forced film, но пользоваться ею не рекомендуется, т.к. перевод проводится некорректно (без применения iVTC, о котором позже). Если мы собираемся всего лишь создать проект для фреймсервера, то можно не трогать установки по умолчанию в меню Video. А вот для получения звуковых дорожек из VOB нам понадобится меню Audio.

Если мы хотим взять оригинальный DVD звук АС3 без изменений, то включаем Audio/Dolby Digital/Demux All Tracks. Если нам нужен оригинальный звук MP2, включаем тот же Demux All, только в меню Audio/MPEG Audio. Если мы хотим взять АС3, но перевести его в стерео формат, то нам уже придется выбирать аудиодорожку в меню Audio/Track number. К сожалению программа не дает сразу статистики на наличие различных потоков в VOB, поэтому мы можем либо еще при рипинге в SmartRipper посмотреть как друг за другом идут аудио потоки (вспомните Stream processing), либо же выбрать трэк наугад, благо, что пока их не так много пишут на DVD - максимум 3. После выбора трека нужно запустить создание проекта File/Save Project (F4) и в окне статистики мы сразу увидим характеристики выбранного аудио потока (скажем DD 2/0 192, что означает Dolby Digital 2.0 192 kbit), создание проекта можно остановить по Esc.

Дополнительные опции. Если нам требуется перевести 48 кГц в 44 (скажем на старых аудиокартах не поддерживается звук 48 кГц и при его проигрывании возникают характерные шумы на высоких частотах, а на Yamaha фильм с таким звуком может проигрываться ускоренно), то можно выбрать Audio/48->44 с установкой необходимого качества ресемплирования звука. В случае тихого звука на DVD можно выбрать его усиление (normalization). При переводе АС3 звука в обычный стерео можно включить опцию Dynamic Range Control, которая позволит усилить тихие звуки, не усиливая при этом громкие, что может иногда исправить положение при неудачном декодировании сложного АС3 звука. Скажем у нас есть фильм, в котором постоянно что-то взрывается и мы сделали звук потише, чтобы не рвались колонки. Но при этом стали слишком тихими голоса героев и нам приходится либо напрягать слух, либо дергать регулятор громкости. Вот в таких фильмах и помогает усиление звука с помощью DRC.

Еще одна возможность DVD2AVI - выбрать нужный фрагмент фильма или скажем музыкальный клип из общего потока. Вы видимо уже заметили шкалу с рычажком внизу окна программы? Кнопки справа "<" и ">" переходят на следующий (предыдущий) ключевой кадр, а "[" и "]" задают ограничение фрагмента.

Осталось запустить создание проекта File/Save project. Файл проекта будет занимать совсем немного места, но не забывайте, что звук от фильма будет записан в ту же папку - оставляйте под него место, особенно если вы делаете декодирование и звук запишется в формате wav - под 1.5-часовой wav потребуется около 900 Мб.

После создания проекта d2v и копирования звука фильма можно приступать к фреймсервингу. Для этого нам понадобится программа VFAPI (рис.3). Программу можно взять в разделе ссылок на http://mydivx.lihoman.ru.

VFAPI

Запускаем VFAPI Reader (Converter), открываем созданный нами в предыдущем пункте проект .d2v, программа выдает диалоговое окно, на которое мы отвечаем ОК (обе галочки в окне должны стоять). После этого нажимаем Convert и получаем в папке, где лежал проект, AVI файл, содержащий служебную информацию для VFAPI Reader. Работа с программой закончена.

Следующим шагом можно приступить к оцифровке. Для оцифровки нам понадобится Virtual Dub (рис.4), официальная страница которого находится здесь: http://www.virtualdub.org, либо Nandub, хакнутая версия Дуба, предназначенная для двухпроходного ММ4, официальная страница которого находится здесь: http://www.nandub.org.

Выбор параметров кодирования.

Прежде, чем приступать к кодированию, нам нужно определиться, что мы хотим получить от фильма и выбрать соответствующий размер кадра и битрейты для ММ4 кодирования. Отчего же зависит наш выбор?

Битрэйт.

Имеет определяющее значение для массы конечного файла. Зная длину фильма в минутах (секундах) и предельное количество места, куда мы собираемся поместить потоптанный фильм, можно вычислить (с некоторой ошибкой) нужный нам битрэйт. Это можно сделать как вручную, так и с помощью программ - битрэйт-калькуляторов. Для этого служат Advanced Bitrate Calculator (by Mick Thunder) и DVTool (by Knife).

Пример расчета битрэйта. Скажем у нас есть фильм 1ч 32мин, мы хотим записать его на CDR-80 min. Полная длина фильма составляет 1*60+32=92 мин. или 92*60=5520 сек. Зная емкость CDR = 700 Мб, мы расчитываем битрэйт: 716800 кб / 5520 сек = 129.8 кб/сек или 130 * 8 = 1040 кбит/сек. Прмерно с таким битрэйтом мы можем жать этот фильм кодеком Low Motion (отняв от него еще битрэйт звука). Лучше конечно же задать чуть-чуть поменьше (скажем 1000 кбит/сек), чтобы не ошибится на 20 кил, которые не влезут на КДшку... Хотя при ручной технологии ММ4 размер фильма можно подогнать довольно точно.

Вариант кодека DivX 3.11 (LM и FM).

Два предыдущих абзаца касаются только кодека DivX Low Motion (LM). У него заданный в кодеке битрэйт определяет средний битрэйт фильма. Хотя если вы зададите очень маленький кадр или в нем будут сплошные черные поля, то реальный битрэйт окажется меньше заданного. А как же Fast Motion кодек, спросите вы? У Fast Motion (FM) кодека задается верхнее значение битрэйта, т.е. предел, выше которого он не может заходить, а вот ниже... Ниже он не только может, но и будет топтать. И очень сильно. Он может при заданном битрэйте 3000 кбит/сек затоптать фильм в 900 кбит/сек. Это значит, что все более-менее равномерные заливки превратятся в детский набор кубиков, разбросанный по вашему кадру. Это могут быть лица крупным планом или равномерные фоны, газон на футбольном поле и т.д. Зато быстрые сцены практически не будут иметь паразитных следов, свойственных LM (это как след от мыши, включаемый в виндах). Кроме того, экономя на равномерных заливках, FM не пожалеет битрэта для быстрых или насыщенных деталями сцен - там реальный битрэйт будет как раз те самые 3000 кбит/сек, а значит кадр будет более качественно выглядеть!

Вот мы и подошли к парадоксу кодека DivX. Топтание с помощью LM на низких битрейтах (900-1200) позволит иметь более ровные заливки, но при резком сдвиге камеры даст нам паразитные шумы. А топтание с помощью FM на высоких битрэйтах (2400/3000/6000) даст нам качественную картинку при насыщенной деталями сцене, но запоганит все равномерные заливки. А парадокс в том, что оба результирующих файла (LM с низким битрэйтом и FM с высоким) могут оказаться одинаковой длины! Причем если длину LM-файла мы уже научились высчитывать, то длину FM-файла высчитать можно только очень приблизительно - он может уехать в ту или иную сторону очень прилично! Скажем при заданном потоке 1800 конечный поток при FM может оказаться как 600, так и 2500 кбит/сек.

Если вам лень долго мучаться с фильмом (клипом), можно уяснить для себя, каких сцен больше в фильме (а еще проще это сделать с клипом - он меньше по времени), и выбрать соответствующий кодек. Ну а если хочется получить наиболее качественный результат (и место это позволяет), то придется применить способ двойного кодирования. Вкратце - фильм цифруется дважды, с LM на низком битрэйте (600-900, максимум 1200) и с FM на высоком битрэйте (1800-2400, максимум 3000), а затем объединяется в один AVI с переменным битрэйтом либо вручную, на глаз выбирая наиболее хорошо пожатые сцены разными кодеками, либо автоматически, доверив это серьезное дело программе.

Программы для создания ММ4 фильма - Project DivX и NanDub. В Прожекте Дивх есть возможность ручного выбора сцен, а также возможность одновременного параллельного просмотра обоих АВИ-шек (FM и LM), есть также и автоматическая выборка статистики качества со сравнением с оригинальным файлом, с последующим микшированием двух файлов в один. Нандуб тоже позволяет кодировать в два прохода - первый для выборки статистики, а второй - собственно кодирование и микширование в один файл, но без создания двух промежуточных файлов.

Размер кадра или разрешение фильма.

Это третья составляющая качества фильма наряду с потоком данных (Data Rate) и вариантом кодека (LM, FM, ММ4). Обычно кадр фильма в формате DVD = 720х576 (варианты - 640х480 и 768х576). Кадр оригинального размера ДВД-шки даст нам наивысшее качество фильма (четкость деталей), особенно при топтании на высоких битрейтах (LM 6000), но тогда фильм не войдет на один и даже на два CD. Мало того, его размер будет приближаться к размеру фильма на DVD (около 2-4 Гб). Если мы хотим вместить весь фильм на одну-две КДшки, приходится жертвовать уменьшением потока данных, а значит искажением картинки в кадре. Чем сильнее сжатие (меньше поток), тем сильнее искажения полного кадра. Но если мы поставим размер кадра скажем 40х30 точек, то искажений даже при маленьком потоке почти не будет. Зато и мы почти ничего не увидим, даже увеличив такой кадр на весь экран - средние, не говоря уже о мелких, детали будут полностью размыты, и не только уменьшением картинки, но и самим кодеком, для которого все поле кадра превратится в практически равномерный, а значит хорошо сжимаемый фон. Значит нужно найти баланс между размером кадра, чтобы еще что-то разбирать на экране и потоком, при котором наш кадр не изойдет весь на квадратики.

Кроме проблемы квадратиков по полю кадра, есть еще проблема вывода фильма на телевизор (ТВ) через видеовыход видеокарточки (конечно если он есть). Некоторые драйвера видеовыходов имеют особенность включать оверлей (вывод на ТВ), только если размеры ширины и длины кадра делятся на 16 или 32. Кроме того, пропорции ТВ экрана имеют соотношение 4:3, значит для того, чтобы смотреть фильм в полноэкранном разрешении ТВ, надо иметь фильм со сторонами в пропорции 4:3. Это ограничивает размеры, с которыми мы можем цифровать фильм соотношения 4:3 всего несколькими: 768*576 (полный кадр PAL и SECAM), 704*528, 640*480 (полный кадр NTSC), 576*432, 512*384, 448*336, 384*288 (полукадр PAL и SECAM), 320*240 (полукадр NTSC), 256*192, 192*144, 128*96, 64*48. Понятно, что с последними четырьмя разрешениями фильм будет выглядеть довольно похабно, даже если его цифровали с DVD. Разрешения 384*288 и 320*240 стоит применять только в тех случаях, если нам не нужны мелкие детали, либо если фильма на DVD очень плохого качества (бывают и такие) и не даст более четкой детализации при более высоком разрешении. Широкоформатные фильмы соотношения 16:9, а таких сейчас очень много в связи с распространившимися у буржуев широкоформатными ТВ, имеют еще более ограниченное количество цифруемых разрешений, пригодных для вывода на ТВ - 768*432, 512*288, 256*144. Хотя для фильмов 16:9 можно установить шторки, приводя их в соответствие 4:3.

Кроме ограничений размеров кадра снизу по четкости деталей мы имеем ограничение сверху по возможностям современных компьютеров. Скажем восстановление промежуточного кадра 384*288 требует от компьютера просчета 110592 точек, а восстановление кадра 768*576 уже 442368 точек, т.е. в 4 раза больше. Средний комп (P-II/III/Cel 600 МГц с карточкой типа Riva TNT2/GeForce) может проигрывать без проблем фильм с кадром 576*432 в 32-битном режиме. Хотя значение качества в драйвере (CPU Quality) возможно придется поставить на 0. Здесь вступает во взаимодействие сила сжатия (битрейт потока) и размер кадра - для обоих нужно процессорное время, и чем выше поток, тем меньше придется делать размер кадра, чтобы не возникало подергиваний. С фильмом 640*480, и тем более 768*576 на высоких битрейтах возникнут проблемы в проигрывании. Следовательно сейчас мы ограничены всего четырьмя вариантами - 576*432, 512*384, 448*336, 384*288. Можно попробовать и верхние разрешения, но поток придется задать поменьше и проверить на достаточно динамичном фрагменте фильма, что ваша машина сможет справиться с последующим проигрыванием. Вы спросите - а как же фильмы 640х480, которых сейчас полно на прилавках? Обычно это фильмы 16:9 и реальная восстанавливаемая картинка занимает там около 640х300 (а то и меньше), что по площади примерно равно разрешению 512*384 с картинкой на весь кадр.

Дубовое кодирование.

Virtual Dub. Кодеки.

Перейдем собственно к кодированию. Открываем VDub. Если вы открываете его в первый раз, он выдаст сообщение о том, что в системе установлен кодек DivX, являющийся пиратским продуктом и строго порекомендует не пользоваться им. Открываем AVI файл, полученный в результате конвертирования проекта d2v через VFAPI. Мы увидим два окна - слева оригинальный файл, справа то, что должно получится в результате кодирования. Так как мы еще не задали никаких параметров, в обоих окнах будет идентичная картинка. Вернее ее не будет совсем - пока мы не сдвинем рычажок на шкале внизу. А сдвинув его мы увидим кадр фильма, причем с DVD качеством. Именно с DVD, так как то, что мы видим - и есть реальный кадр VOB файла! Увидеть его нам позволяет работающий по фону VFCodec, который декодирует эти кадры до нормального состояния, понятного Дубу. В этом и заключается суть фреймсервинга.

Переходим в параметры Video/Compression. Если у нас установлен кодек Divx 3.11, то мы увидим среди прочих кодеков два - "DivX ;-) MPEG-4 Fast-Motion" и "Low-Motion". Выбираем нужный из них и нажимаем Configure (настройки этих версий кодека Дивх не отличаются). Получаем диалоговое окно всего с тремя параметрами.

Первый параметр - расстояние между ключевыми кадрами (ключевой интервал) в целых секундах. Задавая этот параметр достаточно большим (10-999) мы добиваемся небольшого улучшения картинки за счет расстановки минимального количества ключевых кадров в фильме (только на смене сцен) и увеличения массы дельта кадров, а следовательно их качества. Задав же минимальные значения ключевого интервала (1-3) мы добиваемся упрощения перемотки фильма в плэерах, так как все плэеры перематывают MPEG-4 фильмы только по ключевым кадрам, и чем чаще они наставлены, тем легче плэеру найти тот фрагмент, на который мы передвинули рычажок промотки. Если же интервал будет слишком большим, то при попытке промотать фильм до нужного места мы рискуем увидеть "подвисание" плэера на несколько секунд (пока он промотает кусок от предыдущего ключевого кадра до нужного нам кадра). Звук при этом может прерваться или продолжаться на фоне неподвижной картинки, это зависит от параметра inteleaving, о котором позже.

Второй параметр - Smoothness-Crispness (сглаживание-резкость). Этот параметр задает небольшое сглаживание картинки для улучшения ее способности к сжатию. Наиболее хорошо сжимаются достаточно равномерные переходы цветов и гораздо хуже сжимаются резкие, контрастные границы. Это общее правило для JPEG-MPEG сжатия. Для чего нужен этот параметр? Если кодек не успевает за потоком - картинка слишком сложная, а поток задан слишком маленький, то кодек начинает либо слишком зажимать картинку до квадратности, а если и это невозможно (картинка слишком сложная - пестрая, резкая, много движения), то он начинает пропускать кадры, чтобы поддержать поток на нужном уровне. Обычно это касается LM варианта кодека. Задавая параметр резкости меньше 100% мы позволяем кодеку перед сжатием немного сгладить картинку, чтобы она лучше сжималась. С одной стороны это позволит поддержать поток и не потерять кадры на сложных фильмах, с другой стороны мы теряем резкость и так уже уменьшенного по размеру, а значит и по резкости, кадра. Данный параметр стоит трогать только при кодировании LM кодеком на низких потоках.

Третий параметр - задание скорости потока видео данных в килобитах в секунду. Он определяет силу сжатия и последующую скорость, с которой данные будут декодироваться. Обычно 1200 кбит достаточо для нормального качества фильма, но чтобы вместить большой фильм на 1 CD приходится делать кадр поменьше и поток задавать до 600 кбит. Качество при этом конечно же падает. Что же касается FM кодека, то задание этого параметра на него влияет очень относительно. На быстрых фильмах он может его придерживаться, но не строго, а на медленных вообще перестает обращать на параметр внимание, сжимая по максимуму своих возможностей. Так что с этим параметром приходится поэкспериментировать на фрагменте фильма перед кодированием.

Virtual Dub. Фильтры.

После задания параметров кодека можно задать фильтры (Video/Filters), которые будут изменять каждый кадр нашего фильма. VDub позволяет накладывать множество фильтров, входящих в стандартную поставку и изменяющих деинтерлейс, сглаживание, резкость, яркость, шторки, размер кадра, уровни яркости, поворот и т.д. Нас интересуют в основном изменение размера кадра (resize), шторки или обрезка (letterbox, cropping) и деинтерлейс (deinterlace).

Деинтерлейс. Стандарты PAL и SECAM подразумевают вывод каждого кадра двумя полями, наложенными друг на друга через строку - это называется интерлейсным кадром (в отличие от прогрессивного кадра, когда выводится сразу все поле на полный кадр, как например на мониторе). Визуально мы можем наблюдать интерлейс (чрезстрочность) при просмотре интерлейсного видео с DVD (если в проигрывателе не включен фильтр деинтерлейса), когда идет сильное смещение объектов в кадре - мы увидим "расческу" (рис.5). Для того, чтобы избавится от этой расчески, следует наложить фильтр deinterlace, причем еще до изменения размера кадра, т.к. при интерполяции кадра смещается правильное чередование строк полукадров и деинтерлейсинг в таком случае уже будет неэффективным - расческа останется местами.

iVTC. Стандарт NTSC подразумевает попеременный вывод интерлейсных и прогрессивных кадров в строгой очередности со скоростью 30 кадров в секунду, которые при этом имеют избыточную информацию - дублирование пары полей с изменением четности в соседних кадрах. Эту избыточную информацию можно безболезненно удалить, применив специальный алгоритм, и получив при этом уменьшение количество кадров (24 кадра в секунду), не потеряв совершенно никакой информации из фильма. Этот алгоритм заложен в Дубе в разделе Video/Frame rate/inverse telecine/reconstruct-adaptive. Следует заметить, что алгоритм сложен, т.к. последовательность чередования в NTSC фильмах постоянно нарушается и до сих пор нет идеального iVTC, реализованного для программ, позволяющих кодировать Divx, поэтому лучше все таки применять параллельно iVTC и старый добрый интерлейсинг, чтобы в готовом фильме не проскакивала "расческа".

Размер кадра мы уже обсуждали выше. Лучше, чтобы кадр, взятый с DVD изменялся не пропорционально размерам, записанным на DVD, а пропорционально стандартным видео размерам - 4:3, 16:9. Так мы добьемся нормальных пропорций лиц и предметов при просмотре в плэерах, не имеющих возможности подгонки пропорций (скажем WMP или Playa). Шторки (скрытие части изображения за горизонтальными или вертикальными полосами) и обрезка (отрезание части кадра) позволяют отрезать или скрыть грязь по краям кадра (особенно это касается домашних фильмов, сграбленных самостоятельно), а шторки еще и позволяют довести кадр до нужного размера (некоторые видеокарты поддерживают видеовыход на ТВ только фильмов с размером кадра, кратном 16 или 32). Применять эти фильтры можно в любой очередности.

После задания всех параметров кодирования и фильтров можно приступать собственно к кодированию, которое заключается всего лишь в выборе имени файла после File/Save AVI.

MM4.

После получения двух файлов с разным битрейтом - два LM, либо FM и LM, о чем рассказывалось выше, нам нужно смикшировать из них один (с переменным битрейтом), с выбором из двух фильмов фрагментов, наиболее качественно сжатых каждым из кодеков. Используем для этого Project Divx (рис.6). Программу можно взять здесь: http://mydivx.by.ru/files/ProjectDivX15.zip

В программе нужно выбрать "быстрый" и "медленный" (или легкий и тяжелый по весу соответственно, если пожато одним кодеком) варианты фильма. После этого нажимается "автовыборка" и выбираются параметры для сбора статистики. Баланс быстрых и медленных частей фильма и "чувствительность" выборки - через сколько кадров брать статистику. Лучше конечно Every frame. Здесь же можно ограничить массу файла, задав значение в кб. Не забывайте, что нужно оставить место под аудиопоток. После "ОК" автоматика начнет выборку.

После окончания автовыборки можно проверить результат и поправить данные, если мы не согласны с выбором машины. Переключение fast/low фрагментов в таблице осуществляется правой кнопкой мыши. Если мы хотим вручную выбрать фрагменты для кодирования ММ4, то выбираем нужные фрагменты, передвигаясь по фильму кнопками "КК" влево-вправо и выделяем фрагмент кнопками "фрагмент", а затем добавляем его "как low" или "как fast".

После окончательного заполнения таблицы автоматически или вручную, нажимаем на кнопку "собрать фильм", задаем путь и имя и ждем окончания процесса - создания фильма с переменным битрейтом.

После этого осталось только добавить звук.

Virtual Dub. Звук.

Если мы хотим вставить в фильм mp3 звук, то нам нужно сжать wav файл, полученный в DVD2AVI, любым подходящим кодеком mp3 - Lame, Fraunhofer и пр. с параметром "создавать wav заголовок". Для микширования mp3 с видео звук должен иметь расширение wav и RIFF-заголовок (оставаясь внутри все тем же mp3).

Нам нужно всего лишь открыть в VDub свой сжатый Дивх файл, а затем в диалоге Audio/WAV audio выбрать наш аудио файл. После этого обязательно нужно задать в Video и в Audio параметр Direct stream copy, чтобы Дуб не пытался перекодировать заново видео или аудио потоки, и сохранить его как avi под другим именем. Операция пройдет достаточно быстро, т.к. в этом случае Дуб просто скопирует оба файла в заданное место, попутно их микшируя.

В случае расхождения аудио и видео потоков (потери синхронизации) к середине или к концу фильма стоит выбрать параметр Video/Frame rate/Change so video and audio duration match, что синхронизирует видео поток c аудио.

Если же мы выбирали оригинальный АС3 звук, то нам понадобится один из хаков Дуба - Dub AC3 либо NanDub, понимающие АС3 аудио. Подкладка аудио АС3 при этом ничем не будет отличаться от предыдущих действий с mp3, с той лишь разницей, что нам не нужно иметь АС3 с wav расширением и заголовком - он остается в оригинальном виде. Единственным отличием будет обязательное задание интерливинга (Audio/interleaving). Потребуется задать в "Interleave audio every..." и "Delay audio track" параметр 160 ms в каждом.

Virtual Dub. Нарезка.

В случае, если мы рассчитывали разместить фильм на 2CD и расчитали его размер исходя из этого, готовый фильм мы можем порезать в VDub. Открываем готовый фильм в Дубе, ставим Direct stream copy в меню Video и Audio. Смотрим на общее количество кадров или общее время, передвигаем бегунок на середину фильма. Подбираем ключевой кадр поближе к середине (стрелками с изображением ключа) и запоминаем номер этого кадра. Нажимаем на маркер конца фрагмента (последняя кнопка справа), передвигаем бегунок на начало фильма (4-я кнопка слева) и жмем на маркер начала фрагмента. Затем делаем File/Save AVI. Дуб сохранит выбраный нами фрагмент. После этого переходим Edit/Move to selection end и жмем маркер начала фрагмента, Edit/Move to end, жмем маркер конца фрагмента, File/Save AVI. В результате мы получаем два файла примерно одинаковой длины, которые можно записывать на болванки.

Эпилог.

В статье приведен лишь один из нескольких способов создания Divx фильма с применением ММ4 технологии для обеспечения одинаково хорошего качества для быстрых и медленных сцен фильма. Более подробные статьи о применяемых программах и последних достижених Дивх технологий вы можете прочитать на сайте http://mydivx.lihoman.ru (зеркало mydivx.by.ru). Там же вы найдете ссылки на наиболее часто используемые программы, сайты их авторов, Дивх сайты и форумы Рунета. Свои вопросы вы сможете задать на форуме сайта или по e-mail: mydivx@mail.ru.


(c) 02/2002, Сибирский Лихоман http://lihoman.ru
статья опубликована в редакторском варианте
в журнале ХАКЕРспец № 4[17]2002.
Следующая статья раздела
Возврат на список статей