Технология
компрессии MPEG video files (в нашем случае
dvd-файлов *.vob) по методу DivX ;-) заключается
в следующем:сам алгоритм DivX ;-) применяется
в кодеке, который используется в программе непосредственно
кодирования и является отдельным подключаемым
программным модулем, наряду с другими имеющимися
модулями-кодеками. Т.е. для того чтобы преобразовать
какой-либо *.vob файл в файл *.avi (получаемый,
в частности, при использовании кодеков DivX
;-)) Вам необходимы две вещи - программа-кодер
и сами кодеки DivX ;-) в качестве подключаемого
модуля. Скачиваются и инсталлируются они отдельно.
После удачной инсталляции при запуске программы-кодера
в настройках выбора типа кодека должны появиться
кодеки DivX ;-) MPEG-4 Low-Motion и DivX
;-) MPEG-4 Fast-Motion. Именно, выбрав один
из них Вы и получите, в результате преобразования,
файл *.avi. Т.е. описываемая здесь методика
аналогична той, которую применяют (на этапе
компрессии) для производства дисков MPEG-4
VIDEO, появившихся в большом количестве
на рынках.
Вот
перечень программ, которые понадобятся Вам для
процедуры перекодировки файлов *.vob в *.avi:
- cladDVD
или подобная, для снятия защиты MacroVision,
кодировки CSS, мульти-регионального
кодирования и копирования *.vob-файлов на
хард;
- Flask
MPEG 0.594 (на текущий момент) сама программа,
под управлением которой происходит сам процесс
кодирования. Можете использовать оптимизированную
версию программы под конкретного производителя
процессоров:
- divx_311alpha
непосредственно кодеки DivX ;-), работающие
в оболочке программы Flask MPEG;
- DivX.Scene-Detect.Patch.v1.0
новый вариант кодеков Low-Motion
и Fast-Motion, позволяющих самостоятельно
вставлять ключевые кадры в необходимые
места, в зависимости от изменения содержания
кадра, что позволит улучшить в конечном
итоге качество компрессии. После скачивания
и инсталляции divx_311alpha, распакуйте
зип, поместите файлы DivXc32.dll
и DivXc32f.dll в папку c:\windows\system,
заменив имеющиеся.
cladDVD
и divx_311alpha имеют стандартную процедуру
установки, надо лишь принимать предлагаемые
во время инсталляции условия и софт ляжет там,
где ему надо и не будет мешать другим программам.
Не забудьте зарегистрировать кодеки DivX ;-)
в системе, запустив файл Run Me First!!.
FlasKMPEG необходимо поместить в отдельную
папку, с гордым одноименным названием (программа
вполне этого заслуживает). Кстати, можно использовать
русификатор
программы, который существенно облегчит ее освоение.
Файл Russian-SL.lang.flask надо поместить
в папку Lang в директории, где лежит
Flask MPEG. Затем выбрать в Options=>Language=>Russian-SL.
Рекомендую, также, обратить внимание на сайт
автора русификатора - Сибирского
Лихомана.
После
того, как весь необходимый софт успешно установлен,
Вам необходимо переписать с помощью программы
cladDVD(или подобной) содержимое DVD-диска
на хард. Это может потребовать от 5Гб свободного
места на диске. Настройки программы достаточно
доступны для освоения и ее использование не
должно вызвать затруднений.
Запускаем
программу FlasK MPEG, под управлением
которой будет осуществляться компрессия. FlasK
MPEG - мощный программный инструмент, который
может преобразовать любой MPEG-1 или MPEG-2
поток в целый ряд форматов, как например: DivX,
AVI, MJPEG, MPEG-1 или MPEG-2 и т.п.! Программа
имеет два основных компрессионных режима:
- Open
File: позволяет открыть любой mpeg-файл
и преобразовать его в какой-либо формат;
- Open
DVD: специальный способ, позволяющий читать
DVD-диски аналогично плейеру. В этом режиме
можно выбрать язык сопровождения, субтиры
и развитие сюжета.
На
странице Конвертируем
DVD в MPEG1 рассмотрены некоторые настройки
программы FlasK MPEG, правда в том случае
она используется для кодирования в поток MPEG-1,
однако большинство настроек имеют общий вид.
Остановлюсь лишь на выборе разрешения картинки
и настройках непосредственно кодека DivX ;-)
для видео и MP3 для звука.
Что
касается разрешения картинки, то для начала
немного углубимся в теорию... Дело в том, что
для получения более-менее приличного качества
при столь малых объемах получаемых файлов (один-два
CD) неизбежно приходится уменьшать исходное
на DVD разрешение картинки (для системы NTSC
- 720x480, для системы PAL -720x576). Здесь
существует простое правило - чем меньше разрешение
картинки, при одной и той же задаваемой скорости
цифрового потока - тем более качественной будет
компрессия (меньше артефактов), т.е. на один
и тот же блок изображения (16x16 пискселов)
будет отводиться больше бит информации. Однако,
с уменьшением разрешения неизбежно уменьшается
и четкость, поэтому необходимо искать разумный
компромисс... Кроме того, чем больше блоков
имеет картинка, тем больше потребуется машинных
ресурсов для декомпрессии потока. Если Вы ориентируетесь
на свою машину, то в результате экспериментов
можете выяснить технический предел для успешной
декомпрессии и в дальнейшем его придерживаться.
Еще
один момент - как Вы знаете, фильмы записываются
в нескольких форматах - 4:3; 16:9; Wide Screen.
В случае, если изображение выводится на весь
экран (соотношение сторон 4:3 как у большинства
домашних телевизоров), то мы имеем коэффициент
соотношения сторон 1,33(3). А если еще учитывать
то обстоятельство, что для многих серьезных
видео-карт должно выполняться требование кратности
горизонтали 32-м (для работы оверлея), то при
изменении исходного размера кадра остаются следующие
соотношения сторон: 768x576 (разрешения полного
кадра в системе PAL), 704x528, 640x480, 576x432,
512x384, 448x336, 384x288 и т.д..
Для
фильма в системе NTSC с исходным размером кадра
720x480 - ближаешее значение для уменьшения
картинки, с выполнением описанных выше требований,
будет 640x480.
В
случае, если фильм записан в широкоформатном
варианте - сверху и снизу на экране видны черные
полосы, то мы имеем возможность удалить их при
компрессии, отводя весь цифровой видео-поток
на кодирование самого изображения. Рассмотрим
небольшой пример: фильм в формате 4:3 и c разрешением
картинки 576x432, содержит 972 блока(16x16).
На описание каждого блока отводится n-ное
количество бит цифрового потока. В случае, если
мы сжимаем фильм 16:9 с конечным разрешением
картинки 576x256 (576 блоков), то задавая ту
же общую скорость потока, мы описиваем меньшее
количество блоков (мешьний размер кадра), получая
меньшую степень компресси и, как следствие,
более высокое качество.
Итак,
имеем широкоформатный фильм на DVD, задача -
обрезать черные полосы и уменьшить разрешение
картинки. Открываем любой *.vob-файл в программе
FlasK MPEG, выбираем Options=>Global
Project Options=>Show Output Pad=>Reset Settings
(как это будет называться по русски, здесь и
далее - догадаетесь сами:)) и видим исходное
разрешение картинки и отдельный кадр фильма.
Если
попали на темный или плохо просматриваемый кадр,
то можно попробовать открыть другой *.vob, а
если и это не помогает, то можно воспользоваться
любой программой, для разделения *.vob-файлов
на сегменты, например vobsplitter02.
. А уж имея несколько сегментов, шанс открыть
просматриваемый кадр вполне высок... Можно использовать
вскрытый
вариант программы FlasK MPEG, в котором
проблема с просмотром кадра успешно решена,
как и доработаны некоторые другие моменты по
отображению статистики, облегчающие работу с
программой...
Имея
исходное разрешение, например 720x480 (DVD -
NTSC), сначала пропорционально уменьшаем его,
например до 576x384, клавишами Output Size=>Width/Hight,
получаем аналогичный кадр с сохраненными пропорциями,
но меньший по размеру.
Поскольку
имеются черные полосы сверху и снизу - их необходимо
обрезать. Для этого ставим галку в поле Crop,
затем клавишами Hight=>"-" и Top offset=>"+"
обрезаем полосу снизу и постепенно перемещаем
картинку вверх. В результате получаем следующее:
Нажимаем
клавишу Hide и все выбраные установки
по формату картинки будут автоматически приняты
программой. Обращаю Ваше внимание на то, что
значение горизонтали лучше выбирать кратным
32-м, тогда на любой машине не будет проблем
с оверлеем. И еще, узнать истинное соотношение
сторон кадра у фильма (широкоформатные варианты),
можно, обрезав черные полосы сверху и снизу,
не изменяя первоначальный размер кадра (в
поле Output Size). Получив какое-либо
соотношение сторон, именно его нужно придерживаться
при дальнейшем пропорциональном уменьшении кадра,
чтобы не получить искажения геометрии.
Выбрав
остальные необходимые настройки в опции Global
Project Options (с которыми нетрудно разобраться
самостоятельно), переходим к настройкам кодеков
видео и звука.
Для
начала выбираем сам метод кодирования по алгоритму
DivX ;-), следуя опциям Options=>Select Output
Format=>AVI Output.
Затем
следуем Options=>Output Format Options
и получаем доступ к выбору кодеков для видео
и звука. Поочередно выбираем кодеки видео (DivX
;-) и звука (MP3). С настройками кодеков можете
поэксперементировать самостоятельно.
Теперь
опишу суть некоторых настроек, имеющих место
в конфигурации кодека DivX ;-).
Keyframe
every - MPEG-4 по терминологии Microsoft
относится к interframe (межкадровым)
методам компрессии, т. e. таким, где полностью
сохраняется небольшое число ключевых кадров
(Key frame или I-Frame), остальные кадры (Delta
frames) содержат только разницу между предыдущими
и последующими кадрами. Key frame every задает
промежуток между ключевыми кадрами. Именно этим
объясняется задержка при попытке запустить фильм
с любого места - что бы показать произвольный
кадр плейер должен вернуться к ключевому кадру
и построить все кадры до нужного. Казалось бы,
чем больше ключевых кадров, тем лучше. Однако
это не так. Дело в том, что ключевой кадр требует
большего количества данных, чем промежуточный,
и когда вставляется ключевой кадр на последующие
кадры остается уже меньшее количество информации
(ведь поток ограничен). Вообще современные кодеки
могут обходиться очень малым числом ключевых
кадров, скажем 1кл. кадр на 9999 кадров или
1кл. кадр на 3600сек. На самом деле значение
Key frame interval для MPEG-4 кодека
означает всего лишь максимальное расстояние
между кл. кадрами.
Compression
Control (Smoothness/crispness) - Smoothness
определяет плавность движения, crispness определяет
резкость или детальность изображения. К сожалению,
эти величины исключают друг друга, т. е если
вы увеличиваете одну, то другая уменьшается.
Data
Rate - самое важное значение, именно от
него зависит и качество видео и размер файла.
Чем оно больше, тем выше качество, но и размер
файла больше. Измеряется в килобитах в секунду.
В MPEG-4 этим параметром мы задаем среднее значение
потока данных (для кодека Low-Motion),
либо максимальное значение (для кодека Fast-Motion
реальное значение зависит от содержимого фильма
в данный момент и может постоянно изменяться.
По этой причине расчитать точно объем получаемого
файла после компрессии практически невозможно,
однако получитmь примерное число вполне можно,
используя например программный
калькулятор.
В
заключении можно сказать, что процедура полной
компрессии потребует до 8-15 часов на машине,
с процессором 500MHz, в зависимости от выбраных
предустановок.