Игроки-стримеры не хотят тратить ресурсы на кодирование видео в ущерб производительности самой игры. Хотя современные графические процессоры оснащаются аппаратными кодировщиками, ради удешевления производства пользователей иногда лишают этого удовольствия (такое произошло, например, с AMD Radeon 6500XT). Смотреть замыленную картинку с низким разрешением и артефактами никто не станет, а значит, стрим потеряет потенциальных зрителей. Давайте сравним некоторые реализации аппаратных кодеков и оценим их влияние на восприятие контента потребителями. 

Для исследования качества видео мы выбрали метрику Netflix Video Multimethod Assessment Fusion (VMAF). По сравнению с традиционными показателями (такими как PSNR и SSIM) она лучше предсказывает субъективную человеческую оценку. VMAF использует несколько подметрик качества и модель машинного обучения, чтобы определить присваиваемый им вес.

Модель обучается на оценках зрителей: «отлично», «хорошо», «удовлетворительно», «плохо» или «очень плохо», которые линейно сопоставляются с оценками VMAF от 0 до 100. При этом 100 соответствует отличной оценке, а 20 — плохой. В такой шкале 80 будет означать «хорошо», 60 — «удовлетворительно» и 40 — «плохо». Мне нравится видеть рейтинг VMAF выше 90 — это значение между «отлично» и «хорошо», которое обозначает чистое видео с очень небольшим количеством заметных артефактов.

Для клипов с разрешением 4K мы использовали модель vmaf_4k_v0.6.1, которая была обучена прогнозировать качество картинки на расстоянии, в полтора раза превышающем высоту экрана (как если бы вы смотрели стрим YouTube на телевизоре с экраном в 60 дюймов, сидя от него примерно в двух метрах). Для клипов 1080p мы выбрали модель vmaf_v0.6.1, предназначенную для просмотра контента на HD-телевизоре в тех же условиях.

Для оценки стримов нам понадобились реальные кадры игрового процесса: сохраненное видео Overwatch Play of the Game и отрывок из рейда Elder Scrolls Online продолжительностью 20 секунд. В клипе Overwatch много движений камеры с относительно простыми объектами, а Elder Scrolls Online — полная его противоположность. Движений камеры здесь немного, зато больше деталей, игроков на экране и различных эффектов.

Наши комментарии в основном посвящены последним кодировщикам AMD и NVIDIA в архитектурах RDNA 2 (VCN, Video Core Next) и Turing (NVENC) соответственно. Мы также будем использовать кодек H.264, потому что он очень хорошо поддерживается аппаратно. Увы, мы не смогли протестировать новую архитектуру Ampere, но ее возможностей тем более хватит там, где хорошо себя показывает предыдущее поколение GPU.

Стриминг

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

Мы будем тестировать каждый кодировщик в режиме постоянного битрейта с настройками колебаний скорости потока от 10 Мбит/с до 4 Мбит/с. Поскольку потоковая передача в формате 4K непрактична, разрешение исходных роликов было уменьшено до 1080p. Для программного кодирования мы использовали libx264 с быстрым пресетом, потому что только он может поддерживать более 60 кадров в секунду на одном ядре AMD Ryzen 3950X с отключенным разгоном. Это оставляет нам достаточно вычислительной мощности для обработки игровой логики и будет адекватно любому современному процессору с более чем четырьмя ядрами. Все аппаратные кодировщики смогли превысить 100 кадров в секунду с предустановками самого высокого качества, поэтому для них скорость кодирования не является критичной.

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

Overwatch. Слева 6900 XT, справа RTX 2060 при потоке видео в 10 Мбит/с: проигрыш «красных» налицо
Overwatch. Слева 6900 XT, справа RTX 2060 при потоке видео в 10 Мбит/с: проигрыш «красных» налицо

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

В случае Elder Scrolls Online программное кодирование возвращает себе репутацию. Преимущество NVENC в качестве при низком битрейте испаряется, и libx264 даже немного его опережает. Аппаратные кодировщики лучше себя показывают в случае с более сложными кадрами. По сравнению с NVENC, AMD VCN и здесь продолжает отставать.

Субъективно ни один из энкодеров не работает особенно хорошо. Даже при скорости 10 Мбит/с многие мелкие детали удаляются, а вокруг текста пользовательского интерфейса видны артефакты. Тем не менее, картинка от NVidia смотрится лучше, потому что в ней низкоконтрастные имена игроков проще прочитать.

Elder Scrolls Online. Слева 6900 XT, справа RTX 2060 при потоке видео в 10 Мбит/с
Elder Scrolls Online. Слева 6900 XT, справа RTX 2060 при потоке видео в 10 Мбит/с
Программный кодек libx264 с быстрым пресетом слева, RTX 2060 с пресетом p7 справа при потоке 10 Мбит/с
Программный кодек libx264 с быстрым пресетом слева, RTX 2060 с пресетом p7 справа при потоке 10 Мбит/с

Кодировщик NVIDIA также склонен превышать целевой битрейт, а значит есть риск получить итоговый поток стрима, который не влезет в интернет-канал. Это превышение усугубляется в клипе Elder Scrolls Online и, похоже, NVIDIA использует больше битов для обработки дополнительных деталей (даже если это требует большей пропускной способности) и не обращает внимания на настройки пользователя. AMD VCN и libx264 также немного зашкаливают, но только в нижней части диапазона битрейта. Ближе к верхнему пределу (10 Мбит/с) они имеют тенденцию отставать и давать поток меньшей скорости.

Запись

Запись немного отличается от стриминга. Кодировщик по-прежнему должен быть достаточно быстрым, чтобы работать в режиме реального времени, но выходные данные могут не соответствовать жестким ограничениям пропускной способности канала. Это позволяет записывать геймплей в формате 4K с очень высоким качеством, но тут мы должны обратить внимание на объем хранилищ данных.

В тесте мы задаем различные уровни качества, используя параметр квантования (для аппаратных кодировщиков) или коэффициент постоянной скорости (для libx264). Каждый кодировщик может использовать предустановку, которая позволит воспроизводить более 60 кадров в секунду. Для libx264 мы снова собираемся ограничиться одним ядром 3950X с отключенным разгоном, а значит, нужна сверхбыстрая предустановка.

Здесь аппаратные энкодеры показывают свою мощь, ведь кодирование с разрешением 4K — сложная задача для процессора. Одно ядро Zen 2 с тактовой частотой 3,5 ГГц должно использовать самую быструю предустановку, чтобы выдавать свыше 60 кадров в секунду. Это не позволяет кодировщику задействовать гибкость ЦП, и libx264 оказывается в конце списка. Благодаря быстрым аппаратным блокам энкодеров, графические процессоры могут выполнять более качественный анализ видео, сохраняя достаточную скорость для записи в реальном времени.

Архитектура Turing от NVIDIA снова занимает первое место, но и архитектура Pascal не сильно отстает. AMD VCN, увы, не совсем ровня NVIDIA, но все-таки превосходит программное кодирование. Все варианты обеспечивают очень хорошее качество при потоке в 40 Мбит/с.

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

Слева 6900 XT при потоке 22,1 Мбит/с, справа RTX 2060 Moble с потоком 20,09 Мбит/с: VMAF выдает 75,6 и 82,1 очков соответственно (картинка сжата с 4K до 1080p)
Слева 6900 XT при потоке 22,1 Мбит/с, справа RTX 2060 Moble с потоком 20,09 Мбит/с: VMAF выдает 75,6 и 82,1 очков соответственно (картинка сжата с 4K до 1080p)

Транскодирование

В этом сценарии мы пытаемся сжать записанный клип высокого качества, чтобы получить файлы меньшего размера (скорость кодирования при этом не так важна). Как и в сценарии записи, мы используем постоянное квантование или коэффициент постоянной скорости, но каждый энкодер будет настроен на самую медленную предустановку самого высокого качества. Единственное исключение — libx264, где вместо «плацебо» используется «очень медленный» пресет. 

NVENC на архитектуре Turing по-прежнему очень эффективен, но программное кодирование обеспечивает явное преимущество в качестве выше 10 Мбит/с. NVENC на архитектуре Pascal сильно отстает от Turing, а VCN от AMD плетется в самом конце.

Все видеоэнкодеры могут обеспечить отличное качество со скоростью потока более 30 Мбит/с. Выше этой планки значения VMAF продолжают сходиться, и различия в качестве трудно определить. При скорости ниже 10 Мбит/с протестированные кодировщики выдают ужасный результат. Netflix уверяет нас, что 70 баллов — это где-то между «хорошо» и «удовлетворительно», но нет ничего хорошего в шумных цветных блоках повсюду:

Turing получает в VMAF 73,09 очков при битрейте в 7,18 Мбит/с. Вы тоже считаете, что это справедливая оценка качества для картинки выше?

В Elder Scroll Online программное кодирование вырывается вперед. NVENC от NVIDIA наталкивается на своего рода стену, где возможности обеих архитектур практически исчерпаны. AMD VCN по-прежнему занимает последнее место, но догоняет NVIDIA при битрейте выше 50 Мбит/с.

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

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

При предустановке самого высокого качества вперед вырывается кодек NVENC на архитектуре Pascal. Turing жертвует скоростью ради качества, что является хорошим компромиссом для транскодирования. Скорость VCN примерно такая же, как у NVIDIA, но он проигрывает по качеству. Программное кодирование с помощью libx264 намного медленнее, но обеспечивает как качество, так и высокую эффективность битрейта, с которыми не могут сравниться аппаратные кодировщики.

Выводы

На протяжении многих лет NVIDIA постоянно улучшала реализацию NVENC. С переходом на архитектуру Turing был создан отличный аппаратный кодировщик, который на равных может конкурировать с быстрым пресетом libx264. Технически лучшим вариантом все еще остается стриминг на мощном многоядерном процессоре с предустановкой программного кодирования более высокого качества, но NVENC на архитектуре Turing (а тем более на Ampere) является хорошей альтернативой, особенно на более слабых процессорах. 

С другой стороны, AMD еще есть над чем поработать. Их последний кодировщик VCN быстр, но не может сравниться с энкодерами NVENC от NVIDIA. В пользу AMD можно сказать, что VCN очень хорошо справляется с записью в формате 4K и более высоким битрейтом, когда между кодировщиками практически нет разницы в качестве. Тем не менее, GPU от NVIDIA лучше, если вы хотите записывать видео с более низким битрейтом.

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

Стоит также отметить, что мы не сравнивали GPU AMD и NVIDIA с аппаратными кодеками Intel Quick Sync, а также не брали для тестов кодеки HEVC или AV1 — это связано как с ограничениями тестового стенда, так и с проблемами поддержки кодеков в аппаратных блоках GPU.

___

Между тем в HOSTKEY всегда доступны для аренды высокопроизводительные GPU, включая профессиональные карты последнего поколения NVIDIA RTX A5000, A4000 и даже новинку A5500.

А специальный промокод «Я С ХАБРА» откроет врата щедрости: назовите его консультанту на сайте при размещении заказа — и получите дополнительную скидку.

Платить можно как всегда в рублях с НДС российской компании или в евро — компании в Нидерландах.

Комментарии (5)


  1. Schokn-Itrch
    13.05.2022 06:19
    +3

    Кодеки NVENC и libx264 замедляются по мере увеличения параметра квантования или коэффициента постоянной скорости, в то время как AMD VCN поддерживает постоянную скорость независимо от качества.

    Это гуглперевод. Чем выше значение QP/CRF - тем выше скорость и хуже качество.

    Правильнее было бы: Кодеки NVENC и libx264 замедляются по мере установлении параметра квантования или коэффициента постоянной скорости соответствующих более высокому качеству, в то время как AMD VCN поддерживает постоянную скорость независимо от качества.


    1. Altaev
      13.05.2022 07:49

      Ощущение, что вся статья - машинный перевод????


    1. akdengi
      13.05.2022 14:53
      +1

      В оригинале именно про снижение производительности при увеличении QP и СRF.

      "NVENC and libx264 slow down as the quantization parameter or constant rate factor goes up, while AMD’s VCN holds a constant speed regardless of quality. "

      И речь тут не про качество видео, а про сжатие и нагрузку на GPU. При qp=1 и crf=1 видеопоток идет без изменения для кодека, а при qp и crf равный 51 он будет максимально сжиматься, нагружая кодеки по полной.

      Higher values mean more compression, but at some point you will notice the quality degradation.

      Если ошибаюсь, напишите :)


  1. v1000
    13.05.2022 10:34

    Проблема в том, что сами площадки для стриминга зачастую "зажимают" канал, из-за чего картинка получается мыльная. При этом доступный битрейт может быть выше, если использовать 4K поток, хотя его можно было-бы вполне использовать для FullHD картинки лучшего качества.


    1. akdengi
      13.05.2022 15:01

      4K на выходе упрутся в домашний вайфай, экраны смартфонов и мониторы. Обычно все таки Full HD и 2K у большинства. Но иначе не продашь новые видеокарты и приставки, поэтому все 4K и продвигают.