Продукты Pinnacle

         

Технология компрессии MPEG video files


Конвертируем DVD в MPEG-4

Технология компрессии 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 (на текущий момент) сама программа, под управлением которой происходит сам процесс кодирования. Можете использовать оптимизированную версию программы под конкретного производителя процессоров:


    • FlasKMPEG_0594_Intel.zip - оптимизированная версия программы для процессоров от Intel;
    • FlasKMPEG_0594_AMD.zip - оптимизированная версия программы для процессоров от AMD;


  • 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), сначала уменьшаем его, придерживаясь соотношения 4:3 (коэффициент 1,3(3)), например до 576x432, клавишами Output Size=>Width/Hight, получаем аналогичный кадр с сохраненными пропорциями при декомпрессии потока DivX ;-), но меньший по размеру.

      Поскольку имеются черные полосы сверху и снизу - их необходимо обрезать. Для этого ставим галку в поле Crop, затем клавишами Hight=>"-" и Top offset=>"+" обрезаем полосу снизу и постепенно перемещаем картинку вверх. В результате получаем следующее:


      Нажимаем клавишу Hide и все выбраные установки по формату картинки будут автоматически приняты программой. Обращаю Ваше внимание на то, что значение горизонтали лучше выбирать кратным 32-м, тогда на любой машине не будет проблем с оверлеем. Что касается значения вертикали, то для наибольшей совместимости с различными видео-кртами оно должно быть кратным 16, однако, иногда полезно немного обрезать картинку по вертикали на пару-тройку пикселов, чтобы получить более четкий переход на черные полосы эркана. Это, конечно, дело вкуса, но на мой взгляд в таком варианте кадр выглядит гораздо приятнее (на рис.сверху горизонтальные полосы остались, поскольку отрезав следующие 16 пикселов придётся отхватить от изображения уже достаточно много).

      При правильном изменении разрешения картинки, при просмотре, размер кадра (на телевизоре или на мониторе в полноэкранном режиме) не должен отличаться от исходного (DVD), в противном случае появятся искажения геометрии.

      В таблице сведены рекомендуемые мною разрешения картинки для трёх основных форматов изображения, причём горизонталь делится на 32, а вертикаль - на 16.. Обратите внимание на то, что значения для форматов 16:9 и WideScreen получаются после обрезания чёрных полос, но прежде картинка сжимается в пропорции 4:3.

      4:3 k=1,3(3) 16:9 k=1,7(7) WideScreen k=2,35
      576 x 432 576 x 320(432-112) 672 x 288(480-192/512-224,PAL)
      512 x 384 512 x 288(384-96) 640 x 272(480-208)
      <


      Можно, конечно, задавать и большие разрешения, но если картинка содержит более 1000 блоков 16 x 16 (считается по формуле горизонталь x вертикаль / 256), то получить достойную картинку на фильмах с переменной динамикой, при использовании одного кодека и ужимаясь в объём одной матрицы - уже слишком сложно...

      Идём дальше. Выбрав остальные необходимые настройки в опции Global Project Options (с которыми нетрудно разобраться самостоятельно), переходим к настройкам кодеков видео и звука.

      Для начала выбираем сам метод кодирования по алгоритму DivX ;-), следуя опциям Options=>Select Output Format=>AVI Output.

      Затем следуем Options=>Output Format Options и получаем доступ к выбору кодеков для видео и звука. Поочередно выбираем кодеки видео (DivX ;-) и звука (MP3). С настройками кодеков можете поэксперементировать самостоятельно.

      Выбор кодека DivX ;-). В поле Настройка Вы получаете доступ к изменению параметров кодека. Значения можно устанавливать согласно результатам расчета калькулятора.

       
      Выбор кодека MP3 Audio Layer-3 для звука. Чем выше значения в поле Атрибуты, тем качественнее звук. Однако, показанных значений вполне хватает.


      Если Вы столкулись с проблемой рывков в звуке (это происходит из-за микро-уменьшения потока звука по сравнению с видео и попытками синхронизировать эти потоки плейерами), то необходимо прогнать фильм без перекодирования через Virtual Dub с опцией Audio/Video Interleave Options.
      Теперь опишу суть некоторых настроек, имеющих место в конфигурации кодека 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, в зависимости от выбраных предустановок.


      Содержание раздела