ENGLISH VERSION

Улучшение кодека x264


MSU Graphics & Media Lab (Video Group)

Руководитель: Дмитрий Ватолин
Реализация: Алексей Носков,
Александр Паршин,
Владимир Попов


Введение


x264 - бесплатный кодек стандарта MPEG4 AVC/H.264 с открытым кодом, создаваемый программистами всего мира. На сегодняшний день x264 является одним из лучших кодеков своего стандарта, что подтверждено различными сравнениями.


Описание улучшений


Для улучшения был выбран режим кодека ABR, в котором кодер стремится сжать фильм с наилучшим качеством при заданном среднем битрейте, не выходя за ограничения размера буфера.

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

Проведённый анализ показал, что выбранные значения по умолчанию в большей степени соответствуют высоким битрейтам. Как следствие, на низких битрейтах возникает необоснованное завышение качества первых кадров, что ведет, в свою очередь, к занижению качества последующих кадров и занижению результата в среднем по последовательности.

Рис 1. Покадровые значения метрики PSNR до и после модификации кодека x264. Последовательность "Matrix".

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

В измерениях варьировались два коэффициента:

  • start_qp - начальный коэффициент квантования. Используется для вычисления коэффициента квантования на первых кадрах, где статистика еще не накоплена. К сожалению, в кодеке отсутствует возможность задавать его для режима ABR из командной строки. Потому для удобства тестирования эта возможность была добавлена в кодек.
  • ipratio - модификатор коэффициента квантования I-фреймов. В процессе вычисления коэффициента квантования для I-фреймов используется результат собранной по P-фреймам статистики, деленный на коэффициент ipratio. Этот параметр может задаваться из командной строки, в виде: ipratio = <число>

В подборе участвовали последовательности из следующего набора:

  • bbc - стандартная тестовая последовательность
  • susi - стандартная тестовая последовательность
  • battle - отрывок из фильма «Терминатор-2»
  • matrix - отрывок из фильма «Матрица»

Каждая последовательность сжималась с битрейтами 100, 225, 460, 938, 1340, 2340 kbps. Для каждого битрейта коэффициенты менялись следующим образом: start_qp - в пределах от 24 до 48 с шагом 2, ipratio - от 0.50 до 1.50 с шагом 0.25, что позволило выбрать оптимальные значения параметров для каждого битрейта и каждой последовательности из тестового набора. Границы изменения и шаги были подобраны исходя из двух требований: с одной стороны они с достаточной точностью покрывают все возможные оптимальные значения, а с другой, количество измерений позволяет провести все их за разумное время.

Рис 2. Зависимость среднего значения PSNR от параметров «start_qp» и «ipratio»для последовательности «matrix», 938kbps.

Как можно видеть на Рис 2, качество сжатого фильма зависит более всего от начального коэффициента квантования, а варьирование модификатора для I-фреймов не вносит столь заметного изменения. Поэтому было решено внести изменения только в начальный коэффициент квантования.

Собранная статистика была аппроксимирована достаточно простой функцией, зависящей от заданного кодеку битрейта и вычисляемой каждый раз при инициализации кодека, что дало прирост качества сжатого фильма и уменьшение размера файла.

Для аппроксимации экспериментальной кривой было решено использовать степенную функцию вида

,

где a,b и c - неизвестные коэффициенты. Выбор коэффициентов проводился при помощи метода нелинейной оптимизации Левенберга-Маркара. После проведённой оптимизации функция приняла вид:

.


Результаты


После внесённых изменений улучшилась работа кодека на низких битрейтах. В качестве теста был использован ряд последовательностей, которые не участвовали в подборе параметров. Большинство из этих последовательностей демонстрируют, что модифицированная версия превосходит результаты исходной версии кодека на низких битрейтах и обеспечивает такое же качество на средних и высоких. Использовались исходные тексты кодека от 12 февраля 2006 года. Кодек запускался со следующими параметрами:

x264 --bitrate=<target_bitrate> --fps=<fps> --me=umh --merange=32 --subme=6 --ref=16
--analyse=all --direct=spatial --pbratio=1.5 --bframes=3 --weightb -o <output_file> <input_file> <width>x<height>

На следующих графиках показаны полученные результаты на двух примерах. Последовательность "Matrix" использовалась в тестовом наборе, в то время как последовательность "Flower" не была в него включена.

Рис 3. Улучшения кодека x264 на последовательности "Flower"

Рис 4. Улучшения кодека x264 на последовательности "Flower", относительный Y-PSNR.

Рис 5. Улучшения кодека x264 на последовательности "Flower", низкие битрейты.

Рис 6. Улучшения кодека x264 на последовательности "Matrix", относительный Y-PSNR.


Ссылки


Сравнения кодеков с участием x264:


Страницы кодека:


Download



E-mail



Other materials


Материалы по видео


Смотрите также материалы:
- По цветовым пространствам
- По JPEG
- По JPEG-2000