[an error occurred while processing this directive] [an error occurred while processing this directive]
ENGLISH VERSION HERE!

Introduction to Video Codecs Comparison

MSU Graphics & Media Lab (Video Group)
[an error occurred while processing this directive]

Введение в сравнение кодеков :)

[an error occurred while processing this directive]

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

  1. Любой кодек дает разное качество по кадрам одного и того же фильма.
  2. Разные кодеки "затачиваются" под разные типы фильмов.
  3. Качество сжатия конкретного фильма может сильно зависеть от параметров кодирования.
Подробнее про каждый из пунктов:

[an error occurred while processing this directive]

1. Любой кодек дает разное качество по кадрам одного и того же фильма

[an error occurred while processing this directive] Это связано со многими факторами. Во-первых, в кодеке работает такой механизм как управление битрейтом, которое дает колебания качества даже у хороших кодеков. Во-вторых, сам пользователь выбирает разные стратегии битрейта, и в случае выбора CBR (или постоянный битрейт) на медленных сценах качество будет высоким, а на быстрых - низким. В-третьих, у кодеков есть т.н. ключевые кадры, качество которых обычно изменяется отдельно, и отличается от качества остальных кадров. В-четвертых, на качество влияет префильтрация (которая есть у всех современных кодеков)... В-пятых... В-шестых... В-седьмых... :)

Это означает, что на любом достаточно длинном фильме (а средний фильм, это 150000-200000 кадров) можно подобрать как достаточно хорошие, так и достаточно плохие кадры. Особенно если использовалось однопроходное CBR сжатие на достаточно динамичном фильме.

Т.е. имея один длинный фильм, кодеки А и Б (которые примерно равны по качеству), и несложные средства автоматизации сравнения качества (или много религиозной преданности своему кодеку :), можно легко и с примерами доказать и что А заметно лучше Б ("посмотрите на эти кадры!"), и что Б заметно лучше А ("посмотрите на эти (другие) кадры!"). :) Что "с успехом" и проделывается достаточно массово. Как в пресс-релизах (святое дело!), так и на сайтах посвященных обработке видео. [an error occurred while processing this directive]


На графике приведено качество в метрике PSNR (чем выше, тем лучше качество).
Если привести в качестве сравнения кадры "с пиками", то VP будет лучше DivX, иначе - наоборот.
[an error occurred while processing this directive]

[an error occurred while processing this directive]

2. Разные кодеки "затачиваются" под разные типы фильмов

[an error occurred while processing this directive] Многие знают, что в свое время существовали DivX 4.1 LowMotion & DivX 4.1 FastMotion. При том, что они проигрывали фильмы одинаково, их внутренние параметры были "заточены" у одного на слабое движение, а у второго - на сильное. В результате они с заметно разным качеством жали фильмы. Заметьте еще раз - ФОРМАТ, в который они жали, был один! А сжатие в него осуществлялось по-разному! В результате при одинаковом размере файлов их качество получалось разным. Аналогичная "заточенность" под "свой" тип данных характерна абсолютно для всех кодеков. Кто-то лучше жмет высокие битрейты. Кто-то - наоборот низкие. Кто-то затачивается под сильное движение, кто-то под слабое. И даже так - кто-то затачивается под мультфильмы, а кто-то под реальное видео. Кто-то под "шумные" фильмы, кто-то под "чистые" и т.д. Имея исходные тексты кодека, можно не меняя его формат, т.е. не изменяя декомпрессор, заточить его практически под любой тип фильмов. И этим с успехом пользуются на практике. Это означает, что имея кодеки А и Б (примерно равного качества), можно легко подобрать фильмы, на которых А будет заметно лучше Б, и на которых Б будет заметно лучше А. При этом забавно, что формально, фильм может быть и один, просто DVD копия и "тряпичная" пиратская копия, снятая с экрана в кинотеатре, могут дать заметно разный результат на двух кодеках. Т.е. фильм будет "один", но "лучшие" (в мире) кодеки будут различаться. :) [an error occurred while processing this directive]

Исходный кадр
Исходный
Divx 3.1
Divx 3.1
Divx 5.1
Divx 5.1
Межкадровая разница показывает, насколько сильно отличаются кадры. Черный цвет свидетельствует о том, что разницы нет; синий, зеленый и красный по возрастающей показывают различия имеющиеся в изображениях. Если привести эти кадры в качестве сравнения, то Divx 3.1 будет лучше Divx 5.1.
[an error occurred while processing this directive]

[an error occurred while processing this directive]

3. Качество сжатия конкретного фильма может сильно зависеть от параметров кодирования

[an error occurred while processing this directive] Большинство об этом не задумывается (должны же были авторы кодеков ВСЕ предусмотреть! :), но у кодеков как правило есть достаточно много параметров, позволяющих при том же размере файла заметно (а то и кардинально) изменить качество. В первую очередь это параметры стратегии битрейта, особенно режимы "quality-based" & "bitrate-based". Потом параметры префильтрации. В частности deinterlacing, ибо встречаются фильмы, которые сжимали в череcстрочной развертке в MPEG-4 (и, видимо, удивлялись слабому качеству :), denoising (подавление шумов), deflicking (подавление мерцания) и т.д. Существуют параметры управления частотой ключевых кадров, маской использования B-frames, управление зависимости префильтра от фильма и т.д. Это означает, что имея кодеки А и Б (примерно равного качества), можно легко установить один кодек в режим Maximum Perfomance (все ручки сдвинуть до предела в сторону скорости сжатия), а другой в режим 2-pass Maximum Quality (все ручки до предела в сторону максимального качества), можно получить 2 фильма одного размера, но существенно разного качества. Можно даже эти фильмы на сайт выложить и предложить убедиться! :) Что с успехом многие компании и делают. При этом душераздирающие подробности того, что один кодек работал в 10 раз меньше другого предпочитают оставлять за кадром. Зачем людям (тем более журналистам) знать лишнее? :) При этом исходный несжатый файл никто не кладет, обосновывая это его большим размером. А почему не кладут параметры сжатия - вы теперь знаете. [an error occurred while processing this directive]

исходный кадр
В этом кодеке из-за ошибки в rate control на одном из битрейтов резко падает качество (да, ошибки в кодеках тоже бывают :). Для этого кодека данный битрейт будет весьма неудачным параметром.
[an error occurred while processing this directive] На самом деле существуют и другие, более тонкие способы получать как реальное преимущество, так и "преимущество". (Например, не существует методик, определяющих, насколько пропуск кадров критичен для восприятия и т.д.) Но эти - основные. Итак! Если хорошо вникнуть в методы "надувательства" при сравнении 2 кодеков, то становится понятно, что для корректного сравнения необходимо достаточно глобальное тестирование. Т.е. как минимум нужно сравнивать разные по характеру фильмы с разными битрейтами, причем с использованием интегральных (средних) характеристик качества по всему фильму. Успешного подробного сравнения!

Связаться с нами можно по адресу: 

Полный список сравнений видео кодеков

Сравнения видео кодеков в МГУ:

[an error occurred while processing this directive]

Другие материалы

[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]