О компании Продукты Поддержка

Сравнение HEVC кодеков от МГУ. Как улучшить результаты

В октябре 2015 был выпущен очередной отчет сравнения кодеков в ВМиК МГУ, на этот раз туда вошло несколько кодеков формата HEVC.

Исходной точкой к исследованию стало то, что мы заметили разницу в пресетах в тестах для AVC и HEVC — для AVC использовался немодифицированный быстрый профиль с одним GOP, а для HEVC использовался модифицированный с несколькими GOP. При этом для единственного описанного в открытом отчете файла "Apple Tree" кодер x264 оказался лучше x265 при быстром перекодированим на графиках зависимости SSIM от битрейта без учета скорости кодирования. Сразу же возник вопрос: может, эти или еще какие-то другие очевидные опции способны изменить указанную картину.

 

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

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

О проекте

Задача кодирования видео при обработке мультимедиа, будь то передача, монтаж или редактирование, хранение, возникает постоянно как при разработке приложений и сервисов, так и при их настройке в момент использования. В силу большого количества популярных видеокодеков, даже зачастую одного типа, выбрать из них оптимальный, а затем задать правильные настройки, непросто. Вероятно, руководствуясь подобными соображениями, в лаборатории компьютерной графики и мультимедиа при факультете вычислительной математики и кибернетики (ВМиК) МГУ с 2000х ведется работа над проектом сравнения видеокодеков.

В октябре 2015 года был опубликован отчет сравнения кодеков, в котором участвуют некоторые кодеки формата HEVC, а так же несколько других, активно разрабатываемых в настоящее время. В качестве «эталонного» принят компрессор x264. Одним из интересных в отчете является компрессор x265, именно его изучением и займемся.
В качестве инструмента для анализа будем использовать SolveigMM Zond 265, анализатор файлов HEVC/H.265 и AVC/H.264.

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

Опишем методику. Сравнение в отчете проводится по критериям битрейт-качество (SSIM, PSNR)-скорость.Описанная в отчете методика для сравнения соотношения битрейт/метрика качества (пункт C.4) следующая.
Выбираем несколько значений битрейта (например, 7 значений: 1, 2, 4, 6, 8, 10 и 12 Mbps), для них считаем необходимые метрики качества для каждого кодека.

Отмечаем полученные значения на графике: метрика качества (ось абсцисс) – битрейт (ось ординат).

  1. Линейно интерполируем.
  2. Выбираем максимально большой диапазон, на котором все графики определены, и находим площади под всеми графиками на нем.
  3. В качестве меры качества определенного кодека (или пресета) берем отношение его площади к площади для эталонного кодека. Чем меньше полученное число, тем эффективнее кодек.

За эталонный выберем x265 с пресетом, выбранным в отчете (таблица 1). В отчете используется не последняя версия компрессора, ее можно найти здесь: x265 1.5+460-ac85c775620f. Однако при использовании последней версии принципиально ничего не меняется.
Используемые пресеты компрессоров указаны в таблице 1 (для платформы desktop).

Таблица 1. Настройки компрессора x265 отчета «MSU HEVC Video Codec Comparison»
Риппинг x265 -p veryslow --bitrate %BITRATE_KBPS% %SOURCE_FILE% -o %TARGET_FILE% --input-res %WIDTH%x%HEIGHT% --fps %FPS%
Универсальное кодирование x265 -p medium --bitrate %BITRATE_KBPS% %SOURCE_FILE% -o %TARGET_FILE% --input-res %WIDTH%x%HEIGHT% --fps %FPS%
Быстрое перекодирование x265 -p ultrafast --ref 3 --bitrate %BITRATE_KBPS% %SOURCE_FILE% -o %TARGET_FILE% --input-res %WIDTH%x%HEIGHT% --fps %FPS%
 

Для получения рекомендаций модификации пресетов проводим тестирование всех настроек, из которых они состоят – какой вклад в качество и скорость вносит каждая составляющая. План здесь следующий.

  1. Кодируем файл, меняя каждый параметр пресета: от быстрого перекодирования к универсальному, от универсального к «риппингу». При этом сохраняем время кодирования.
  2. Вычисляем меру качества (как площадь, указанную выше) и относительное время кодирования (минимальное значение FPS кодирования для файла «пресет-измененный параметр» относительно всех выбранных значений битрейта).
  3. Из таблицы, состоящей из изменяемого параметра, меры качества, минимального FPS, выбираем параметры, которые можно использовать для улучшения пресетов.


Ограничимся параметрами пресетов для универсального кодирования и для «риппинга» (табл. 2), раскрывая параметры «-p medium» и «-p ultrafast». Добавим к ним еще два, упущенные в отчете: «--keyint -1 --tune ssim». Перечисленными параметрами будем дополнять пресеты для быстрого и универсального перекодирования соответственно. 

Таблица 2. Параметры-кандидаты на модификацию пресетов отчета «MSU HEVC Video Codec Comparison»

 
Универсальное кодирование --rc-lookahead 20 --scenecut 40 --ctu 64 --min-cu-size 8 --bframes 4 --b-adapt 2 --subme 1 --me hex --early-skip --sao --signhide --weightp --rd 3 --aq-strength 1.0 --aq-mode 1 --cutree --no-fast-intra
"Риппинг" --weightb --amp --rect --rc-lookahead 40 --bframes 8 --tu-inter-depth 3 --tu-intra-depth 3 --rd 6 --rdoq 2 --psy-rdoq 1.0 --subme 4 --max-merge 4 --me star --ref 5 --b-intra --lookahead-slices 0

 

Тестирование


Ссылка для скачивания тестовой последовательности «Apple Tree» (рис. 1), используемой в бесплатной версии отчета, не указана. Выберем аналогичную, используя ее ключевую особенность – крупный план, большое количество мелких деталей. Например «big_buck_bunny_1080p_h264.mov», интервал в 338 кадров с 24 секунды:

ffmpeg -i big_buck_bunny_1080p_h264.mov -ss 00:00:24 -frames:v 338 -c:v rawvideo -pix_fmt yuv420p sample.yuv

Pic. 1. Characteristics of the sequence "Apple Tree"

 

Для того чтобы при реализации трех шагов плана, указанного выше, не тратить много времени на выписывание необходимых чисел из интерфейса Zond 265, удобно использовать его возможность работы в командной строке (таблица 3):
zond265_x64 %COMPRESSED_FILE% -iref %REFERENCE_420P_FILE% -nowait -report t=quality,statstream qm=SSIM o=%TARGET_CSV_FILE%
Список всех параметров, а также их подробное описание можно посмотреть на странице документации Zond 265.

Таблица 3. Параметры Zond 265 командной строки, необходимые для составления скрипта

Параметр Описание
-iref Задание референсного YUV файла
-report Указание режима работы Zond 265 в командной строке
t=quality,statstream Здесь выбрана генерация двух отчетов: качества и статистики о видеопотоке
qm=SSIM Метрика качества для вычисления
o Путь до файла отчета в формате CSV
-nowait Без пауз, Zond 265 должен сам переходить от файла к файлу без задержек
 

 

Вот два скрипта для Python 2.7: один для кодирования 266 файлов (20 настроек для первого, 18 настроек для второго пресета, для 7 значений битрейта: 1, 2, 4, 6, 8, 10, 12 Mbps), второй для составления отчета в формате CSV (файл – отношение FPS кодирования к эталонной конфигурации – отношение метрики SSIM к эталонной конфигурации).

Как видно из таблиц отчетов для фрагмента файла «big_buck_bunny_1080p_h264.mov» (таблицы 5 и 6), модифицировать конфигурации можно, например, так, как указано в таблице 4. Напомним, для улучшения эффективности значение «Мера качества» должно быть меньше единицы, а значение «Относительное время кодирования» – больше единицы.
Тест выполнен на компьютере следующей конфигурации: Intel Core i7-2600@3.4 GHz, 16 GB RAM. Наибольшее улучшение качества дает параметр «--min-cu-size 8» для конфигурации быстрого кодирования, для универсального кодирования – параметр «--rdoq-level 2» (но он же более всего замедляет кодирование).

Таблица 4. Модификация пресетов отчета «MSU HEVC Video Codec Comparison» для увеличения эффективности кодирования при той же скорости кодирования

Быстрое перекодирование x265 -p ultrafast --ref 3 --rc-lookahead 20 --min-cu-size 8 --bframes 4 --early-skip --cutree --tune ssim --bitrate %BITRATE_KBPS% %SOURCE_FILE% -o %TARGET_FILE% --input-res %WIDTH%x%HEIGHT% --fps %FPS%
Универсальное кодирование x265 -p medium --weightb --bframes 8 --tu-intra-depth 3 --psy-rdoq 1.0 --b-intra --lookahead-slices 0 --tune ssim --bitrate %BITRATE_KBPS% %SOURCE_FILE% -o %TARGET_FILE% --input-res %WIDTH%x%HEIGHT% --fps %FPS%
 
 
Таблица 5. Отчет о модификации пресета быстрого перекодирования

Таблица 6. Отчет о модификации пресета универсального кодирования

Правильность выбора опций легко проверить, запустив скрипт кодирования с измененными пресетами (таблица 7).
 
Таблица 7. Эффективность кодирования с использованием измененных пресетов относительно пресетов отчета «MSU HEVC Video Codec Comparison»
Конфигурация Мера качества Относительное время кодирования
Быстрое перекодирование (эталон) 1 1
Быстрое перекодирование, модифицированное  0.69  0.97
Универсальное перекодирование (эталон)  1  1
Универсальное перекодирование, модифицированное  0.85  0.94
 

Попробуем взглянуть, на что повлияло изменение опций – откроем в Zond 265 файл, закодированный измененным пресетом при быстром перекодировании для битрейта 8 Mbps и сравним его с файлом, закодированным неизмененным пресетом. Размер максимального блока кодирования остался прежним, и равен 32x32 (область «--ctu 32»). Но размер минимального блока уменьшился с 16 до 8 (область «--min-cu-size 8»), именно этот параметр дал наибольшее увеличение качества. Увеличилось число B-кадров с 3 до 4 (область «--bframes 4»), но при этом увеличилось и максимальное число «референсных» кадров (область «--ref 4»). Областью «SSIM» выделены максимальные значения графиков SSIM/PSNR для трех компонент: яркости (Luma) и двух компонент цветности (Cb, Cr). Они увеличились с 0.9623-0.9966 до 0.9771-0.9991. Оставшиеся дополнительные параметры (--rc-lookahead 20 --early-skip --cutree) влияют на алгоритм кодирования, а не на тип получившегося видео, это отражается, главным образом, на скорости кодирования (см. табл. 5). Надо отметить, визуально картинка декодированного кадра изменилась – артефакты кодирования теперь не видно.

 

Pic. 2. Screenshot of a Zond 265 file encoded using the modified fast encoding configuration

Аналогично можно проверить параметры закодированного файла с измененным и неизмененным пресетом универсального кодирования (рисунок 3). Размер минимальных разбиений TU не изменился и остался равным 4x4 (область «--tu-intra-depth 3»), количество B-кадров осталось неизменным и равно 3 (область «--bframes 3»). SSIM увеличился с 0.9789-0.9994 до 0.9811-0.9992. По сравнению с конфигурацией быстрого перекодирования увеличился размер максимального блока, стал равным 64x64 (область «--ctu 64»), добавился SAO фильтр (область «--sao»).

Pic. 3. Screenshot of the Zond 265 file encoded using modified universal encoding configuration

Таким образом, на основе проведенного тестирования предложен список опций для улучшения эффективности кодирования (улучшение значения метрики SSIM при том же битрейте и скорости кодирования) для конфигураций быстрого и универсального кодирования. С использованием предложенных изменений для файла с большим количеством мелких деталей, значение интегральной «меры качества» отчета «MSU HEVC Video Codec Comparison» при быстром перекидировании улучшилось на 31%, а при универсальном – на 15%, при этом скорость кодирования изменилась несущественно. Т.к. тестирование проведено для каждой опции отдельно, то на практике можно выбирать и использовать лишь некоторые удобные опции, а не весь предложенный список.

Ссылки

  1. HEVC Video Codecs Comparison
  2. Blender Foundation | www.blender.org
  3. Zond 265 home page