DVD-Rip, часть 3. DivХ version 4.

Автор: Алексей Шашков
Date: 29/07/2001

Сразу же говорюсь. То что вы сейчас читаете не является полноценной и самостоятельной статьёй. Это дополнение к циклу статей по DVD-Rip (части первая и вторая), и если вы решите что некторые вопросы и определения освещены не полностью - обратитесь к этим статьям.

Новый кодек DivX-4.0-Beta появился совсем недавно, как дальнейшее развитие Project Mayo. Как можно заметить, после относительной неудачи с первой бетой, вышедшей под названием OpenDivx, разработчики вернулись к старому названию, теперь это снова просто DivX, только более новая версия. Оборотной стороной этого являются вновь закрытые исходники нового кодека. Посмотрим, удастся ли этой версии повторить успех своего предшественника.

С точки зрения обычного пользователя, то есть человека который только смотрит фильмы, и не подумывает о кодировании, скорее всего удастся. Один из важнейших факторов, способствующем этому, это полная обратная совместимость с версией 3.хх. То есть, новый кодек сможет проигрывать всё, что тяжким трудом накодили армии риперов к сегодняшнему дню. На этом приятные сюрпризы не заканчиваются. Кроме совместимости, в новом кодеке уделили самое пристальное внимание оптимизации кодека для ускорения его работы. Кстати, совместимостью энкодера с DivX 3.11 и оптимизацией декодера под MMX/SSE занимался человек по имени Евгений Кузнецов, что не может не радовать :-)

В результате, мы получили кодек в котором попытались объединить всё лучшее, что было наработано за время развития Divx, и который, к тому же, и работает быстрее. По поводу включенных наработок я ещё поговорю ниже, а пока, с точки зрения обычного пользователя, нас интересует всего две вещи, совместимость и скорость.

Совместимость.

Мне удалось найти всего один фильм, который после установки нового кодека не захотел проигрываться ни одним из установленных у меня плееров, программы просто вылетали с ошибкой. Правда, закоден этот фильм коряво (не мной :-)), с нарушением всех мыслимых и немыслимых рекомендаций. К тому же, это всего один фильм из почти что полутора сотен, что я пробовал открыть с новым кодеком. Приятным дополнением является то, что с новым кодеком можно смотреть фильмы закоденные OpenDivx кодеком. Впрочем, это не более чем дополнение, так как хоть сколь-нибудь широкого распространения тот кодек не получил, прежде всего из за большего времени необходимого для кодирования с его помощью, при практически идентичном по сравнению с DivX 3.xx качеством.

Можно делать выводы, что хотя обратная совместимость и не является 100%, она очень и очень высока, и большинство пользователей, скорее всего, никогда не столкнуться с проблемами в этом плане. Но это касается совместимости с фильмами. С совместимостью с плеерами, к сожалению, картина не столь радужная, некоторые из них (например Sasami2k) не "видят" нового кодека, и после того как он подменяет собой старый кодек отказываются проигрывать Divx фильмы вообще. Впрочем, эта проблема временная, и с выходом новых версий плееров она, безусловно, будет решена. А пока что приходится довольствоваться старым добрым Windows Media Player-ом, у которого никаких проблем с пониманием нового кодека не возникает.

Скорость.

В новом кодеке обещано повышение скорости декодирования и кодирования. Я не проводил полномасштабных исследований скорости нового кодека (из за недостатка времени, да и тема статьи несколько иная), поэтому точных цифр здесь не будет. Я склонен верить тому, что кодек стал быстрее, на глаз это от 5 до 20%, в зависимости от используемого материала, при правильно настроенной системе. Кстати, вот ещё одна причина, по которой не имеет большого смысла приводить точные цифра загрузки процессора или выброшенных кадров, слишком сильно зависит всё от исходного материала, даже на одной и той же системе. А что говорить про разные! Но главное новшество даже не это, а то как кодек обрабатывает данные если мощности компьютера не хватает. Самое страшное, что могло произойти при проигрывании фильма на слабой системе, при использовании старого кодека, это рассинхронизация звука и изображения, которая только нарастала по мере проигрывания. Новый кодек, вроде бы, лишён этого недостатка, теперь если из за недостаточной мощности системы выкидываются кадры из изображения, выкидываются и участки звука. Конечно, сам факт выкидывания чего-либо не радует, но то что это не приводит к рассинхронизации не может не радовать. Из других приятных особенностей кодека, которые могут здорово повлиять на скорость проигрывания фильма, надо отметить наличие встроенного фильтра, который позволяет включаться overlay на неправильно закоденных фильмах (где размер по горизонтали не кратен 32). Раньше подобное можно было получить либо использованием специализированных плееров (например Sasami2k), или при использовании специальных фильтров для DivX кодека (например DivXG400). А ведь не использование overlay на не очень мощных системах приводит к тому, что кроме как в окне фильм посмотреть вообще нельзя.

Из других наиболее известных и полезных внешних фильтров можно вспомнить antifreezer, предназначенный, как легко догадаться из его названия, для борьбы с freeze frame-ами (это когда изображение останавливается, а звук продолжает идти дальше). К сожалению, у меня сейчас нет фильмов с такими багами, поэтому проверить наличие/отсутствие функций борьбы с ними в новом кодеке я не смог. Но, как мне кажется, такая известная и довольно широко распространённая проблема не могла пройти мимо внимания создателей DivX v4 кодека, и что-то по этому поводу было предпринято.

Ещё одной, очень важной и приятной особенностью нового кодека являются более широкие возможности по влиянию на скорость декодирования. В 3.х версиях кодека была возможность выставить CPU Utilization, то есть загрузку центрального процессора. Возможных значений было 4, и при увеличении уровня загрузки улучшалось качество картинки, но требовался более мощный процессор для просмотра. И, соответственно, наоборот, владельцы не очень мощных систем имели возможность пожертвовать качеством ради возможности проигрывания фильма без тормозов. Такая полезная возможность сохранилась и в новой версии кодека, причём количество возможных вариантов увеличилось с 4 до 7. Этот слайдер определяет какой обработке будет подвергнут кадр после распаковки. То есть, по сути дела, он управляет просто набором фильтров, которые будут применены к изображению. Поэтому в новой версии кодека это называется не CPU Utilization, а Postprocessing level, что более правильно по сути. Как уже говорилось, всего этих уровней 7.

Postprocessing level

0 - никакой обработки не производится, изображение выдаётся именно в том виде, в котором было сжато. Загрузка процессора минимальна.

1 - включается горизонтальный деблокинг. Особенности DivX кодека таковы, что при кодировании изображение разбивается на блоки размером 8*8 пикселей. В результате при просмотре на изображении становятся заметны границы этих блоков. Этот артефакт один из наиболее бросающихся в глаза при просмотре, поэтому фильтр который сглаживает края блоков по горизонтали включается самым первым.

2 - включается вертикальный деблокинг. Таким образом на втором уровне включается всё, что кодек может сделать для подавления blockiness эффекта. Один раз увидеть лучше, чем сто раз услышать, поэтому я приведу здесь картинки демонстрирующие работу этих фильтров, взятые из файла справки для Divx v4


Нет деблокинга.

Деблокинг

3-5 - на этих уровнях включаются различные уровни deranging фильтра основанные на изменении цвета. Он призван бороться с артефактами возникающими из за сжатия изображения.

6 - на этом уровне включается deranging фильтр основанный на изменении яркости. Для демонстрации работы deranging фильтров, я снова приведу пару картинок их файла справки для Divx v4.


Не используется deranging фильтр


Используется deranging фильтр.

6 - это последний уровень Postprocessing level, на нём изображение обрабатывается всеми фильтрами доступными кодеку и загрузка процессора максимальна. Зато, качество картинки на старых фильмах, закоденых со старым кодеком, может быть выше, из-за изменившихся фильтров в новом кодеке. Если и этого мало, и суперпроцессор позволяет, то некоторые плееры позволяют наложить на изображение ещё и дополнительные фильтры. В качестве примера такого плеера можно привести Sasami2k, но, как я уже говорил выше, текущая версия этого плеера не может нормально работать с новым DivX кодеком. Впрочем, как мне кажется, такая печальная ситуация не продлится долго.

На основании всего вышеизложенного можно сделать вывод. Разработчики DivX v4 справились со своей работой очень хорошо, и с точки зрения обычного пользователя, просматривающего фильмы, нет практически никаких противопоказаний (разве что несовместимость с некоторыми плеерами, но это явление временное, как хочется надеяться) к использованию этого кодека. Напротив, есть одни сплошные плюсы. Но это с точки зрения пользователя. А как с точки зрения риппера, который не удовлетворяется простым просмотром, а не прочь сделать что-нибудь своё, время от времени.

Encoding.

После установки Divx v4 кодека в системе, в любой из "традиционных" программ для кодирования видеоматериала в списке доступных кодеков появится Divx Codec 4.0 Beta. Выбрав этот кодек, откроется следующее окно:

Окно разбито на несколько разделов, первый из которых

General parameters.
В самом первом выплывающем списке этого раздела, доступном для редактирования скрывается самая продвинутая опция, появившаяся в кодеке. Это

Variable bitrate mode.
Доступны следующие значения
1-pass - режим кодека, при котором качество итогового файла зависит от настроек кодека в разделе Constant bitrate parameters. Представляет из себя что то среднее между low motion и high motion кодеками в Divx 3.xx кодеке.
1-pass quality based - режим кодека, наиболее похожий на low motion режим из Divx 3.хх кодека. Битрейт выдерживается максимально близко к заданному, вне зависимости от сцены.
2-pass first pass - первая попытка реализовать mm4 энкодинг в рамках Divx кодека. Принцип этой реализации схож с реализованным в пакете SBC. Видео кодится в два прохода, в первый проход создаётся файл статистики, во второй уже кодится итоговый материал. Это первый проход, когда создаётся файл статистики.
2-pass second pass - второй проход в рамках реализации mm4 алгоритма нового Divx кодека. В этот проход создаётся итоговый файл, руководствуясь данными из файла статистики, созданным во время первого прохода. Про качество материала полученного таким способом мы поговорим в конце статьи.
Следующим раскрывающим списком, который доступен в этом разделе, является
    Performance/quality
    Имеется четыре возможных значения
  1. Slowest.
  2. Slow.
  3. Medium.
  4. Fast.
  5. Fastest.
Значения достаточно очевидны, предлагается выбрать что важнее, скорость кодирования или качество итогового материала. Учитывая, что кодировать надо всего один раз, а смотреть много, то оптимальный выбор, IMHO, очевиден...

Следующей идёт самая важная настройка из всех доступных. Это

Output video bitstream. Это знакомый прочитавшим DVD-Rip часть 1 битрейт. Задать его можно либо цифрой, в соответствующем окне, либо слайдером, расположенным немного ниже. Как и раньше, максимально доступным битрейтом является 6000.

Quality.

Maximum key frame interval. Максимальное количество дельта кадров между ключевыми кадрами. В новый кодек изначально встроен механизм вставления ключевых кадров по изменению сцены. Эта цифра, как и следует ожидать, заставляет кодек вставить ключевой кадр если он не вставлен SCD механизмом. По умолчанию стоит 300, что соответствует 10-12 секундам, в зависимости от frame rate.

Default decoder postprocessing level: Этот слайдер определяет какой уровень постпроцессорной обработки должен выставляться по умолчанию, при проигрывании полученного материала. Не вижу никакого смысла ставить меньше максимального, шестого. Если у кого будет не хватать мощности системы, уменьшит сам.

Max CPU usage: Отметив этот чекбокс у вас появится возможность в процентах ограничить максимальное значение, на которое кодек может загрузить процессор. Полезно, если вы планируете заниматься на компьютере чем-либо ещё, и не хотите что бы процесс кодирования вам мешал.

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


Следующий раздел.

Constant bitrate parameters.
Настройки в этом разделе управляют работой кодека в режиме 1-pass (не 1-pass quality based).
Maximum quantizer и Minimum quantizer Эти два значения определяют насколько кодек может отклоняться от базового значения битрейта. Чем меньше его значение, тем лучше качество, и тем больше размер. Чем больше - тем хуже качество и меньше размер. Если выставить их одинаковыми, то теряется всякий смысл в использовании этого режима, вы получите 1-pass quality based.

Ниже идут опции позволяющее хоть как-то контролировать изменения битрейта по ходу кодирования.

Rate control averaging period, frames. Определяет как долго кодек "помнит" как менялся битрейт в процессе кодирования. Высокое значение этого параметра стоит ставить если в кодируемом материале есть длинные динамичные сцены.
Rate control reaction period, frames. Определяет как быстро кодек меняет битрейт с изменением сцены.
Rate control up/down reaction. Определяет как резко кодек может менять битрейт при изменении сцены.


Последний раздел.

Variable control parameters.

Log file. Предлагает определить файл, в который будет собираться статистика во время первого прохода при двухпроходном кодировании.
Frame dropping: Позволяет задать количество кадров, которые будут выброшены. Кодек определяет кадры, по его мнению не содержащие полезной информации, и выбрасывает их. Сделано это для того, что бы можно было сделать файл маленького размера но с приемлемым качествам. Что до меня, то я с трудом представляю себе ситуацию, когда понадобилось бы так издеваться над материалом.

Практические наблюдения и выводы.

Но это всё была теория, что нас всех действительно интересует - а стоит ли использовать этот кодек для кодирования новых фильмов. И здесь выводы далеко не однозначные. Безусловно, новый кодек лучше старого при кодировании "в лоб", за счёт большей степени свободы при контроле за битрейтом. Поэтому если вы привыкли работать с программами вроде Flask, то это ваш выбор. Правда, у меня было несколько случаев беспричинного вылета Flask`а при использовании нового кодека, так что будьте внимательны. И учтите, что закоденный с новым кодеком материал не будет проигрываться старым кодеком, поэтому если вам захочется обменяться результатами своих трудов, побеспокойтесь о том, что бы человек имел новый кодек.

Но опытные кодеры знают, что наилучшие результаты достигаются при mm4 методе кодирования. Как уже упоминалось, в новом кодеке реализован механизм кодирования в два прохода, схожий с тем, что используется в SBC. Однако, несмотря на это, качество полученного с помощью этого метода материала не идёт ни в какое сравнение с тем, что можно получить при использовании FairUse, не говоря уже про SBC, с правильными настройками. То есть, всё гораздо хуже. Да и уровень контроля над процессом кодирования, который имеется в SBC гораздо выше того, что можно получить с новым кодеком. Если быть ещё более точным, то при двухпроходном кодировании новый кодек не даёт практически никакого контроля. Из других преимуществ нового кодека создатели отмечают возможность кодить в разрешениях до 1920*1280, но при максимальном битрейте в 6000, такая возможность представляет собой только теоретический интерес.

Таким образом, выводы, которые можно сделать после ознакомления с новым кодеком таковы. Новый кодек прекрасно подходит для просмотра фильмов. Единственное, что может как то замедлить победное шествие нового кодека в этом качестве, это проблемы с некоторыми плеерами. Но не думаю, что эта продлиться долго.

С точки зрения кодера, заинтересованного в качестве получаемого материала, всё не так радужно. Качество, получаемое с помощью таких программ как FairUse и Nandub, осталось недосягаемым. Хорошая новость состоит в том, что установка нового кодека в системе никак не влияет на работу этих замечательных программ. Так что можно смотреть с новым кодеком, а кодить со старым.