- PVSM.RU - https://www.pvsm.ru -
В октябре 2015 был выпущен очередной отчет сравнения кодеков [1] в ВМиК МГУ, на этот раз туда вошло несколько кодеков формата HEVC.
Рядовые пользователи не могут тратить недели на изучение всех настроек кодеров, поэтому пресеты, поставляемые разработчиками, должны быть настроены идеально. В отчете сравниваются пресеты, но не даются рекомендации по их исправлению. В данной статье мы провели аналогичное сравнение и разработали рекомендации по модификации пресетов кодера х265. Показано, что для видеопоследовательности, исследуемой в бесплатной версии отчета, предлагаемые изменения параметров кодирования позволяют существенно повысить эффективность сжатия.
Задача кодирования видео при обработке мультимедиа, будь то передача, монтаж или редактирование, хранение, возникает постоянно как при разработке приложений и сервисов, так и при их настройке в момент использования. В силу большого количества популярных видеокодеков, даже зачастую одного типа, выбрать из них оптимальный, а затем задать правильные настройки, непросто. Вероятно, руководствуясь подобными соображениями, в лаборатории компьютерной графики и мультимедиа при факультете вычислительной математики и кибернетики (ВМиК) МГУ с 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), для них считаем необходимые метрики качества для каждого кодека.
Отмечаем полученные значения на графике: метрика качества (ось абсцисс) – битрейт (ось ординат).
За эталонный выберем x265 с пресетом, выбранным в отчете (таблица 1). В отчете используется не последняя версия компрессора, ее можно найти здесь: x265 1.5+460-ac85c775620f [2]. Однако при использовании последней версии принципиально ничего не меняется.
Используемые пресеты компрессоров указаны в таблице 1 (для платформы desktop).
| Риппинг | 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. Настройки компрессора x265 отчета «MSU HEVC Video Codec Comparison»
Для получения рекомендаций модификации пресетов проводим тестирование всех настроек, из которых они состоят – какой вклад в качество и скорость вносит каждая составляющая. План здесь следующий.
Ограничимся параметрами пресетов для универсального кодирования и для «риппинга» (табл. 2), раскрывая параметры «-p medium» и «-p ultrafast». Добавим к ним еще два, упущенные в отчете: «--keyint -1 --tune ssim». Перечисленными параметрами будем дополнять пресеты для быстрого и универсального перекодирования соответственно.
| Универсальное кодирование | --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 |
Таблица 2. Параметры-кандидаты на модификацию пресетов отчета «MSU HEVC Video Codec Comparison»
Ссылка для скачивания тестовой последовательности «Apple Tree» (рис. 1), используемой в бесплатной версии отчета, не указана. Выберем аналогичную, используя ее ключевую особенность – крупный план, большое количество мелких деталей. Например «big_buck_bunny_1080p_h264.mov [3]», интервал в 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

Рисунок 1. Характеристика последовательности «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 [4].
| Параметр | Описание |
| -iref | Задание референсного YUV файла |
| -report | Указание режима работы Zond 265 в командной строке |
| t=quality,statstream | Здесь выбрана генерация двух отчетов: качества и статистики о видеопотоке |
| qm=SSIM | Метрика качества для вычисления |
| o | Путь до файла отчета в формате CSV |
| -nowait | Без пауз, Zond 265 должен сам переходить от файла к файлу без задержек |
Таблица 3. Параметры Zond 265 командной строки, необходимые для составления скрипта
Вот два скрипта для Python 2.7: один для кодирования [5] 266 файлов (20 настроек для первого, 18 настроек для второго пресета, для 7 значений битрейта: 1, 2, 4, 6, 8, 10, 12 Mbps), второй для составления отчета в формате CSV [6] (файл – отношение FPS кодирования к эталонной конфигурации – отношение метрики SSIM к эталонной конфигурации).
Как видно из таблиц отчетов для фрагмента файла «big_buck_bunny_1080p_h264.mov [7]» (таблицы 5 и 6), модифицировать конфигурации можно, например, так, как указано в таблице 4. Напомним, для улучшения эффективности значение «Мера качества» должно быть меньше единицы, а значение «Относительное время кодирования» – больше единицы.
Тест выполнен на компьютере следующей конфигурации: Intel Core i7-2600@3.4 GHz, 16 GB RAM. Наибольшее улучшение качества дает параметр «--min-cu-size 8» для конфигурации быстрого кодирования, для универсального кодирования – параметр «--rdoq-level 2» (но он же более всего замедляет кодирование).
| Быстрое перекодирование | 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% |
Таблица 4. Модификация пресетов отчета «MSU HEVC Video Codec Comparison» для увеличения эффективности кодирования при той же скорости кодирования


Правильность выбора опций легко проверить, запустив скрипт кодирования с измененными пресетами [8] (таблица 7).
| Конфигурация | Мера качества | Относительное время кодирования |
| Быстрое перекодирование (эталон) | 1 | 1 |
| Быстрое перекодирование, модифицированное | 0.69 | 0.97 |
| Универсальное перекодирование (эталон) | 1 | 1 |
| Универсальное перекодирование, модифицированное | 0.85 | 0.94 |
Таблица 7. Эффективность кодирования с использованием измененных пресетов относительно пресетов отчета «MSU HEVC Video Codec Comparison»
Попробуем взглянуть, на что повлияло изменение опций – откроем в Zond 265 файл, закодированный измененным пресетом при быстром перекодировании [9] для битрейта 8 Mbps и сравним его с файлом, закодированным неизмененным пресетом [10]. Размер максимального блока кодирования остался прежним, и равен 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). Надо отметить, визуально картинка декодированного кадра изменилась – артефакты кодирования теперь не видно.

Рисунок 2. Скриншот Zond 265 файла, закодированным с использованием исправленной конфигурацией быстрого кодирования
Аналогично можно проверить параметры закодированного файла с измененным [11] и неизмененным [12] пресетом универсального кодирования (рисунок 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»).

Рисунок 3. Скриншот Zond 265 файла, закодированным с использованием исправленной конфигурацией универсального кодирования
Таким образом, на основе проведенного тестирования предложен список опций для улучшения эффективности кодирования (улучшение значения метрики SSIM при том же битрейте и скорости кодирования) для конфигураций быстрого и универсального кодирования. С использованием предложенных изменений для файла с большим количеством мелких деталей, значение интегральной «меры качества» отчета «MSU HEVC Video Codec Comparison» при быстром перекидировании улучшилось на 31%, а при универсальном – на 15%, при этом скорость кодирования изменилась несущественно. Т.к. тестирование проведено для каждой опции отдельно, то на практике можно выбирать и использовать лишь некоторые удобные опции, а не весь предложенный список.
Автор: DmitryVergeles
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/108647
Ссылки в тексте:
[1] отчет сравнения кодеков: http://compression.ru/video/codec_comparison/hevc_2015/
[2] x265 1.5+460-ac85c775620f: https://builds.x265.eu/x265-64bit-8bit-2015-04-01.exe
[3] big_buck_bunny_1080p_h264.mov: http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_h264.movhttp://
[4] странице документации Zond 265: http://www.solveigmm.com/en/howto/zond-265-tutorial/
[5] кодирования: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/encode.py
[6] составления отчета в формате CSV: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/analyse.py
[7] big_buck_bunny_1080p_h264.mov: http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_h264.mov
[8] скрипт кодирования с измененными пресетами: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/encode_with_corrected_presets.py
[9] файл, закодированный измененным пресетом при быстром перекодировании: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/sample_8000_ultrafast_corrected.265
[10] файлом, закодированным неизмененным пресетом: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/sample_8000_ultrafast.265
[11] измененным: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/sample_8000_medium_corrected.265
[12] неизмененным: https://dl.dropboxusercontent.com/u/102689788/x265-presets-changing/sample_8000_medium.265
[13] Blender Foundation | www.blender.org: http://www.blender.org/
[14] Zond 265 home page: http://www.solveigmm.com/en/products/zond/
[15] Источник: http://geektimes.ru/post/268256/
Нажмите здесь для печати.