Аппаратные видеокодеры GPU

Выяснение наилучшего способа кодирования видео очень затратно с точки зрения вычислений, и, возможно, не стоит тратить тонну циклов процессора на кодирование видео, когда вы запускаете игру. Вот почему современные графические процессоры обычно включают аппаратные видеокодеры.
Здесь мы кратко рассмотрим, как сравниваются некоторые реализации. Для оценки качества мы будем использовать метрику Netflix Video Multimethod Assessment Fusion (VMAF). По сравнению с традиционными показателями качества видео, такими как PSNR и SSIM, VMAF обычно лучше предсказывает, как человек будет субъективно оценивать видео. Это связано с тем, что VMAF использует несколько показателей качества и модель машинного обучения для определения того, какой вес следует придавать каждой субметрике. Модель обучается с использованием оценок человеческих зрителей, которые оценивают видео как “отличное”, “хорошее”, “справедливое”, “плохое” или “плохое”. Они линейно сопоставляются с оценками VMAF от 0 до 100, причем 100 представляют собой оценку “отлично”, а 20 - "плохо". Попутно 80 означало бы “хорошо”, 60 - “справедливо” и 40 - “плохо”. Лично мне нравится видеть рейтинг VMAF выше 90. Это было бы между “отлично” и “хорошо” и, как правило, означает чистое видео с очень небольшим количеством заметных артефактов.
Для клипов 4K мы использовали модель vmaf_4k_v0.6.1, которая была обучена предсказывать качество на телевизоре 4K на расстоянии 1,5 x высоты экрана. А для клипов 1080p (FullHD) мы использовали vmaf_v0.6.1, который нацелен на просмотр на 1080p HDTV в гостиной.
В отличие от других оценок, которые использовали видеоклипы, мы используем кадры геймплея. В частности, мы собираемся использовать сохраненное игровое видео Overwatch и 20-секундный клип из онлайн-рейда Elder Scrolls. В клипе Overwatch много движения камеры с относительно простыми объектами. Клип ESO raid противоположен. Там не так много движения камеры для большей части клипа, но есть больше деталей, больше игроков на экране и больше эффектов.
Большая часть наших комментариев будет посвящена последним кодерам AMD и Nvidia в RDNA 2 (VCN, Video Core Next) & AMD Radeon 6900 XT и Turing (NVENC) & GeForce RTX 2060 Mobile соответственно. Мы также будем использовать кодек H.264, потому что он очень хорошо поддерживается.
Потоковая передача - очень требовательный сценарий для любого видеокодера. Выходной поток не может превышать установленный битрейт, потому что это может перегружать пропускную способность загрузки и вызывать заикание. Это означает, что кодер имеет низкую гибкость, если ему нужно использовать больше битов для представления сложных движений или мелких деталей. В то же время он должен кодировать достаточно быстро, чтобы обеспечить потоковую передачу в реальном времени. Это ограничивает, насколько он может анализировать видеокадры, чтобы придумать оптимальное кодирование.
Чтобы оценить это, мы будем использовать каждый кодер в режиме постоянного битрейта при настройках от 10 Мбит/с до 4 Мбит/с. Поскольку потоковая передача в 4K непрактична, исходные видео были уменьшены до 1080p. Для программного кодирования мы используем более быстрый пресет libx264, потому что он может поддерживать более 60 кадров в секунду на одном CCX процессора AMD Ryzen 3950X с отключённым boost. Это должно оставить достаточно мощности процессора для обработки игровой логики, по крайней мере, на современных процессорах с более чем четырьмя ядрами. Все аппаратные кодеры смогли превысить 100 кадров в секунду с их высококачественными пресетами, что делает скорость не проблемой.


Аппаратное кодирование

В видео Overwatch Turing NVENC от Nvidia работает очень хорошо. Он может соответствовать или бить программное обеспечение libx264, кодирующее все битрейты. На нижнем конце диапазона битрейта, который может быть важен для потоковой передачи с низкой скоростью загрузки, качество Turing не имеет себе равных. Кодер предыдущего поколения Nvidia, найденный в картах на основе Pascal, немного хуже. Но это все еще очень солидный исполнитель, который остается шеей и шеей с программным кодированием. Кодер AMD VCN (Video Core Next) не так впечатляет. Его качество значительно хуже, чем у Nvidia во всем диапазоне битрейтов. Он также не может конкурировать с программным кодированием, предполагая, что у вас достаточно мощности процессора.


Аппаратное кодирование

Битрейт 10 Мбит/с, выше NVENC, ниже VCE:

Аппаратное кодирование

Субъективно, VCN сложнее обрабатывать быстрые движения камеры. Все кодеры борются, когда есть много движения, но VCN страдает немного больше от блокировки. Он также более подвержен артефактам вокруг текста и элементов пользовательского интерфейса. NVENC восстанавливается намного быстрее от быстрых движений.


Аппаратное кодирование

Программное кодирование изменяет расклады с помощью клипа ESO. Преимущество NVENC в низком качестве битрейта испаряется, и libx264 занимает небольшое лидерство во всем диапазоне битрейтов. Аппаратные кодеры, похоже, борются с более сложными кадрами. Относительно NVENC - VCN AMD продолжает отставать.
Субъективно, ни один из кодеров здесь не делает особенно хорошую работу. Даже при 10 Мбит/с удаляется много мелких деталей, и вокруг текста пользовательского интерфейса видны артефакты. Тем не менее, я немного предпочитаю вывод Turing (NVENC 6-го поколения), потому что он немного облегчает чтение имен игроков с низкой контрастностью.


Аппаратное кодирование

Аппаратное кодирование

Первый скрин это RTX 2060 Mobile, второй это Radeon 6900 XT, а нижний это libx264. Битрейт: 10 Мбит/с.

Аппаратное кодирование

Интересно, что кодер Nvidia имеет тенденцию превышать целевой битрейт, что означает, что он может использовать больше пропускной способности загрузки, чем ожидалось. Это превышение ухудшается в клипе ESO, предполагая, что Nvidia использует больше битов для обработки дополнительных деталей, даже если это будет использовать большую пропускную способность, чем то, что просит пользователь. AMD VCN и libx264 также немного превышают, но только на нижнем конце диапазона битрейта. К верхнему концу (10 Мбит/с) они, как правило, отстают.
Запись немного отличается от потоковой передачи. Кодер по-прежнему должен быть достаточно быстрым, чтобы идти в ногу в реальном времени, но выход не должен вписываться в жесткие ограничения пропускной способности загрузки. Это позволяет записывать игровой процесс в 4K с очень высоким качеством. Конечно, мы все еще хотим использовать хранилище максимально эффективно.
В этом тесте мы собираемся установить различные уровни качества, используя параметр квантования (для аппаратных кодеров) или коэффициент постоянной скорости (для libx264). Каждый кодер получает лучший пресет качества, который может делать более 60 кадров в секунду. Для libx264 мы снова ограничим его одним 3950X CCD с boost off, что означает, что ему нужна сверхбыстрая предустановка (Fast Preset).


Аппаратное кодирование

Теперь аппаратные кодеры показывают свою силу. Кодирование 4K требует слишком многого от процессора. Один Zen 2 CCX на частоте 3,5 ГГц должен использовать самый быстрый пресет, чтобы оставаться выше 60 кадров в секунду. Это мешает ему использовать гибкость процессора, и libx264 оказывается в нижней части пакета. Благодаря быстрому аппаратному обеспечению с фиксированной функцией графические процессоры могут выполнять лучший анализ, сохраняя при этом достаточную скорость для записи в реальном времени.
Turing от Nvidia снова занимает первое место, а Pascal не отстает. VCN AMD не может полностью соответствовать Nvidia, но превосходит программное кодирование. Все опции обеспечивают очень хорошее качество за 40 Мбит/с.


Аппаратное кодирование

В клипе ESO программное кодирование борется еще больше. Теперь он не может соответствовать аппаратным кодерам во всем диапазоне битрейтов. Среди аппаратных кодеров Тьюринг доминирует еще больше. Pascal и AMD VCN отстают на шаг, хотя Pascal дает незначительно лучшее качество.


Аппаратное кодирование

6900 XT с битрейтом 22,1 Мбит/с ниже, RTX 2060 Mobile с битрейтом 20,09 Мбит/с выше, получили следующие оценки VMAF 75,6 и 82,1 соответственно. Кадры 4K уменьшены до 1080p.


Аппаратное кодирование

Перекодирование. В этом сценарии мы пытаемся сжать высококачественный записанный клип, чтобы получить меньшие размеры файлов, предпочтительно теряя при этом как можно меньше качества. Скорость не имеет большого значения. Как и сценарий записи, мы используем постоянное квантование или постоянный коэффициент скорости. Но в отличие от записи, каждый кодер будет установлен на самый медленный, самый качественный пресет. Единственное исключение - libx264, где вместо “placebo” используется пресет “veryslow”. Последний просто медленнее, едва обеспечивая лучшее качество.


Аппаратное кодирование

NVENC Turing по-прежнему очень сильный исполнитель, но программное кодирование обеспечивает явное преимущество качества выше 10 Мбит/с. NVENC Pascal (GTX 1080) даёт близкий результат от Turing, в то время как VCE AMD отстает.
Все видеокодеры могут обеспечить отличное качество с более чем 30 Мбит/с. Выше этого оценка VMAF продолжает сходиться, и различия становятся неразличимыми. Ниже 10 Мбит/с все протестированные кодеры обеспечивают ужасную производительность. Netflix говорит, что оценка 70 - это голосование между “хорошим” и “справедливым“, но нет ничего хорошего или справедливого в шумных цветных блоках повсюду:


Аппаратное кодирование

Turing получил оценку VMAF 73.09 при 7.18 Мбит/с.

Аппаратное кодирование

С клипом ESO программное кодирование продвигается дальше. NVENC Nvidia сталкивается со своего рода стеной, а Turing и Pascal показывают практически одинаковое качество. VCN AMD все ещё отстаёт, но догоняет Nvidia с битрейтом более 50 Мбит/с.
Скорость не имела значения в двух других сценариях, если кодер был достаточно быстрым, чтобы обрабатывать кодирование в реальном времени. Для перекодирования, хотя, быстрее лучше.


Аппаратное кодирование

NVENC и libx264 замедляются по мере увеличения параметра квантования или коэффициента постоянной скорости, в то время как VCN AMD поддерживает постоянную скорость независимо от качества. Более высокая сложность сцены замедляет работу всех кодеров, но на VCN AMD практически не влияет (44 FPS против 45 FPS).


Аппаратное кодирование

При самом высоком качестве пресета NVENC от Pascal является самым быстрым. Turing обменивает некоторую скорость на качество, что является хорошим компромиссом для перекодирования. Скорость VCN находится на том же уровне, что и у Nvidia, но проигрывает по качеству. Программное кодирование с libx264 намного медленнее, но обеспечивает качество и эффективность битрейта, которым аппаратные кодеры не могут соответствовать.
Nvidia неуклонно улучшала свою реализацию NVENC на протяжении многих лет. С Turing они создали отличный аппаратный кодер, который может идти голова к голове с более быстрым пресетом libx264 (версия 164 кодера libx264 использовалась для тестирования в этой статье). Технически, лучшая потоковая настройка будет использовать мощный процессор и более качественную программную предустановку кодирования. Но NVENC Turing - очень хорошая альтернатива, особенно на более слабых процессорах. С другой стороны, AMD нужно наверстать упущенное. Их последний кодер VCN быстр, но даже не может сравниться с NVENC последнего поколения Nvidia, найденным в Turing.
В пользу AMD VCN очень хорошо покрывает запись 4K, в основном потому, что вы можете записывать на более высоких битрейтах, где практически нет разницы в качестве между кодерами. Таким образом, VCN оказывается достаточно хорошим. Это дает пользователям AMD лучший вариант, чем программное кодирование, и показывает силу аппаратных кодеров для этого варианта использования, даже если он не лучший в своем классе. Тем не менее, Nvidia лучше, если вы хотите записывать на более низких битрейтах.
Для транскодирования программное кодирование является королем. Аппаратные кодеры просто не могут достичь того же уровня эффективности битрейта. Они, вероятно, имеют простые, фиксированные функциональные схемы, которые очень быстры, но недостаточно гибки, чтобы выполнять сложный анализ программного обеспечения. Тем не менее, аппаратные кодеры могут работать в крайнем случае. Если вы знаете, что в вашем видео преобладают простые сцены, не очень придирчивы к качеству видео и просто хотите, чтобы кодирование выполнялось быстро, предустановка Turing p7 может выполнить разумную работу.
В будущих статьях мы планируем рассмотреть другие кодеры, такие как Intel Quick Sync или более старый VCE AMD. Если позволит время, мы также рассмотрим новые форматы кодирования видео, такие как HEVC и AV1.
!!! Стоит учесть, что основное развитие в аппаратных кодерах идёт для формата HEVC/H.265, а H.264 либо уже не развивается, либо по остаточному принципу. Т.е. более актуальны тесты именно новых форматов.

 
Рейтинг@Mail.ru