Pull to refresh

Сравнение кодеков libtheora и x264

Reading time 5 min
Views 8.8K
После того, как Youtube и Vimeo представили свои тестовые страницы в HTML5, вновь пошла волна разговоров, о том, что же лучше: H.264 или Ogg Theora.

Я, конечно, за свободный веб. Но выводы о том, что Theora превосходит H.264 по качеству, сделанные многими людьми по результатам двух сомнительных сравнений (раз и два) весьма поспешны.
Медведю плохо

В первом сравнении вообще не представлено ни тестового видео, ни каких-либо настроек кодеков. Во втором сказано, что для H.264-кодека взят заведомо отстойный пресет с Youtube, а настройки Теоры умалчиваются.

Так я решил сам проверить, что есть Ogg Theora и на что этот кодек способен.

Сравнение форматов


Первое, на что я обратил внимание, это список возможностей Ogg Theora. Для сравнения список возможностей H.264

Что смутило:
  • Минимальный размер блока 8x8 (в H.264 минимальный — 4x4, что позволяет лучше сохранять мелкие детали)
  • Отсутствие арифметического кодирования (которое позволяет на халяву наиграть процентов 15)
  • Полупиксельная точность компенсации движения (четвертьпиксельная в H.264)
  • Отсутствие b-кадров

Это если только сравнивать описание возможностей разных форматов.
Стоит отметить, что feature list H.264 намного длиннее. Так что мне показалось удивительным, что заведомо менее продвинутый кодек выигрывает сравнения.

Версии кодеков


Бинарники Теоры на сайте не представлены, а собрать из исходников у меня не получилось =( Нашёл билды ffmpeg2theora. Версия Теоры 1.1.0 (libtheora 1.1 20090822 (Thusnelda)), хотя на xiph.org лежит версия 1.1.1. Но для последней версии заявлены только мелкие фиксы, поэтому, думаю, что ничего страшного. Итак, встречайте, в синем углу ринга ffmpeg2theora 0.25.

Для сравнения я решил взять кодек x264. Довольно продвинутый представитель семейства H.264-кодеков с большим количеством настроек и хорошей поддержкой сообщества. С открытыми исходниками, к тому же. По результатам последнего сравнения от MSU Videogroup он занял второе место, совсем немного проиграв лидеру. Итак, в красном углу ринга x264 r1400.

Для декодирования использовал плагин к AviSynth FFmpegSource2 версии 2.12.

Методика сравнения


Для сравнения взял четыре видеопоследовательности с разрешением по ширине 640 пикселей. Кодировал в два прохода (так намного проще попадать в размер) с битрейтом 500 kbps. Настройки Теоры были выставлены на максимальное качество и наиболее гибкий rate control. Для x264 я взял два пресета: первый — аналогичный возможностям Теоры (полупиксельные сдвиги, нет b-кадров, размер блоков 8x8 и т.д.), второй — обычный такой пресет x264 со всеми включёнными фичами. Качество измерял метриками PSNR и SSIM c помощью MSU Video Quality Measurement Tool.
Время кодирования я не оценивал, так как выравнивать результаты ещё и по времени — большая заморочка. И скорее всего x264 получил бы заметное преимущество в скорости за счёт ассемблерных оптимизаций, так как это более зрелый проект.

Пресеты



Theora:
--soft-target --two-pass --optimize --speedlevel 0 --keyint 250

x264 analogue:
--bframes 0 --no-cabac --partitions i8x8,p8x8 --me umh --no-mbtree --no-psy --no-fast-pskip --no-dct-decimate --subme 1

x264 normal:
--bframes 4 --b-pyramid normal --partitions all --me umh --no-psy --trellis 2 --no-fast-pskip --no-dct-decimate --subme 10 --b-adapt 2 --direct auto

В списке возможностей Теоры заявлено использование нескольких ссылочных (референсных) кадров, но эта фича в настройки никак не вынесена. И поскольку использование нескольких ссылочных кадров Теорой я никак проконтролировать не могу, я разрешил x264 ни в чём себе не отказывать и использовать дефолтное ref=3.

Последовательности


  1. Battle
    Небольшой кусок из второго Терминатора, где постоянно что-то происходит, стреляет, взрывается. Очень динамичное видео.
  2. Football
    Небольшой кусок из футбольной трансляции. Типичный use-case, кстати.
  3. Shuttle start
    Запуск шаттла, что следует из названия. Статичное видео.
  4. Toys and calendar
    Видео с плавным движением и большим количеством мелких деталей.


Результаты


Для начала графики по метрикам PSNR и SSIM. Вообще, SSIM появилась позже и считается более продвинутой. Также, насколько мне известно, результаты сравнения с использованием SSIM обычно ближе к результатам субъективного сравнения. Но PSNR на всякий случай тоже померял.

Сравнение по SSIM
Сравнение по PSNR

Как видим, Theora безнадёжно сливает обычному пресету x264. Относительно пресета x264 с урезанными настройками Теоре тоже можно засчитать поражение. Чуда не произошло.

Теперь немного пройдусь по последовательностям.

Battle


Тут и PSNR Теоре подыграл, и вообще отставание небольшое. Отмечу, что по моему восприятию результата, битрейта не хватило даже обычному пресету x264 — слишком динамичное видео.
Скриншоты пары кадров для сравнения.

Source, battle, frame 389
Theora, battle, frame 389
x264 analogue, battle, frame 389
x264 normal, battle, frame 389

Пример, где Теора превосходит x264
Source, battle, frame 444
Theora, battle, frame 444
x264 analogue, battle, frame 444
x264 normal, battle, frame 444

Football


Футбольное поле у Теоры получилось какое-то неровное. На результат x264 смотреть намного приятнее.
Source, football, frame 361
Theora, football, frame 361
x264 analogue, football, frame 361
x264 normal, football, frame 361

Shuttle start


С этим видео оба кодека справились одинаково хорошо. Но в среднем x264 чуть-чуть вытянул в деталях.
Source, shuttle_start, frame 379
Theora, shuttle_start, frame 379
x264 analogue, shuttle_start, frame 379
x264 normal, shuttle_start, frame 379

Toys and calendar


Вот здесь у Теоры полный провал. Урезанный пресет x264 аккуратно замыливает высокие частоты, и в целом картинка смотрибельная. У Теоры же местами жуткая блочность и местами снос деталей. А обычному пресету x264 вполне хватило битрейта, даже узоры на обоях остались.
Source, toys_and_calendar, frame 77
Theora, toys_and_calendar, frame 77
x264 analogue, toys_and_calendar, frame 77
x264 normal, toys_and_calendar, frame 77

Проверка отклонения битрейта


Чистая формальность, чтобы убедиться, что кодеки попадают в битрейт, указанный в настройках. Отклонение до 5% считается нормальным, здесь все уложились.
График отклонения битрейта

В конце статьи есть ссылки на результаты кодирования. Некоторые типы артефактов сильно заметны на картинках, но не сильно заметны на видео. А некоторые наоборот. Так что если кому интересно, можете оценить.

Соотношение размеров при одинаковом качестве


Всё-таки сложно оценить практическую пользу от того, что у одного видео попугаев на сколько-то больше, чем у другого. Так что ещё я решил проверить, в какой размер может уложить видео x264 при том же визуальном качестве, что и у Theora. Пресет Theora тот же, для x264 — тот, который x264 normal. Для сравнения использовал SSIM. Для всех последовательностей SSIM у x264 чуть выше, но приближен максимально, насколько мне это удалось.
Вот график битрейтов получившихся файлов:
График сравнения размеров при одинаковом SSIM
Файлы различаются в размере в 2-4 раза.

Как улучшить результаты x264


Возможностей тюнинга у x264 просто уйма. Что я не могу сказать об Ogg Theora. Так что, если не публиковать настроек кодеков, можно получать разные результаты.
Как можно было бы при желании подыграть x264:
  • Увеличить число ссылочных кадров
  • Увеличить число последовательных b-кадров
  • Увеличить максимальный радиус оценки движения
  • Использовать опции --tune ssim и --tune psnr, которые позволяют улучшить показатели по одной метрике, несколько ухудшив их по другой (в первом сравнении от разработчиков Theora был только PSNR)
  • Включить и настроить психовизуальные оптимизации, если бы сравнение было субъективным
  • Заняться подгонкой параметров устранения блочности
  • Использовать другие более хитрые настройки, использующие особенности тестового видео


Как ухудшить результаты x264


В пресете x264 analogue и так отключено много чего хорошего и полезного. Но если бы мне очень хотелось, чтобы в моём сравнении Теора победила, что ещё я мог бы сделать:
  • Отключить использование нескольких ссылочных кадров
  • Оставить включённые по дефолту психовизуальные оптимизации, которые просаживают и SSIM, и PSNR
  • Выбрать менее качественный алгоритм оценки движения
  • Оставить возможность использования блоков только размером 16x16 пикселей
  • Использовать не по назначению опции адаптивного квантования для просаживания одной из метрик
  • Использовать какие-нибудь неадекватные настройки


Подводя итоги


H.264 — более эффективный, чем Ogg Theora, формат по показателю качество/размер. Также он куда более гибкий, позволяет значительно варьировать параметры в зависимости от поставленной задачи.

И не стоит слепо верить сравнениям, в которых не приведены настройки кодеков. Слишком много возможностей для манёвра.

Ссылки на видео


Результаты кодирования (25 МБ)
Исходное видео (365 МБ) — весит так много, потому что закодировано lossless-кодеком huffyuv.
Tags:
Hubs:
+264
Comments 247
Comments Comments 247

Articles