PDA

Просмотр полной версии : Сравнительное тестирование кодеков для кодирования игрового видео низкого разрешения


warper
21.04.2010, 19:18
При кодировании игрового видео все мы задаемся в конце одним и тем же вопросом: какой кодек выбрать, какие настройки для него использовать?

Для тестирования были взяты кодеки Mainconcept AVC, Sony AVC из триальной версии Sony Vegas 9.0d, Koepi's XviD 1.2.2, а также x264 cli build 1542

В качестве подопытного был выбран ролик из игры Mass Effect 2 длительностью 2 минуты 38 секунд в .avi uncompressed 25 fps. Ролик состоит из диалогов, нескольких игровых экранов и тяжелого для кодирования участка собственно игрового действа. Предварительная обработка ролика включала приведение его в Studio Levels и ресайз до 720*576.

Сравнение проводилось в бесплатной вресии MSU Video Quality Measurement Tool

Изначально футаж был записан в программе fraps 3-й версии в разрешении 1920*1080 с частотой 25 кадров в секунду, но в силу ограничений на обрабатываемый размер картинки в средстве подсчета PSNR его пришлось уменьшить до DVD-разрешения.

Тестирование проводилось сравнением Y-PSNR, также скажу несколько слов по визуальному сравнению полученных файлов.

Изначально планировалось кодирование с вариантами битрейта 400, 600, 1000, 2000, 3600, 5000 Кбит/с в 1 и 2 прохода, однако из-за ограничений в настройках и дополнительных возможностей в результате настройки получились несколько отличными (битрейты в кбит/с):
* в Sony AVC в 1 проход (2 прохода не предусмотрено) со следующими битрейтами: 400, 600, 1000, 2000, 3600, 5000
* в xvid кодировалось в 1 и 2 прохода со следующими битрейтами: 400, 600, 1000, 2000, 3600; также в один проход с битрейтом 5000
* в Mainconcept AVC в 1 и 2 прохода со следующими битрейтами: 384, 768, 2000, 4000
* в x264 в 1 и 2 прохода: 400, 600, 1000, 2000, 3600, 5000; в 1 проход с битрейтом 200; по качеству crf 18, 20, 23, 25, 28, 30, 33, 35

Фактически получившиеся битрейты отличались от заданных (особенно сильно у x264), поэтому в дальнейшем сравнении они будут озвучены отдельно.

Перед цифрами и конкретикой хочется еще сказать несколько слов про тенденции, которые прослеживаются у выбранных кодеков.
На сверхнизких битрейтах все кодеки показывают неудовлетворительную картинку - у xvid картинка рассыпается на кубики, у Sony AVC появляются одноцветные квадраты с рваными, у Mainconcept AVC картинка становится рваной, у x264 - вязко-контрастной.
На высоких битрейтах все кодеки более или менее справились, у xvid артефакты еще заметны, у остальных картинка вполне смотрибельна.
Для xvid финальная часть оказалась настолько тяжелой по битрейту, что при кодировании в 2 прохода происходит фатальное снижение качества всего ролика. Можно сказать, что на сегодняшний момент кодировать тяжелые игровые ролики в xvid нецелесообразно - для гарантированно хорошего качества нужен слишком большой битрейт.
Mainconcept и x264 в меньшей степени перераспределяют битрейт - картинка в начальной части в двухпроходном режиме слабо страдает даже при недостатке битрейта в финале.
Кодирование по качеству (режим crf) в x264 позволяет добиться смотрибельной картинки даже на низких битрейтах. Вместе с тем в таком режиме лучше всего передавались промежуточные игровые экраны.
У x264 картинка кажется немного сглаженной, но надписи (достаточно крупные по игровым меркам) в отличие от других кодеков не кажутся искаженными.
Использование x264 в однопроходном режиме с указанием битрейта может выдавать непредсказуемые результаты. Отношение минимального и максимального битрейта доходило до x10, а фактический средний битрейт превышал заданный на величину до 23%. На роликах с "легким финалом" битрейт бы выравнивался, но тестовый ролик заканчивается как раз тяжелой для кодирования последовательностью.

altarvic
21.04.2010, 22:09
откуда материал то?
кстати для использования x264 в Вегасе нужно установить x264vfw (http://sourceforge.net/projects/x264vfw/)

warper
21.04.2010, 22:41
откуда материал то?
Отсюда... это не копипаста

altarvic
Ну как сказать... Я зарекся использовать x264 vfw в Вегасе после серии крашей кодера.
Причина проста - ограниченная поддержка b-фреймов. Для обхода есть несколько путей, но они либо требуют усилий от декодера (читай: стороннего плеера и кодека H264), либо требуют усилий от кодера (читай: от Вегаса).
VirtualDUB специально дорабатывался для поддержки b-фреймов в avi. Вегас - нет.
В результате бывают сбои в работе кодера (на ровном месте краш Вегаса при рендеринге), рассинхронизация звука и видео, а также глюки на выходе.

Настройки кодеков...
http://s004.radikal.ru/i205/1004/26/1aaf7be428c9t.jpg (http://radikal.ru/F/s004.radikal.ru/i205/1004/26/1aaf7be428c9.gif.html)

http://s39.radikal.ru/i085/1004/b6/8c2219e15e1at.jpg (http://radikal.ru/F/s39.radikal.ru/i085/1004/b6/8c2219e15e1a.gif.html)

http://s55.radikal.ru/i147/1004/9f/faaa00e13a96t.jpg (http://radikal.ru/F/s55.radikal.ru/i147/1004/9f/faaa00e13a96.gif.html)

x264.exe --preset veryslow --bitrate 400 [опционально pass 1|2]

Update... Посмотрел повнимательней на результаты, понял, что накосячил. Вегас кодировал видео нормально, а в avisynth и x264 уровни уехали (произошло лишнее преобразование PC Levels to Studio Levels) :be:
Попробую разобраться как этого избежать, после выложу обновленные результаты. :pardon: