On2 VP6: описание возможностей кодека, настройки, рекомендации.


Рассматривая развитие современных методов сжатия видео, нельзя не отметить тот факт, что стремление стандартизовать методики сжатия не приводит к каким-то революционным шагам в этой области, а зачастую тормозит их развитие. Даже если сам стандарт когда-то задумывался с учетом того, что вычислительные мощности возрастут весьма сильно (как, например, MPEG-4), длительное время на его создание и развитие "убивает" все преимущества на корню: стандарт принят, но, увы он частично уже морально устарел. Поясню, опять же на примере MPEG-4: разрабатывался он в то время, когда декодирование его (о кодировании вообще помолчим) на персональном компьютере в реальном времени не представлялось возможным. Сейчас же, чтобы декодировать MPEG-4 и при этом не потреблять и 50% ресурсов PC, сможет практически каждый второй домашний компьютер. А пользователь весьма привередлив: пусть процессор будет загружен практически "под завязку", но соотношение качество/степень сжатия должно расти, по крайнем мере, до той поры, пока доступные и надежные сменные носители не станут больше по емкости и дешевле. И, учитывая, что быстродействие CPU растет быстрее, чем доступность высокоемких носителей, недовольство пользователя доступными системами сжатия остается:
Не так давно, сразу после выхода бета-версии Microsoft WMV9, сравнивая этот "закрытый" кодек с представителями открытого стандарта MPEG-4, я задумался: получается, что "закрытость" стандарта обеспечивает лучшее развитие, лучшее качество и т.д. - хотя бы из-за того, что не нужно оглядываться на ограничение стандарта, всегда ведь можно, разработав новый подход, выпустить новую версию продукта, которая в то же время будет поддерживать и декодирование старых версий. И с другой стороны: Бог с ней, с закрытостью, давайте возьмем тот же MPEG-4, увеличим число дискретных значений при квантовании, улучшим методику определения движения в кадре, применим ресэмплирование разрешения для незначащих кадров, а также возьмем лучший метод компрессии без потерь для сжатия глобальных таблиц и результирующих коэффициентов для кадров (самый банальный "примерный" подход: вместо быстрого, но мало жмущего ZIP'а, возьмем более медленный, но более эффективный RAR). Что это даст? При том же битрейте мы увеличим "передаваемость" исходной картинки на 10-35%. Это повлечет за собой значительное увеличение времени кодирования (до 3 раз) - но, пожалуй, это сильно никого не беспокоит, и довольно-таки поднимет планку минимального процессора для декодирования: до PIV-2000/AthlonXP-2000. Почему бы и нет?
Вряд ли разработчики в On2 Technologies читали мои мысли, т.к. VP6 был анонсирован еще в прошлом году. Однако, когда месяц назад VP6 был отдан в открытое некоммерческое использование, и я впервые протестировал его на нескольких любимых видеофрагментах, я удивился: при том же битрейте этот кодек выдавал значительно лучшее, на мой взгляд, качество. При попытке детально разобраться в причинах этого, я с удивлением обнаружил, что разработчики реализовали все те подходы, о которых я мечтал, за исключением wavelet-методик, плюс позволили пользователю самому настраивать ряд параметров, чему стоит только порадоваться (на данный момент, на мой взгляд, только xVid позволяет, как минимум, столь детально копаться в настройках кодирования). Почему? Неужели только потому, что им не нужно было оглядываться на существующие стандарты? (При всем том, что VP5 и VP6 были выбраны в качестве стандартных кодеков для нового стандарта EVD - Enhanced Versatile Disk, принятого в Китае, и позволяющие записывать на аналог нынешнего DVD фильм в HDTV- разрешении!)

Описание настроек кодека

При инсталляции кодек ставит два профиля - VP60 (simple profile) и VP61 (advanced profile). Разницы в настройках нет. Авторы кодека рекомендуют использовать VP60 для обычных и высоких битрейтов, а VP61 - для низких и очень низких битрейтов. От себя добавлю, что VP61 требует при кодировании и декодировании больше ресурсов, но способен дать немного лучшее качество кодирования.
Кодек позволяет работать с ним через VfW интерфейс. И, как водилось ранее, чтобы выставить желаемый битрейт придется воспользоваться свойством этого API, которое позволяет, не инициализируя окно настроек, форсировать битрейт и частоту ключевого кадра. Чтобы сделать это, например, из VirtualDub'а, необходимо в окне выбора кодека (меню Video/Compression), выставить желаемое значение:


Форсирование битрейта
Форсирование битрейта


Битрейт выставляет в килобайтах в секунду вместо привычных нам кБит/с, поэтому, желая выставить, скажем, 1600 кБит/с, делите на 8 - т.е. в нашем случае это будет 200.

Теперь разберем настройки самого кодека. Вначале я объясню значение каждой опции в настройках, затем приведу два варианта настроек для среднестатистического фильма: для начинающих и для любителей экспериментов.


Настройка VP6. Первая вкладка - General
Настройка VP6. Первая вкладка - General


Меню Mode:

Realtime/Live Encoding Может быть использован для кодирования в режиме реального времени, например при оцифровке. Я противник использования сильно жмущих кодеков при захвате, поэтому могу порекомендовать данный режим лишь для тестовых захватов и для захвата "на раз" (например, запись сериала для жены :) ).
Good Quality Fast Encoding. Среднее качество, достаточно высокая скорость кодирования. Не рекомендуется к использованию.
One Pass - Best Quality. Лучший по качеству однопроходный режим. Медленное кодирование.
Two Pass - First Pass. Первый проход двухпроходного кодирования, используется для сбора статистики о видеопотоке для последующего использования во втором проходе.
Two Pass - Second Pass. Второй проход двухпроходного кодирования. Имеет два режима Good Quality и Best Quality, второй, конечно же, имеет более высокое качество, но гораздо более медленный, поэтому если скорость кодирования для Вас критична, можно использовать первый, разница в качестве между двумя режимами не сильно заметна.

Выбор End Usage (Применение видео):
Stream From A Server (CBR) - Постоянный битрейт. Подходит для трансляции видео по сети.
Local File Playback (VBR) . Переменный битрейт. Именно этот режим и следует использовать для кодирования видеопотока с последующим проигрыванием на компьютере (или на будущих EVD-плеерах).

Выбор Material (Формат входящего потока):
Interlaced Fields - Чересстрочное видео. Забегая вперед, скажу, что VP6 - лучший, на мой взгляд, кодек, работающий в области низких битрейтов, по обработке чересстрочного видео. Результаты потрясают! Более того, декодер VP6 имеет встроенный механизм деинтерлейсинга, пусть и не такой мощный, как, например, адаптивный деинтерлейсинг у программного обеспечения ATI, но достаточно неплохой.
Progressive. Прогрессивное видео.
Noise Reduction (Шумоподавление) Можно выбрать значение от "0" (шумоподавление отключено) до "6" (максимальное шумоподавление). Включение опции не рекомендуется - с помощью фильтров к VirtualDub можно гораздо эффективнее снизить шумность видео, потеряв значительно меньше в качестве.
Auto Key Frame - при включенной опции кодек автоматически выбирает расположение ключевых кадров в потоке (с учетом опции Max Frames Btw Keys ). Обязательно включите эту опцию.
Max Frames Btw Keys - Наибольшая длина ключевого фрагмента (максимальное количество кадров между ключевыми кадрами). Величина зависит от видеопотока. Если затрудняетесь сами определить, выставьте 360 - вполне "золотая середина".


Выбор DataRate Control (Управление потоком данных):
Undershoot - В % от значения datarate, уже выставленного Вами, означает битрейт, который будет первоначально отведен на кодирование видео. Остатки пойдут прежде всего на глобальные и локальные таблицы данных, а также на особо сложные фрагменты видеопотока. Отмечу, что значение по умолчанию (90%) вполне подходяще. Еще одно важное замечание: VP6 не подходит для сжатия небольших видеороликов из-за того, что достаточно большой объем в финальном файле занимают глобальные данные, и чем меньше длительность фильма, тем больше будут занимать эти данные относительно самого видеопотока. Минимальная рекомендуемая мной длительность фильма для кодирования в VP6 составляет 10 минут, и чем больше, тем лучше!
Adjust Quantizer . Позволяет вручную определить диапазон коэффициентов квантования для процесса кодирования. Очень мощное средство управления качеством, однако Вы должны понимать, что делаете, по нескольким причинам:
1. Если Вы установите чересчур малые коэффициенты (напоминаю общее правило кодеков, использующих квантование при сжатии: чем меньше коэффициент, тем меньше потерь при сжатии, но и тем больше будет размер видеопотока на выходе), то, если при этих установках заказанный Вами битрейт не может быть достигнут (и другие опции для понижения битрейта не выставлены), кодек не будет увеличивать коэффициенты - он увеличит битрейт, что, на мой взгляд, абсолютно верно: если Вы не можете сами продумать диапазон коэффициентов, используйте автоматический режим (не выставляйте галочку)
2. Диапазон дискретных значений коэффициентов у VP6 значительно больше, чем в стандарте MPEG-4 (1 - 80), причем алгоритм использования матрицы квантования несколько иной. В сумме это дает большее качество кодирования: "квадратики" в финальном видео, сжатом с помощью VP6, Вы получите только при очень низком битрейте.
3. Следует понимать механизм использования квантования при кодировании и выбирать коэффициенты, исходя из этого, стремясь максимально задействовать битрейт. Так, для нижней границы значения лучше выбирать из ряда: 2, 4, 8, 12, 16, 24, 32, 40 и т.д, а для верхней - 3, 7, 11, 15, 23, 31, 39 и т.д. Т.е., к примеру, 4 - минимальный коэффициент, 47 - максимальный. Это совсем не означает, что "шаг вправо, шаг влево - растрел на месте" - совсем нет. Это оптимальные установки для диапазонов, при которых будет достигаться оптимальное заполнение глобальных данных.
Temporal Resampling - кодек будет форсированно понижать частоту кадров для того, чтобы втиснуться в заданный битрейт. С помощью значения Down Watermark Вы задаете условие уровня нехватки битрейта, при котором кодек начнет выбрасывать кадры. Я не рекомендую включать эту опцию за исключением кодирования при очень низких битрейтах (например, для наладонников) или кодирования очень статичных фильмов (мультфильмы, рендеренные фильмы-презентации и т.п.)
Spatial Resampling - немного более полезная опция. Позволяет кодеку уменьшить разрешение кадра, в котором мало информации. Условия включения данного механизма задаются при помощи значений Down Watermark и Up Watermark: первым Вы также задаете уровень нехватки битрейта, при котором кодек уменьшит разрешение кадра, вторым задаете условие выбора таких кадров. С помощью грамотного подбора значений можно добиться хорошего сжатия малозначимых кадров фильма, например, титров. Однако, и эта опция, и предыдущая не имеют пока нормальных средств управления, ожидается, что следующая версии кодека исправит ситуацию.

Выбор Streaming Parameters (Параметры для потокового видео, режим CBR):
Как правило, установки по умолчанию весьма неплохо работают при создании потоков для трансляции по сети.
Peak Bitrate - Максимальный битрейт, разрешенный для потока
Prebuffer - Длительность потока в секундах для предварительной загрузки плеером клиента при старте проигрывания - чтобы поддержать плавное проигрывание в случае плавающей скорости трансляции.
Optimal Buffer - Оптимальная длительность буфера, которую кодек должен поддерживать при проигрывании
Max Buffer - Максимальная величина для установки буфера загрузки

Выбор Two Pass Section Datarate (Установки для второго прохода двухпроходного режима:
Variability - условная величина, определяющая величину разброса битрейта. 0 - означает постоянный битрейт, 100 - позволяет кодеку распределять битрейт в любых отношениях для любых секций потока. Не рекомендую устанавливать ниже 70. Для относительно высоких битрейтов и большой длительности потока (более получаса) можно смело ставить 100.
Min Section - минимальный % от битрейта, который кодек выделит для сегмента. 40 - вполне нормальная величина, однако, если в фильме есть титры, статика, можно уменьшить эту величину. В принципе, устанавливая значение в 0, Вы отдаете контроль на откуп кодеку.
Max Section - максимальный % от битрейта, который кодек выделит для сегмента. Минимальное "нормальное" значение - 100%. Максимальное значение, формально, не ограничено, но 400 % - разумный потолок для 95% случаев.

Третья вкладка - сервисная. Вы можете загрузить предопределенные авторами настройки и сохранить собственные. Думаю, она не нуждается в описании.


Теперь попробуем вывести два подхода к кодированию с использованием VP6. Итак, Вы применили все фильтры, сделали ресайз, если это необходимо (я, как всегда, описываю работу с кодеком из VirtualDub'а, но, естественно, Вы можете работать с VP6 из любого приложения, совместимого с VfW API), остается только настроить компрессию видео.

Для начинающих Попробуйте разрешить для начала кодеку сделать все самому, если Вы с ним столкнулись в первый раз, даже если у Вас огромный опыт работы с видео. Просто так, для разнообразия - таким образом сразу увидите его сильные и слабые стороны. А если сомневаетесь в себе, то тем более пробуйте практически все установки оставить "на автомате".
Первый проход. Итак, выставляем желаемый битрейт, не забывая о том, что он выставляется для VP6 в килобайтах/с, далее переходим к настройкам самого кодека. Выбираем режим Two Pass - First Pass, выставляем переменный битрейт (Local File Playback (VBR)). В зависимости от того, какой у Вас поток - чересстрочный или прогрессивный, выставляете его в кодеке, шумоподавление (Noise Reduction), конечно же, отключаем (если есть необходимость очистить видео, воспользуйтесь соответствующими фильтрами и методиками). Включаем Auto Key Frame и выставляем максимальное число кадров между ключевыми в 360. Переходим на вкладку "Advanced" и там выставляем Undershoot в 90 и убираем все галочки с активных настроек. Жмем Ок - настройки первого прохода закончены. Вы можете сохранить файл, либо занести его в Job List.
Второй проход. Оставляем тот же битрейт, на первой вкладке выбираем Two Pass - Second Pass - Good Quality или Best Quality, в зависимости от того, каким временем Вы располагаете (учтите, что Best Quality может растянуться для Вас на сутки-двое, в зависимости от быстродействия Вашего компьютера). Далее, переходим на вторую вкладку, выставляем Variability в 100, Min Section - в 40, Max Section - в 400. Все, можно сохранять файл второго прохода, он и будет финальным файлом.

Продвинутый режим. Прежде всего, поэкспериментируйте с настройками коэффициентов квантования. Установка диапазонов зависит, прежде всего, от битрейта. Помните, что минимальный коэффициент, установленный в 2 для средних разрешений (512х384 и выше) предполагается для битрейтов 1600 кбит/с и выше. Поэтому, если Вы хотите использовать меньший битрейт, руководствуйтесь минимальным коэффициентом 4, а для очень низких битрейтов - 8 или 12. Для статичного видео лучше сузить диапазон коэффициентов, для динамичного - расширить. Для максимальных коэффициентов стоит руководствоваться правилом, которое я уже привел в описании настроек - на предыдущей странице, но помните, что это отнюдь не железное правило: если Вы выставили настройки по-другому, и Вам нравится - пользуйтесь Вашими настройками!
Temporal Resampling и Spatial Resampling воспользуйтесь при необходимости использовать очень маленькие битрейты: как показали опыты, VP6 способен неплохо закодировать видео 320х240 (для наладонника) с битрейтом 300 кбит/с, и он войдет на не самую большую карту флэш-памяти. Однако, еще раз повторюсь, пока нет четкого механизма управления этими режимами, так что положитесь на кодек, если будет получаться не очень хорошо - отключите их. Не бойтесь экспериментировать - выделите 10-15 минутный фрагмент Вашего видео, создайте Job List с несколькими вариантами настроек кодирования, и поставьте на ночь. Затем выберите уже самое лучшее, на Ваш взгляд, качество и воспользуетесь настройками уже для кодирования фильма в целом.
Также Вы можете поэкспериментировать с настройками второго прохода, выставив меньшее значение для Min Section и меняя значение Max Section.

В общем-то и все. Проведя сравнение нескольких кодеков (я было хотел опубликовать его в виде статьи, но появление новой версии кодека 3ivx отодвинуло публикацию, т.е. теперь необходимо сравнить и результаты кодирования с его участием), я пришел к выводу, что On2 VP6 на настоящее время (ноябрь 2003 г.) является лучшим форматом для видео в диапазоне битрейтов от 0 до 3000 кбит/с для 85% видеофильмов среди доступных кодеков. Не забываем также, что он бесплатен для персонального использования, а также тот факт, что скоро мы увидим его на EVD:
Да уж, опять мне вспоминается старое китайское проклятие - "чтоб ты жил в эпоху перемен".





DVD Russian VJ's Vol 2

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

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

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

подробнее

DVD Russian VJ's vol 1

russian vj  Вы когда-нибудь задумывались о том, что за странные и, в то же время завораживающие, картинки двигаются на экранах в клубе на уютной вечеринке или на многотысячном фестивале, на краю земли?

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

Кто следит за тем, чтобы ваши глаза впитывали музыку с экранов?

подробнее

Яндекс.Метрика Copyright by www.Malbred.com 2005