Месяц назад Google открыл спецификации формата VP8, который должен стать основным форматом видео в вебе. VP8 свободен от патентов в отличие от H.264, при этом по заявлениям разработчиков должен превзойти конкурента по качеству. На сайте компании On2 уже давно висит многообещающий график. Когда кодек появился в открытом доступе, мне стало интересно, выполнили ли они обещание.
Те сравнения, которые появились в сети после релиза, были достаточно поверхностны. Jason Garrett-Glaser, разработчик x264, также готовит своё субъективное сравнение большого количества кодеков, где будет представлен и VP8, но он его ещё пока не опубликовал.

Так я взялся проделать своё небольшое объективное сравнение.
Готовить сравнение я начал ещё на той же неделе, на которой был релиз VP8, поэтому все кодеры примерно месячной давности.
Референсный кодер, версия от 18 мая 2010 года, собирал в VS2008 в конфигурации Release.
Представителем семейства H.264 будет кодек x264 версии r1602. Думаю, многие о нём уже слышали: он бесплатен, широко доступен и является одним из передовых. Поскольку VP8 заявлен как веб-оптимизированный кодек, то разумно сравнивать его с Baseline-профайлом x264. Но я также измерил данные по High-профайлу x264, чтобы составить полную картину.
Основные отличия baseline-профайла заключаются в отсутствии b-кадров и арифметического кодирования. B-кадров у VP8 тоже нет, а вот арифметическое кодирование есть. Более подробно про профайлы H.264 можно посмотреть в Википедии.
Интересно посмотреть, сколько мы наиграли относительно другого полностью открытого кодека. Так что в сравнении участвует новый билд Ogg Theora. Сейчас идёт разработка новой версии кодера, которую назвали Ptalarbvorm, и в сети как раз появилась демо. Билд версии ptalarbvorm-svn17230. MediaInfo его распознаёт как libtheora 1.1+ 20100314 (Ptalarbvorm).
Для декодирования результатов Теоры и x264 я использовал AviSynth-плагин FFMpegSource2 версии 2-2.13. Для декодирования VP8 — референсный декодер.
У всех кодеков установлен интервал между I-кадрами равный 250. Настройки выставлены под более гибкий rate control. Для x264 количество референсных кадров поставил три, так как больше не поддерживается конкурентами. VP8 настроен в соответствии с рекомендациями c сайта webmproject.org.
x264 High Profile:
x264 Baseline Profile:
VP8:
libtheora:
Для сравнения я взял четыре видеопоследовательности, две из них в SD и две в HD.

640x352, 250 кадров
Плавное движение, много деталей и сложные текстуры. Это видео мне понравилось в предыдущем сравнении, решил использовать его и в этом.

704x480, 926 кадров
Фрагмент мультфильма Big buck bunny, трёхмерная анимация. Это видео я чаще всего встречал на демках разных открытых кодеков и не мог пройти мимо =) Исходник анаморфный, то есть пропроции слегка искажены.

1280x544, 586 кадров
Фрагмент из фильма Терминатор. Очень динамичное видео, много движения, частые смены сцен.

1280x720, 500 кадров
Видео с плавным движением. Большое количество деталей, но есть равномерная область (небо). Также есть небольшая зернистость.
Вместо замера на одном битрейте, как в прошлый раз, сейчас я решил сделать несколько замеров на разных битрейтах. И данные по всем замерам можно представить на одном графике в виде ломаной. Диапазон изменения битрейта я подбирал за несколько проб, исходя из визуального качества результатов.
Кодирование проводил в два прохода с заданным битрейтом. Битрейт, естественно, переменный. Quality-based режима у VP8 нет, если что.
Для оценки качества использовал метрику SSIM. Как показывает практика, она ближе к результатам визуального сравнения, чем PSNR. Для измерения SSIM использовал MSU Video Quality Measurement Tool.
Кстати, у x264 есть параметр --tune ssim, который позволяет слегка улучшить показатель SSIM, просаживая при этом PSNR. Не включил этот параметр, так как я изначально хотел считать обе метрики. Но не стал, потому что объём работы удваивается, а полезность малая — результаты обычно очень похожи.
Отклонение битрейта в этот раз учтено за счёт того, что точки на график наносились в соответствии с реальным показанным битрейтом. На некоторых графиках можно заметить, что точки находятся не точно на отметке.
VP8 оказался между двумя профайлами x264, а Теора сильно от них отстала. Чтобы можно было разглядеть на графиках разницу в результатах x264 и VP8, пришлось от Теоры оставить только два-три замера на самых высоких битрейтах.
Скриншоты к результатам даю отдельными ссылками, так как куча картинок только замусорит статью. Да и рассматривать их, переключаясь между табами, всё равно удобнее.

Здесь результаты x264 и VP8 визуально отличаются незначительно. VP8 лучше сохранил текстуры, чем x264 Baseline Profile, а x264 High Profile это удалось ещё чуть лучше. У Теоры картинка сильно размыта.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP

Здесь визуально VP8 оказался ненамного лучше, чем x264 BP. У них на разных сценах по-разному замылена картинка. По SSIM VP8 оказался всё-таки выше. x264 HP заметно лучше. Теора заметно хуже.
Пример типичной ситуации:
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Пример сцены, где хорошо заметен отрыв VP8 от x264 BP.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Ещё у VP8 бывают проблемы с распределением битрейта по видео (хотя и двухпроходное кодирование). Например вот, сама сцена статичная, только кролик двинулся, за что очень сильно пострадал. Тут даже Теора выглядит лучше. Такие штуки встречаются в порядке исключения, но встречаются.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP

Несмотря на более высокие показатели SSIM у всех кодеков, результаты на этом видео визуально хуже, чем на других. В основном у VP8 картинка менее замыленная, чем у x264 BP.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
И вот ещё пример, когда VP8 сильно испоганил сцену.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP

На этом видео визуально отличия еле заметны. Везде смыта зернистость, замылена черепица на крышах. Основные отличия в том, насколько грубо/точно переданы мелкие детали. Ну и Теора всё размыла.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Цифры и картинки — это интересно и занимательно. Но есть ещё чисто практический вопрос: соотношение размер/качество. Есть простой способ его примерно оценить: пересечь графики результатов горизонтальной линией, фиксирующей SSIM, и посмотреть битрейт в точках пересечения. Да, это только приблизительная оценка, но она достаточно информативна. Картину происходящего она отражает, а на других видео того же типа результаты всё равно будут слегка отличаться.
В качестве уровня SSIM на каждом графике я взял самый высокий результат x264 BP. За 100% на графике относительного битрейта принял результат VP8.

По графикам видно, что битрейт (и, как следствие, размер файла) у x264 BP больше, чем у VP8, на 12-39 процентов. При этом на «настоящем» видео со сменами сцен x264 BP проиграл меньше. Выигрыш x264 HP относительно VP8 составил от 16 до 33 процентов.
Замечу ещё, что здесь счёт идё�� на проценты, а не на разы, как было в случае с Теорой.
Привожу время кодирования всех последовательностей, на которых проходило тестирование.
x264 High Profile: 20 минут 12 секунд
x264 Baseline Profile: 10 минут 21 секунда
VP8: 83 минуты 59 секунд
Theora: 21 минута 59 секунд
Конфигурация: Intel Core2Duo T6670 2.2 GHz, 3 GB RAM
Тут VP8 получил огромную фору. Я не стал его подгонять под остальные, так как это ещё альфа-версия. Правда, кодер уже был оптимизирован, в том числе и за счёт SIMD-инструкций.
Отрыв можно было компенсировать за счёт увеличения у x264 параметров --ref, --bframes, --me-range и --subme. Тем самым слегка улучшить качество. Но я оставил те настройки, которыми обычно пользуюсь, из практических соображений. Заодно получил на будущее примерный ориентир для VP8 по времени.
x264 работал в два потока, Theora умеет только в один, VP8 работал тоже в одном потоке, так как разработчики рекомендуют
Как достаточно корректно измерить скорость декодирования, я не знаю. По-хорошему, нужно тестировать несколько разных декодеров на нескольких аппаратных конфигурациях. В том числе и на мобильных устройствах. А это отдельная большая работа, для которой ещё и технические ресурсы нужны. Возможно такие замеры появятся после того, как VP8 получит более широкое распространение. А пока есть только данные разработчика x264, по которым VP8 заметно уступает. И его результатам я верю больше, чем обещаниям маркетологов On2 и Google.
Если рассматривать VP8 как кодек для веба, то он вполне удался. Качество результатов сравнимо с кодеками стандарта H.264, в плане лицензий и патентов всех устраивает, и благодаря Google он получит достаточно широкую поддержку. Youtube — отличная стартовая площадка. Chrome, Opera, Firefox — это приличная доля рынка браузеров. Плюс Adobe обещают к концу года добавить поддержку WebM в Flash, у которого инсталляционная база порядка 90%. И плюс ещё Chrome frame для пользователей IE. На мобильных устройствах поначалу тоже через Flash, потом будет и аппаратная поддержка. Непонятно, правда, чего ждать от Apple с их iPhone.
По технической части из этого сравнения видны проблемы у VP8 с rate control'ом. Испорченные сцены — следствие неправильного распределения битов по всему видео. Несмотря на то, что видео кодировалось в два прохода. И нужно заметно уменьшить время кодирования. Понятно, что это только альфа, кодек будет дорабатываться.
Насчёт патентной чистоты вопрос пока открыт. Видно будет через год-два, появятся ли претензии, и если появятся, то как они будут решены. И я не понимаю всеобщей паники вокруг royalty-free H.264 до 2016 года. Должны же MPEG-LA его продлить, зачем губить большую пользовательскую базу. Денег у компаний-разработчиков и так хватает — за счёт девайсов, которые они продают.
Кстати, VP8 вряд ли подвинет H.264 где-либо, кроме веба. В других сферах свобода от патентов не является решающим преимуществом, так что пользователи торрентов и медиаиндустрия вряд ли будут что-то менять. Хотя на torrents.ru были чудаки, которые предлагали начать клепать DVD-рипы Теорой, так как они считали, что по качеству она превосходит H.264. Также производители разных устройств для записи видео (видеокамеры, фотоаппараты, телефоны и пр.) вряд ли будут заморачиваться с новым форматом и, соответственно, аппаратной поддержкой кодирования VP8. Цифровое ТВ тоже вряд ли перейдёт на VP8, а то ведь придётся всем менять телевизоры (или STB), а телекомпаниям в придачу оборудование для кодирования (тоже вопрос аппаратной поддержки).
И хотя стандарт H.264 был принят в 2003 году, он продолжает развиваться. В 2007 и 2009 годах были приняты два расширения формата: Scalable Video Coding и Multiview Video Coding. Не уверен, что мы скоро увидим широкое использование первого, а вот второе вполне может в ближайшие годы пойти в массы, так как 3D-видео становится всё более распространённым. И здесь VP8 тоже оказывается в роли догоняющего.
Формат VP8 вполне подходит для веба. Он намного лучше Ogg Theora и сравним с H.264 по параметру размер/качество. Вопросы о патентной чистоте и скорости декодирования остаются пока открытыми. Получит ли формат распространение — это вопрос скорее коммерческого и политического успеха, нежели технического.
Выкладываю исходное видео и результаты кодирования.
Результат VP8 у меня без контейнера, raw stream. Если кто-то правильно смуксит это в матрёшку и поделится с людьми, будет здорово.
Результаты кодирования
Исходное видео
Те сравнения, которые появились в сети после релиза, были достаточно поверхностны. Jason Garrett-Glaser, разработчик x264, также готовит своё субъективное сравнение большого количества кодеков, где будет представлен и VP8, но он его ещё пока не опубликовал.

Так я взялся проделать своё небольшое объективное сравнение.
Готовить сравнение я начал ещё на той же неделе, на которой был релиз VP8, поэтому все кодеры примерно месячной давности.
Участники сравнения
VP8
Референсный кодер, версия от 18 мая 2010 года, собирал в VS2008 в конфигурации Release.
x264
Представителем семейства H.264 будет кодек x264 версии r1602. Думаю, многие о нём уже слышали: он бесплатен, широко доступен и является одним из передовых. Поскольку VP8 заявлен как веб-оптимизированный кодек, то разумно сравнивать его с Baseline-профайлом x264. Но я также измерил данные по High-профайлу x264, чтобы составить полную картину.
Основные отличия baseline-профайла заключаются в отсутствии b-кадров и арифметического кодирования. B-кадров у VP8 тоже нет, а вот арифметическое кодирование есть. Более подробно про профайлы H.264 можно посмотреть в Википедии.
libtheora
Интересно посмотреть, сколько мы наиграли относительно другого полностью открытого кодека. Так что в сравнении участвует новый билд Ogg Theora. Сейчас идёт разработка новой версии кодера, которую назвали Ptalarbvorm, и в сети как раз появилась демо. Билд версии ptalarbvorm-svn17230. MediaInfo его распознаёт как libtheora 1.1+ 20100314 (Ptalarbvorm).
Для декодирования результатов Теоры и x264 я использовал AviSynth-плагин FFMpegSource2 версии 2-2.13. Для декодирования VP8 — референсный декодер.
Пресеты кодеков
У всех кодеков установлен интервал между I-кадрами равный 250. Настройки выставлены под более гибкий rate control. Для x264 количество референсных кадров поставил три, так как больше не поддерживается конкурентами. VP8 настроен в соответствии с рекомендациями c сайта webmproject.org.
x264 High Profile:
--keyint 250 --bframes 4 --b-adapt 2 --b-pyramid normal --ref 3 --rc-lookahead 50 --no-psy --partitions all --8x8dct --direct auto --me umh --subme 8 --trellis 2 --no-fast-pskipx264 Baseline Profile:
--keyint 250 --bframes 0 --ref 3 --rc-lookahead 50 --no-psy --partitions all --direct auto --me umh --subme 8 --trellis 2 --no-fast-pskip --no-cabac --profile baselineVP8:
--good --end-usage=0 --undershoot-pct=100 -p 2 --kf-max-dist=250 --drop-frame=0 --resize-allowed=0 --static-thresh=0 --profile=0 --auto-alt-ref=1 --lag-in-frames=16libtheora:
--soft-target --two-pass -k 250 -z 0Видеопоследовательности
Для сравнения я взял четыре видеопоследовательности, две из них в SD и две в HD.
Toys and calendar

640x352, 250 кадров
Плавное движение, много деталей и сложные текстуры. Это видео мне понравилось в предыдущем сравнении, решил использовать его и в этом.
Big buck bunny

704x480, 926 кадров
Фрагмент мультфильма Big buck bunny, трёхмерная анимация. Это видео я чаще всего встречал на демках разных открытых кодеков и не мог пройти мимо =) Исходник анаморфный, то есть пропроции слегка искажены.
Battle

1280x544, 586 кадров
Фрагмент из фильма Терминатор. Очень динамичное видео, много движения, частые смены сцен.
Old town cross

1280x720, 500 кадров
Видео с плавным движением. Большое количество деталей, но есть равномерная область (небо). Также есть небольшая зернистость.
Методика сравнения
Вместо замера на одном битрейте, как в прошлый раз, сейчас я решил сделать несколько замеров на разных битрейтах. И данные по всем замерам можно представить на одном графике в виде ломаной. Диапазон изменения битрейта я подбирал за несколько проб, исходя из визуального качества результатов.
Кодирование проводил в два прохода с заданным битрейтом. Битрейт, естественно, переменный. Quality-based режима у VP8 нет, если что.
Для оценки качества использовал метрику SSIM. Как показывает практика, она ближе к результатам визуального сравнения, чем PSNR. Для измерения SSIM использовал MSU Video Quality Measurement Tool.
Кстати, у x264 есть параметр --tune ssim, который позволяет слегка улучшить показатель SSIM, просаживая при этом PSNR. Не включил этот параметр, так как я изначально хотел считать обе метрики. Но не стал, потому что объём работы удваивается, а полезность малая — результаты обычно очень похожи.
Отклонение битрейта в этот раз учтено за счёт того, что точки на график наносились в соответствии с реальным показанным битрейтом. На некоторых графиках можно заметить, что точки находятся не точно на отметке.
Результаты
VP8 оказался между двумя профайлами x264, а Теора сильно от них отстала. Чтобы можно было разглядеть на графиках разницу в результатах x264 и VP8, пришлось от Теоры оставить только два-три замера на самых высоких битрейтах.
Скриншоты к результатам даю отдельными ссылками, так как куча картинок только замусорит статью. Да и рассматривать их, переключаясь между табами, всё равно удобнее.
Toys and calendar

Здесь результаты x264 и VP8 визуально отличаются незначительно. VP8 лучше сохранил текстуры, чем x264 Baseline Profile, а x264 High Profile это удалось ещё чуть лучше. У Теоры картинка сильно размыта.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Big buck bunny

Здесь визуально VP8 оказался ненамного лучше, чем x264 BP. У них на разных сценах по-разному замылена картинка. По SSIM VP8 оказался всё-таки выше. x264 HP заметно лучше. Теора заметно хуже.
Пример типичной ситуации:
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Пример сцены, где хорошо заметен отрыв VP8 от x264 BP.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Ещё у VP8 бывают проблемы с распределением битрейта по видео (хотя и двухпроходное кодирование). Например вот, сама сцена статичная, только кролик двинулся, за что очень сильно пострадал. Тут даже Теора выглядит лучше. Такие штуки встречаются в порядке исключения, но встречаются.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Battle

Несмотря на более высокие показатели SSIM у всех кодеков, результаты на этом видео визуально хуже, чем на других. В основном у VP8 картинка менее замыленная, чем у x264 BP.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
И вот ещё пример, когда VP8 сильно испоганил сцену.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Old town cross

На этом видео визуально отличия еле заметны. Везде смыта зернистость, замылена черепица на крышах. Основные отличия в том, насколько грубо/точно переданы мелкие детали. Ну и Теора всё размыла.
Скриншоты: Исходник Theora VP8 x264 BP x264 HP
Относительный битрейт
Цифры и картинки — это интересно и занимательно. Но есть ещё чисто практический вопрос: соотношение размер/качество. Есть простой способ его примерно оценить: пересечь графики результатов горизонтальной линией, фиксирующей SSIM, и посмотреть битрейт в точках пересечения. Да, это только приблизительная оценка, но она достаточно информативна. Картину происходящего она отражает, а на других видео того же типа результаты всё равно будут слегка отличаться.
В качестве уровня SSIM на каждом графике я взял самый высокий результат x264 BP. За 100% на графике относительного битрейта принял результат VP8.

По графикам видно, что битрейт (и, как следствие, размер файла) у x264 BP больше, чем у VP8, на 12-39 процентов. При этом на «настоящем» видео со сменами сцен x264 BP проиграл меньше. Выигрыш x264 HP относительно VP8 составил от 16 до 33 процентов.
Замечу ещё, что здесь счёт идё�� на проценты, а не на разы, как было в случае с Теорой.
Скорость кодирования
Привожу время кодирования всех последовательностей, на которых проходило тестирование.
x264 High Profile: 20 минут 12 секунд
x264 Baseline Profile: 10 минут 21 секунда
VP8: 83 минуты 59 секунд
Theora: 21 минута 59 секунд
Конфигурация: Intel Core2Duo T6670 2.2 GHz, 3 GB RAM
Тут VP8 получил огромную фору. Я не стал его подгонять под остальные, так как это ещё альфа-версия. Правда, кодер уже был оптимизирован, в том числе и за счёт SIMD-инструкций.
Отрыв можно было компенсировать за счёт увеличения у x264 параметров --ref, --bframes, --me-range и --subme. Тем самым слегка улучшить качество. Но я оставил те настройки, которыми обычно пользуюсь, из практических соображений. Заодно получил на будущее примерный ориентир для VP8 по времени.
x264 работал в два потока, Theora умеет только в один, VP8 работал тоже в одном потоке, так как разработчики рекомендуют
число потоков = (число ядер CPU – 1). Но даже при идеальной многопоточности VP8 получился бы в четыре раза медленнее x264 BP. Вы готовы ждать час вместо пятнадцати минут, или четыре дня вместо одного?Как достаточно корректно измерить скорость декодирования, я не знаю. По-хорошему, нужно тестировать несколько разных декодеров на нескольких аппаратных конфигурациях. В том числе и на мобильных устройствах. А это отдельная большая работа, для которой ещё и технические ресурсы нужны. Возможно такие замеры появятся после того, как VP8 получит более широкое распространение. А пока есть только данные разработчика x264, по которым VP8 заметно уступает. И его результатам я верю больше, чем обещаниям маркетологов On2 и Google.
Мысли вслух
Если рассматривать VP8 как кодек для веба, то он вполне удался. Качество результатов сравнимо с кодеками стандарта H.264, в плане лицензий и патентов всех устраивает, и благодаря Google он получит достаточно широкую поддержку. Youtube — отличная стартовая площадка. Chrome, Opera, Firefox — это приличная доля рынка браузеров. Плюс Adobe обещают к концу года добавить поддержку WebM в Flash, у которого инсталляционная база порядка 90%. И плюс ещё Chrome frame для пользователей IE. На мобильных устройствах поначалу тоже через Flash, потом будет и аппаратная поддержка. Непонятно, правда, чего ждать от Apple с их iPhone.
По технической части из этого сравнения видны проблемы у VP8 с rate control'ом. Испорченные сцены — следствие неправильного распределения битов по всему видео. Несмотря на то, что видео кодировалось в два прохода. И нужно заметно уменьшить время кодирования. Понятно, что это только альфа, кодек будет дорабатываться.
Насчёт патентной чистоты вопрос пока открыт. Видно будет через год-два, появятся ли претензии, и если появятся, то как они будут решены. И я не понимаю всеобщей паники вокруг royalty-free H.264 до 2016 года. Должны же MPEG-LA его продлить, зачем губить большую пользовательскую базу. Денег у компаний-разработчиков и так хватает — за счёт девайсов, которые они продают.
Кстати, VP8 вряд ли подвинет H.264 где-либо, кроме веба. В других сферах свобода от патентов не является решающим преимуществом, так что пользователи торрентов и медиаиндустрия вряд ли будут что-то менять. Хотя на torrents.ru были чудаки, которые предлагали начать клепать DVD-рипы Теорой, так как они считали, что по качеству она превосходит H.264. Также производители разных устройств для записи видео (видеокамеры, фотоаппараты, телефоны и пр.) вряд ли будут заморачиваться с новым форматом и, соответственно, аппаратной поддержкой кодирования VP8. Цифровое ТВ тоже вряд ли перейдёт на VP8, а то ведь придётся всем менять телевизоры (или STB), а телекомпаниям в придачу оборудование для кодирования (тоже вопрос аппаратной поддержки).
И хотя стандарт H.264 был принят в 2003 году, он продолжает развиваться. В 2007 и 2009 годах были приняты два расширения формата: Scalable Video Coding и Multiview Video Coding. Не уверен, что мы скоро увидим широкое использование первого, а вот второе вполне может в ближайшие годы пойти в массы, так как 3D-видео становится всё более распространённым. И здесь VP8 тоже оказывается в роли догоняющего.
Выводы
Формат VP8 вполне подходит для веба. Он намного лучше Ogg Theora и сравним с H.264 по параметру размер/качество. Вопросы о патентной чистоте и скорости декодирования остаются пока открытыми. Получит ли формат распространение — это вопрос скорее коммерческого и политического успеха, нежели технического.
Материалы
Выкладываю исходное видео и результаты кодирования.
Результат VP8 у меня без контейнера, raw stream. Если кто-то правильно смуксит это в матрёшку и поделится с людьми, будет здорово.
Результаты кодирования
Исходное видео