Игроки-стримеры не хотят тратить ресурсы на кодирование видео в ущерб производительности самой игры. Хотя современные графические процессоры оснащаются аппаратными кодировщиками, ради удешевления производства пользователей иногда лишают этого удовольствия (такое произошло, например, с AMD Radeon 6500XT). Смотреть замыленную картинку с низким разрешением и артефактами никто не станет, а значит, стрим потеряет потенциальных зрителей. Давайте сравним некоторые реализации аппаратных кодеков и оценим их влияние на восприятие контента потребителями.
Для исследования качества видео мы выбрали метрику Netflix Video Multimethod Assessment Fusion (VMAF). По сравнению с традиционными показателями (такими как PSNR и SSIM) она лучше предсказывает субъективную человеческую оценку. VMAF использует несколько подметрик качества и модель машинного обучения, чтобы определить присваиваемый им вес.
Для клипов с разрешением 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 — полная его противоположность. Движений камеры здесь немного, зато больше деталей, игроков на экране и различных эффектов.
Стриминг
Потоковая передача — требовательный сценарий. Нельзя превышать установленный для выходного потока битрейт, чтобы не перегрузить пропускную способность канала с пропуском кадров и звука. Для энкодера это означает ограниченную гибкость в процессе кодирования, если понадобится использовать больше битов для представления сложных движений или мелких деталей. В то же время кодировать нужно достаточно быстро, чтобы обеспечить передачу данных в реальном времени. Все это уменьшает возможности анализа видеокадров для определения оптимальных настроек кодирования.
Мы будем тестировать каждый кодировщик в режиме постоянного битрейта с настройками колебаний скорости потока от 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 Мбит/с: проигрыш «красных» налицо
Субъективно кажется, будто VCN сложнее обрабатывать быстрые движения камеры. Все кодировщики проседают при обработке сильно отличающихся друг от друга кадров, но VCN больше страдает рассыпанием картинки на квадраты. Он также более подвержен появлению артефактов вокруг текста и элементов пользовательского интерфейса. NVENC намного быстрее восстанавливается после быстрых движений и дает в итоге меньше артефактов.
В случае Elder Scrolls Online программное кодирование возвращает себе репутацию. Преимущество NVENC в качестве при низком битрейте испаряется, и libx264 даже немного его опережает. Аппаратные кодировщики лучше себя показывают в случае с более сложными кадрами. По сравнению с NVENC, AMD VCN и здесь продолжает отставать.
Субъективно ни один из энкодеров не работает особенно хорошо. Даже при скорости 10 Мбит/с многие мелкие детали удаляются, а вокруг текста пользовательского интерфейса видны артефакты. Тем не менее, картинка от NVidia смотрится лучше, потому что в ней низкоконтрастные имена игроков проще прочитать.
Elder Scrolls Online. Слева 6900 XT, справа RTX 2060 при потоке видео в 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)
Транскодирование
В этом сценарии мы пытаемся сжать записанный клип высокого качества, чтобы получить файлы меньшего размера (скорость кодирования при этом не так важна). Как и в сценарии записи, мы используем постоянное квантование или коэффициент постоянной скорости, но каждый энкодер будет настроен на самую медленную предустановку самого высокого качества. Единственное исключение — 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 выдаст приемлемый результат.