Кодеки для сжатия видео. Часть 2

В предыдущей статье мы рассмотрели два довольно популярных кодека. Случайно или нет, но в тот обзор попал кодек со славным прошлым (DivX) и кодек со светлым будущим (x264). Сколько бы их ни критиковали, но один из них уже доказал свою востребованность, а второй стремительно набирает популярность. Сегодня же речь пойдет о двух претендентах на звание лучшего кодека. Будущее у них не туманное, но их нестандартность, экспериментальность и более позднее появление, чем DivX, иногда создают впечатление их востребованности только в качестве средств проверки новых идей и технологий.

XviD

Бесплатный аналог DivX, значительно превосходящий его как по количеству настроек, так и по качеству изображения. Теоретически любой фильм, сжатый XviD, может быть корректно декодирован с помощью DivX. На практике процент таких фильмов достаточно высок. Так что XviD можно использовать для сжатия фильмов для последующего их просмотра на DivX-проигрывателях. Первое, что приходит в голову при обзоре названий настроек: это ж какую "траву" надо курить, чтоб такое придумать. Наверняка не одного меня пугало их многообразие. Главное окно настроек показано на рис. 1. В отличие от своего аналога, XviD обходится без закладок в окне настроек. Однако каждая опция имеет ряд дополнительных опций, состав которых может быть разным.

. Опция Profile@level содержит различные профили кодирования видео, среди которых, как можно заметить, есть и профили, по названию соответствующие таковым в DivX. Разработчики утверждают, что это соответствие полное. Напротив есть кнопка More, при нажатии на которую мы увидим первое окно, которое нас может серьезно озадачить (рис. 2). Уже знакомые опции Quarter Pixel и Global Motion Compensation ничем не лучше своих аналогов в DivX. Так что без сожаления их отключаем. Опция Quantization type также нам знакома. По названию опции Adaptive Quantization нельзя определить ее назначение. И не будем пытаться сделать это. Теоретически она может включать применение масок яркости при сжатии, что увеличивает сжатие. На практике опция просто снижает качество. Опция Interlacing пригодится для работы с чересстрочным видео, хотя зачем такое видео при просмотре на компьютере, неизвестно. Как видим, половина опций в этом окне попросту бесполезна. Группа опций BVOP's способна значительно повысить качество сжимаемого видео, потому что включает использование B-кадров. Первая опция в этой группе нам хорошо знакома — максимальное число последовательных B-кадров. Смысл опций Quantizer ratio/offset становится понятен, если вспомнить, как меняется качество с увеличением Quantization у кодека DivX.

Говоря простым языком, Quantizer Ratio указывает, во сколько раз будет урезано качество соответствующего B-кадра. Quantizer offset дополнительно задает, на сколько пунктов вычисленный Quantizer будет увеличен. Таким образом, получилась неплохая заморочка, хотя и кажется поначалу, что опция должна придать кодеку гибкости. Может быть, оно и так. Но я так не считаю, и вот почему. Quantizer не дает прямого представления о процентном соотношении размера соответствующих P- и B-кадров, так как это всего лишь относительное качество. Почему бы не пойти по пути x264, который предоставляет пользователю выбор минимального размера B-кадра и максимального Quantizer'а, а при кодировании в каждом конкретном случае решает сам, каким быть B-кадру?

На мой взгляд, это не только удобно, но и помогает избежать ошибок. Опцию Packed bitstream, снижающую нагрузку на процессор при декодировании видео, имеет смысл включать, если компьютер, воспроизводящий видео, хуже Pentium II (уж не знаю, насколько хуже — все тот же смартфон Motorola MPx220 прекрасно справляется с декодированием и без этой опции). В общем-то, и в этом случае я бы рекомендовал для воспроизведения видео использовать VLC Media Player вместо включения этой опции. На закладке Level находится информация о выбранном профиле. На закладке Aspect Ratio (рис. 3) находятся параметры точки и соотношения сторон кадра, которые можно задавать по своему вкусу. Внизу окна неголословное предупреждение о том, что многие плейеры проигнорируют эту информацию. Так что лучше заранее поменять разрешение кадра в Virtual Dub в "квадратных" точках.

. Следующая на рассмотрении опция Encoding type — количество этапов сжатия. Опция вполне знакомая и понятная. Как видно из списка, количество этапов сжатия не может быть больше двух. При кодировании в два этапа надо будет сформировать соответственно два задания, отличающиеся только режимом кодирования: Twopass — 1st pass для первого задания и Twopass — 2nd pass для второго. Все понятно, пока опять не нажимаем кнопку More. Для режима Single pass (рис. 4) там будут три опции, назначение которых осмыслить трудно. Reaction Delay Factor — время "задержки" реакции кодека на значительное изменение качества картинки. В чем оно измеряется, неясно. Вероятно, в кадрах. А смысл его таков, что при значительном ухудшении качества кодек начнет уменьшать четкость, но только выдержав указанную паузу. Averaging period — скорость реакции на изменение качества. Smoother определяет, в течение скольких кадров кодек будет заниматься "смазыванием" картинки (то есть уменьшать четкость). После этого, по идее, кодек начнет повышать битрейт. За отсутствием толковой документации я и сам не уверен в своей правоте, равно как и разработчики этого кодека.

К счастью, у режима Twopass — 1st pass (рис. 5) опций поменьше, и все они более понятны. При включении Full quality first pass, как ясно из названия, кодек анализирует видеопоток так же тщательно, как, предположим, и в режиме Single pass. Выберите Discard first pass, чтобы не получить в нагрузку к файлу статистики еще и сжатый с неизвестным битрейтом видеофайл. Если вам не нравится название файла статистики по умолчанию, можете изменить его и задать абсолютный или относительный путь его расположения.

Перейдем к режиму Twopass — 2nd pass (рис. 6). Большинство дополнительных опций этого режима показались мне уместными и полезными. Stats filename позволит вам обратиться к произвольному файлу статистики, который вы сохранили когда-то и долгое время берегли для выполнения второго этапа. Опция I-frame boost определяет, на сколько процентов размер ключевого кадра может превышать среднее значение битрейта, задаваемое пользователем.

Следующие две строки переводятся примерно следующим образом: максимальный размер ключевых кадров, следующих друг за другом на расстоянии, меньшем Х кадров (по умолчанию 1), будет урезан на Y (умолчанию 20) процентов относительно первого ключевого кадра. Max overflow improvement/degradation определяют, на сколько процентов битрейт можно повышать и понижать относительно среднего значения. Труднообъяснимая опция Overflow control strength позволяет кодеку "ослушаться" файла статистики и увеличить или уменьшить размер отдельного кадра на заданное число процентов. Опции High/Low bitrate scenes также позволяют кодеку на втором этапе сжатия некоторые вольности, и заключаются они в том, что кодек вопреки файлу статистики может на заданное число процентов урезать битрейт в сценах, где он высок, чтобы на другое заданное число процентов увеличить битрейт в сценах, где он низок.

. Target bitrate задает средний битрейт и, как видно, является кнопкой, при нажатии на которую вместо bitrate увидим… size, позволяющий задать размер будущего видеофайла. Мне такое "удобство" показалось совсем не удобным. Вместо Target size я бы предпочел увидеть Quantizer или вообще ничего. Тем более, что битрейт довольно просто подсчитать с помощью встроенного калькулятора, который вызывается по нажатию кнопки Calc.

. Список Zones по умолчанию содержит одну зону, которая начинается с нулевого кадра. Зоны предназначены для установки различных опций обработки для различных частей видео. Несомненно, это делает кодек очень гибким и может позволить значительно увеличить качество. Но с другой стороны такой подход к оптимизации может занять уйму времени. Посмотрим, что скрывается за кнопкой Zone options (рис. 7).

Прежде всего, это кадр, с которого начнут действовать настройки данной зоны. Rate control задается либо множителем (Weight) по отношению к заданному битрейту, либо Quantizer'ом — мерой относительного качества — и позволяет для данной зоны изменить среднее значение битрейта. Группа опций Static определяет те самые параметры, способные значительно повлиять на качество сжимаемого видео.

Begin with keyframe предписывает кодеку сжимать начальный кадр зоны как I-кадр. Grayscale encoding следует включить, если кодируемое видео черно-белое. Плюс данной опции очевиден: вместо трех составляющих цвета будет кодироваться только одна. Опция Chroma optimizer enabled — всего лишь обычный цветовой пространственный шумоподавитель. Use cartoon mode, как понятно из названия, предназначена для работы с мультипликацией. Действие этой опции заметить трудно (ввиду качественной работы самого кодека), и оно напоминает действие опции Psychovisual enhachements кодека DivX. Опция BVOP sensitivity может принимать как положительные, так и отрицательные значения, которые будут символизировать отклонение от заданного числа B-кадров.

. Quality preset — еще одна опция, которая может значительно повлиять на скорость и качество сжатия. На закладке Motion (рис. 8) представлены опции поиска движения. И даже не надо знать, что обозначают опции Motion search precision и VHQ Mode. Чем выше будет значение каждой из них, тем выше будет качество и время сжатия. Опция VHQ включает более совершенные алгоритмы поиска движения.

Соответственно, опция Motion search precision определяет, насколько этот поиск будет точным. Опция Use VHQ for bframes too включает соответствующую опцию для B-кадров. По умолчанию кодек "ищет" движение только по яркостной составляющей. Включение опции Use Chroma Motion mode позволит кодеку анализировать также и цветоразности, что положительно скажется на качестве, естественно, за счет большего времени кодирования. Frame drop ratio — экзотическая опция непонятного назначения. Если кодеку покажется, что он не может обеспечить заданный битрейт, то эта опция позволит ему выбросить "неугодные" кадры. На закладке Quantization (рис. 9) представлены Quantizer'ы для различных типов кадров — широкое поле для экспериментов. Тут без сюрпризов: чем выше значение Quantizer, тем хуже качество.

. В Other options на закладке Encoder нас интересует опция FOURCC used, которая определяет, какой декодер будет использоваться для воспроизведения сжатого этим кодеком видео. Полный список FOURCC можно найти на сайте проекта сайт . Кроме того, интересна опция Display encoding status. Ее включение позволит каждый раз при кодировании видео выводить, казалось бы, бесполезную статистику. Но это только первая мысль. На самом деле информация, приводимая в статистике, может помочь оптимизировать настройки кодека под каждый конкретный случай сжатия. Только нужно знать методику. И наверняка такие методики существуют и кем-либо описаны. В ближайшем будущем я постараюсь вернуться к этой теме. На закладке Decoder (рис. 10) обнаруживаются интересные опции Deblocking Y, Deblocking UV, которые включают фильтр подавления блочности для яркости и цветоразностей соответственно. Кроме того, есть еще и соответствующие опции Deringing — фильтры, которые подавляют шум вокруг резких краев. Но ввиду того, что XviD, в отличие от DivX, не "страдает" "замусориванием", то опции Deringing не особенно полезны.

Несомненно, кодек XviD — широкое поле для экспериментов. Правда, в этой бочке меда есть ложка дегтя, и даже не одна. Количество настроек и их названия способны отпугнуть любого. Многие настройки являются экспериментальными, и было бы неплохо, если бы разработчики выносили их в отдельные секции. По крайней мере, это не вводило бы пользователя в заблуждение относительно полезности этих настроек. Тем не менее, при грамотном анализе статистики возможен "совершенный" подбор параметров. Но даже стандартные неоптимизированные параметры сжатия позволяют достичь хорошего качества при сжатии. Так уж повелось, что кодек XviD был претендентом на звание "DivX-совместимого" и "MPEG-4-совместимого". Однако сейчас аналоги его настроек вы, несомненно, увидите в настройках кодеков H.264. Чем это хорошо — опять-таки, если существует методика подбора оптимальных параметров сжатия для XviD, то очень вероятно, что она подойдет и для кодеков H.264. А стандарт H.264 уже не только в теории, но и в практике доказывает, что способен существенно увеличить силу сжатия при сохранении того же качества.

VP70

Первое, что меня поразило в этом кодеке после использования DivX, — визуальное качество сжатого видео. На это было даже не жаль того процессорного времени, которое кодек затрачивал на сжатие. Однако, включив просмотр на самом обычном пользовательском компьютере с процессором Duron 1200, на котором был обычный набор софта для просмотра видео, я обнаружил и неприятную особенность — видео постепенно "отставало" от звука. Как выяснилось, причина была в недостаточной для декодирования мощности процессора. Кодек VP70 платный, но для персонального (домашнего) использования существует отдельная бесплатная лицензия. Приятно, что в On2 не пошли по пути DivX. Все представленные в кодеке настройки доступны в полном объеме. Если что и скрыли от нас, то мы об этом не знаем, а потому и локти не кусаем.

. Пропустив рекламную закладку On2, переходим к закладке General (рис. 11). Большинство представленных настроек нам знакомы по описаниям настроек других кодеков. Хотя количество режимов сжатия (Mode) здесь целых шесть, можно заметить, что на самом деле различных режимов по-прежнему три, дополнительные три режима отличаются качеством. Как можно заметить, в настройках можно задать только средний битрейт, для вычисления которого нету встроенного калькулятора. Это не беда, ведь требуемый битрейт мы уже умеем вычислять, а если не умеем, то на помощь придут встроенные калькуляторы других кодеков. Опция Encode speed задает баланс между скоростью кодирования и качеством. Опция Sharpness включает довольно качественный фильтр увеличения резкости, похожий на MSU Sharpness. Следует помнить, что высокая четкость изображения предъявляет повышенные требования к битрейту. Опция End usage включает кодирование с постоянным или переменным битрейтом в зависимости от того, как затем будет воспроизводиться видеофайл. Фильтр Noise Reduction (шумоподавитель) не так хорош, как Sharpness, так что лучше не увлекаться им. Material, то есть источник, может быть как чересстрочным, так и прогрессивным. Для "компьютерного" видео смысла эта опция не имеет. Опция Max Frames Btw Keys задает максимальный интервал между ключевыми кадрами. Непонятно, зачем вынесена опция Auto keyframe, но лучше ее не отключать.

. На закладке Advanced (рис. 12) также много знакомых параметров. Опция Adjust quantizer позволяет явно задать максимальный и минимальный квантизеры. Повторюсь, что чем выше значение quantizer, тем хуже качество. Опция Undershoot определяет процент битрейта, который будет потрачен на кодирование видео. Оставшийся резерв будет задействован для сложных сцен. Опция Temporal resampling не может быть совместима с форматом AVI ввиду того, что она разрешает кодеку понижать частоту кадров, чтобы "втиснуться" в заданный битрейт. Если для AVI она и реализована, то она аналогична опции Frame drop ratio кодека XviD. Опция Spatial resampling позволяет кодеку понижать разрешение кадра, если он содержит мало полезной информации. Группа опций Streaming parameters предназначена для видео с постоянным битрейтом, которое, как мы узнали из предыдущей закладки, предназначено для вещания по сети. Peak bitrate задает кратковременное пиковое значение битрейта. Prebuffer и Optimal buffer — параметры буферизации при начальной загрузке и проигрывании проигрывателем. Значение Max buffer — максимальный размер буфера при проигрывании видео проигрывателем. Оставшаяся группа опций Two pass section datarate предназначена для двухэтапного сжатия. Опция Bitrate variability определяет колебания битрейта относительно средней величины (в процентах). Min/Max section — дополнительные опции, которые позволяют избавиться от "симметричности" предыдущей опции, то есть задают нижнюю и верхнюю границы изменения битрейта. Как минимум одна из трех этих опций всегда будет лишней.

. На закладке Settings можно сохранять наиболее удачные наборы настроек для их быстрого вызова. Также на этой странице задается имя файла статистики и действие над ним после сжатия видео (удалять или нет).

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

Вероятно, не будет лишней приведенная ниже информация. Мало кто будет спорить, что Doom9.org является одним из самых авторитетных ресурсов по видеообработке. На данном сайте можно найти результаты оценки и тестирования различных кодеков. По итогам 2005 года x264 был признан лучшим кодеком для сжатия видео. Ateme (Nero) H.264, XviD, DivX заняли места соответственно со второго по четвертое. Другой не менее авторитетный ресурс compression.ru выдал свою версию этой четверки (по результатам субъективного тестирования). И на первом месте опять оказался x264, на втором — DivX. XviD по результатам тестирования оказался последним. В заключение хотелось бы добавить личные впечатления от работы с этими кодеками. Из всех перечисленных я предпочитаю использовать х264. Если сравнивать его с другими кодеками, то визуальное качество видеофрагмента (оценивалось, понятное дело, на глаз), сжатого x264, выше, чем такого же, сжатого другими кодеками. Кроме того, x264, как мне показалось, очень хорошо подходит для сжатия именно любительских записей. А что выбрать вам? Выберите DivX, причем лучше версии 5.1.1 или 5.0.5, если хотите, чтобы ваше видео гарантированно просматривалось на старых DivX-проигрывателях. Выберите XviD, если хотите, чтобы ваше видео было более качественным, и его могли смотреть на компьютере "неопытные" пользователи, которые даже сами кодеки не устанавливают. Если вы с оптимизмом смотрите в будущее и не боитесь устанавливать отдельно H.264-декодер, то ваш выбор — x264. Ну, а VP70 или любой другой вы можете выбрать, если вас не устроил ни один из вышеперечисленных кодеков.

Ссылки:
XviD (stable 1.1.0, unstable 1.2.4): сайт (бесплатный, автор XviD team).
VP70 (7.0.10.0): сайт (бесплатный для персонального использования, автор On2 Technologies)

Maxe Erte the Mad, maxe.erte@gmail.com


Компьютерная газета. Статья была опубликована в номере 34 за 2006 год в рубрике soft

©1997-2024 Компьютерная газета