Графические процессоры NVIDIA содержат один или несколько аппаратных декодеров и кодировщиков (отдельно от ядер CUDA), которые обеспечивают полностью ускоренное аппаратное декодирование и кодирование видео для нескольких популярных кодеков. При включенном аппаратном декодировании / кодировании графический движок и ЦП свободны для других операций.
NVIDIA с графическими процессорами - начиная с поколения Kepler - содержит аппаратный кодер (называемый NVENC), который обеспечивает полностью ускоренное аппаратное кодирование видео и не зависит от производительности графики.
*Диаграмма поддерживает поддержку семейства NVIDIA Pascal GPU.
** 4:2:2 не поддерживается на HW (аппаратном уровне).
*** поддержка зависит от используемого кодека.
NVIDIA NVENC - это поддержка нового встроенного аппаратного H.264 видео кодера в чипсетах Kepler (6хх и 7хх серий), которая ускоряет работу кодирования видео до четырех раз. Поддержка разрешений до 4096х4096 и профилей: H.264 Base, Main, и High Profile Level 5.1. Поддержка MVC (Multiview Video Coding) для стерео видео и для Blu-ray 3D. Составляет прямую конкуренцию технологии Intel Quick Sync Video. Во время кодирования не используется основнойчип, поэтому потребление видеокарты составляет всего 10Вт.
NVENC обеспечивает высококачественную кодировку видео, которая быстрее и энергоэффективнее по сравнению с аналогичными кодировщиками на базе CPU (центрального процессора). Используя специальное аппаратное обеспечение для осуществления кодировки видео, ядра GPU с поддержкой CUDA и/или CPU свободны для выполнения других задач, требующих больших вычислительных ресурсов. NVENC на видеокартах GeForce может поддерживать не больше 2 одновременных потоков. NVENC на GRID GPU и Quadro K4000/M4000 и выше могут поддерживать столько потоков, сколько позволяет предел скорости кодировщика NVENC и свободная память.
Таблица с поддерживаемыми форматами и разрешениями (для графики поколения Pascal):
*Кроме GM108 (и как мы выяснили GP108).
**Кроме GP100 (ограничение разрешения, до 4K).
Таблица с поддерживаемыми форматами и разрешениями для видеокарт: Quadro, GRID Tesla
Поддержка технологии NVENC игровыми и профессиональными видеокартами, полный список:
Архитектура Kepler (GK104, GK106, GK107, GK110, GK110B, GK210, не GK208): поддержка кодирования HD 1080p, H.264/AVC high-profile (YUV420, I/P/B frames, CAVLC/CABAC),
8x реалтаймов H.264 1080p@240fps (1x = 1080p@30 fps), H.264/SVC (temporal), Display Encode Mode (DEM).
Игровые: GeForce GTX 645, GeForce GTX 650, GeForce GTX 650 Ti, GeForce GTX 650 Ti Boost, GeForce GTX 660, GeForce GTX 660 Ti, GeForce GTX 670, GeForce GTX 680, GeForce GTX 690, GeForce GT 710, GeForce GT 720, GeForce GT 730, GeForce GT 740, GeForce GTX 760, GeForce GTX 760 Ti, GeForce GTX 770, GeForce GTX 780, GeForce GTX 780 Ti, GeForce GTX Titan, GeForce Titan Black, GeForce GTX Titan Z, GeForce GT 640M LE*, GeForce GT 640M, GeForce GT 645M, GeForce GT 650M, GeForce GTX 660M, GeForce GTX 670MX, GeForce GTX 675MX, GeForce GTX 680M, GeForce GTX 680MX, GeForce GT 730M, GeForce GT 735M, GeForce GT 740M, GeForce GT 745M, GeForce GT 750M, GeForce GT 755M, GeForce GTX 760M, GeForce GTX 765M, GeForce GTX 770M, GeForce GTX 780M, GeForce 825M*, GeForce GTX 860M, GeForce GTX 870M, GeForce GTX 880M.
*В некоторых списках присутствуют следующие чипсеты (которые не поддерживают NVENC): GeForce GT 705 (GF119), GeForce GT 630 (есть GF108 и есть GK208), GeForce 920M (GK208B).
Профессиональные: GRID K1, GRID K2, GRID K340, GRID K520, Tesla K10, Tesla K20, Tesla K20X, Tesla K40, Tesla K80, Quadro 410, Quadro K420, Quadro K600, Quadro K2000, Quadro K2000D, Quadro K4000, Quadro K4200, Quadro K5000, Quadro K5200, Quadro K6000, Quadro K500M, Quadro K510M, Quadro K610M, Quadro K1000M, Quadro K1100M, Quadro K2000M, Quadro K2100M, Quadro K3000M, Quadro K3100M, Quadro K4000M, Quadro K4100M, Quadro K5000M, K5100M и Quadro NVS 510.
Архитектура Maxwell: первое поколение Maxwell (GM107, не GM108) поддержка кодирования HiP444 profile (YUV444, Predictive Coding, I/P frames), 16x реалтаймов H.264 1080p@480fps (1x = 1080p@30 fps), второе поколение Maxwell (GM200, GM204, GM206, не GM208) - HEVC/H.265 и 4K UHD 2160p@60fps H.264 (2160p60).
Игровые: GeForce GTX 745, GeForce GTX 750, GeForce GTX 750 Ti, GeForce GT 945A*, GeForce GTX 950, GeForce GTX 960, GeForce GTX 970, GeForce GTX 980, GeForce GTX 980 Ti, GeForce GTX Titan X, GeForce 830M*, GeForce 840M*, GeForce 845M*, GeForce GTX 850M, GeForce GTX 860M, GeForce 930M*, GeForce 940M*, GeForce GTX 950M, GeForce GTX 960M, GeForce GTX 965M, GeForce GTX 970M, GeForce GTX 980M и GeForce GTX 980.
Профессиональные: Quadro K620, Quadro K1200, Quadro K2200, Quadro M600M, Quadro M1000M, Quadro M2000M, Quadro M600M, Quadro M1000M, Quadro M2000M, Quadro NVS 810, Quadro M4000, Quadro M5000, Quadro M6000, Quadro M3000M, Quadro M4000M, Quadro M5000M, Tesla M6 и M60.
Архитектура Pascal: поддержка кодирования HEVC/H.265 Main10 10-бит, 4K UHD HEVC/H.265, 8K HEVC/H.265.
Игровые: GeForce GTX 1050, GeForce GTX 1050 Ti, GeForce GTX 1060, GeForce GTX 1070, GeForce GTX 1070 Ti, GeForce GTX 1080, GeForce GTX 1080 Ti, Nvidia Titan X и Titan Xp.
*Видеокарта GeForce GT 1030 не имеет встроенного блока NVENC.
Профессиональные: Quadro P400, Quadro P600, Quadro P1000, Quadro P2000, Quadro P4000, Quadro P5000, Quadro P6000, Quadro GP100, Tesla P4, Tesla P40, Tesla P100.
В драйверах nVidia убрана возможность CUDA-кодирования (NVCUVENC), осталась только CUDA-декодирование (NVCUVID). NVIDIA CUDA Video Decoder (NVCUVID) – это библиотека, которая предоставляет разработчикам доступ к аппаратным возможностям декодирования видео на NVIDIA GPU с поддержкой CUDA.
Аппаратное декодирование осуществляется либо на видеопроцессоре (VP), либо на аппаратном обеспечении с поддержкой CUDA, в зависимости от аппаратных возможностей и кодеков. Библиотека поддерживает следующие форматы видеопотока для платформы Windows: MPEG-2, VC-1 и H.264 (AVCHD).
Поколения NVENC: NVENC 1.0 (Kepler), NVENC 2.0 (Maxwell первое поколение), NVENC 3.0 (Maxwell второе поколение), NVENC 4.0 (Pascal).
NVENC на GPU архитектуры Turing. Чипы семейства Turing получили усовершенствованный мультимедийный блок. Новый декодер видеопотока NVDEC способен обрабатывать HEVC с форматом цвета YUV444 и глубиной 10/12 бит при частоте 30 кадров/с, а в декодировании VP9 реализована поддержка 10/12-битной глубины цвета. Аппаратный кодировщик HEVC, в свою очередь, способен записывать видео в разрешении 8K
с частотой 30 кадров/с, и было повышено качество кодирования по отношению к битрейту потока — как в формате HEVC, так и в формате H.264.
Новый блок NVENC снижает требования к полосе пропускания до 25% при формате HEVC и до 15% при формате H.264.
Кодировщик в новых GPU превосходит по качеству программный кодировщик x264, использующий быстрые (fast) настройки при значительно меньшем использовании ресурсов процессора.
В RTX 2070 и RTX 2080 добавили B-кадры для кодирования H.265/HEVC с помощью NVENC.
*Количество одновременно поддерживаемых потоков регулируется драйверами, и компания NVIDIA в версии драйвера GeForce Game Ready 446.14 WHQL для игровых видеокарт серии GeForce увеличила лимит с двух до трёх потоков.
Ограничение на три потока есть и среди профессиональных бюджетных видеокарт, а именно это касается следующих моделей: Quadro P400, Quadro P600, Quadro P620, Quadro P1000, Quadro T1000 (TU117). Также этот блок выпилен у мобильных профессиональных видеокарт: Quadro P500 (GP108), Quadro P520 (GP108).
...........................
Тестирование качества кодирования от rigaya. Качество NVENC кодирования Turion (TU106) & Pascal (GP106), источник - аниме: sample_movie_1080p.mpg
MPEG2 1920x1080 29.97fps 5203 frame.
Качество кодирования NVENC & QuickSync (nVidia GeForce RTX 2070 vs Intel Core i7-7700K):
Качество кодирования CPU & NVENC (x264/x265 vs NVENC):
Процессор & QSV & NVENC:
Качество кодирования процессором: x264 и x265.
Качество кодирования QuickSync - Intel Core i3-4130 с Intel HD Graphics 4400 и Intel Core i7-7700K с Intel HD Graphics 630 (Haswell vs Kabylake):
Общее кодирование с низким битрейтом 720р видео: sakura_op.mpg 1280x720 30fps 3501 frame (аниме).
Качество кодирования только силами центрального процессора (CPU):
Качество кодирования NVENC - Pascal vs Turing:
Качество кодирования Intel Quick Sync Video - Haswell vs Kabylake:
Качество кодирования CPU (QSV Kabylake) & NVENC (NVIDIA GeForce RTX 2070):
Качество кодирования CPU (Kabylake) & NVENC (NVIDIA GeForce RTX 2070):
Настройки кодировщиков:
x264 medium, --crf
x264 veryslow, --crf
x265 medium, --crf
x265 veryslow, --crf
x265 medium 10bit, --crf
x265 veryslow 10bit, --crf
nvenc H.264, --vbrhq 0 --vbr-quality
nvenc HEVC, --vbrhq 0 --vbr-quality
nvenc HEVC 10bit, --vbrhq 0 --vbr-quality
nvenc HEVC + Bframes, --vbrhq 0 --vbr-quality
nvenc HEVC 10bit + Bframes, --vbrhq 0 --vbr-quality
qsv H.264, --icq
qsv HEVC, --icq
qsv HEVC 10bit, --icq
...........................
Тесты скорости от 3DNews. Ffmpeg 4.0.2, кодирование H.264. AMD кодировалось с настройками: h264_amf -quality speed (AMD AMF H.264 Encoder), а nVidia с настройками: h264_nvenc -preset fast.
hevc_amf -quality speed и hevc_nvenc -preset fast.
...........................
Первая реализация NVENC кодирования появилась в программах Adobe Premiere Pro CS6 (Adobe Premiere Pro CC 2021) и Media Encoder CS6 (Adobe Media Encoder CC 2021) на платформе Windows. Для этого необходимо использовать свободно распространяемый плагин NVENC-export. Скачать плагин nvenc_export_v101.zip (объем архива: 2.8 Мбайта), можно на адобовском форуме в ветке по данному плагину:
Требования к железу и софту рабочей станции, для нормального использования NVENC плагина:
1)Видеокарты на чипсетах NVidia GPU Kepler
2)Установить в систему Microsoft Visual C++ 2010 SP1 Redistributable Package (x64) / vcredist_x64.exe. Выбираем: восстановить распространяемые части Microsoft Visual C++ 2010 x64... И нажимаем на кнопку: Далее >
По окончании процесса восстановления, нажимаем на кнопку: Готово.
Инструкция по установке в Adobe Premiere Pro CS6:
1)Просто копируем файл nvenc_export.prm в следующую директорию: C:\Program Files\Adobe\Adobe Premiere Pro CS6\Plug-ins\Common и C:\Program Files\Adobe\ Adobe Media Encoder CS6\Plug-ins\Common.
2)Для выбора NVENC-plugin в Premiere Pro, Ctrl+M и выбираем: Export Settings > Format: NVENC_export.
Качество: при использовании средне-высокого битрейта, NVENC кодирование сопоставимо с качеством штатного MainConcept, а при использовании низких битрейтов MainConcept лучше работает с меньшим количеством артефактов.
Как работает плагин: он забирает видеокадры из приложения Adobe Premiere Pro, затем преобразует кадры из несжатых YUV4:2:0 к планарному формату 420planar и далее в NV12-формат (с хост-процессором и системной памяти). После предварительной обработки переформатированное видео передается в nvencodeAPI. И отсюда, аппаратные средства NVENC, и управляют всеми аспектами сжатия видео. Когда NVENC аппаратная обработка будет закончена, он вызывает плагин для вывода отдать элементарные потоки, так как NVENC-аппаратные средства не кодирует ни аудио, ни создает мультиплекс, это по-прежнему осуществляется в программном обеспечении (на хост-процессоре).
Аппаратный блок NVENC имеет очень маленькие процессорные накладные расходы. Но поскольку кодирование видео, это всего один этап на всем пути рендеринга Adobe, загрузка центрального процессора скорее всего будет высокой и при использовании NVENC-плагина.
Максимально поддерживаемй размер кадра и профиль: H264 High-profile @ Level 5.1, 3840x2160 @ 30fps.
NVENC-плагин находится в статусе бета, поэтому многие вещи у него не работают: кодирование чересстрочного видео (нет поддержки в драйверах nVidia). Аудио поддержка очень ограничена: только несжатое PCM, нет поддержки AAC или Dolby Digital. Мультиплексор, только поддержка MPEG-2 TS за счет использования сторонних инструментов TSMuxer.exe. MPEG-2 TS файлы проигрываются в Windows Media Player (WMP) без звука, так как проигрыватель не поддерживает PCM-аудио в MPEG-2 TS файлах. Нет поддержки MPEG-4 (*. MP4).
NVENC не поддерживает работу в Multi-GPU режиме, просто у нас есть возможность выбрать только одну видеокарту/GPU. Из описаний работы технологии NVENC понятно, что аппаратный блок NVENC одинаков у всех видеокарт Kepler от GTX 650 до Titan/GTX 780, поэтому нет надобности тестить все видеокарты семейства Kepler, достаточно остановиться на одном чипсете семейства. Характеристики Gainward GeForce GTX 660 2048MB GDDR5:
Настройки плагина в Export Settings:
Закладка Multiplexer, доступен выбор двух контейнеров: TS и None.
Закладка Video > Nvidia GPU selection, здесь отображается информация о доступных видеокартах с поддержкой NVENC.
Нажимаем на кнопку: NVENC Info.
Закладка NVENC Config:
Если на выходе получаем картинку с "блочной" структурой, то устанавливаем для параметра numBFrames значение: 0.
Закладка Video codec group с одной доступной кнопкой: Codec Settings.
Нажимаем на кнопку: Codec Settings и отобразится информация с настройками видео кодека.
Закладка: Sample basic video param group.
Закладка Audio, с поддержкой всего одного формата звука: несжатого PCM, и выбором частоты дискретизации и каналов звука.
Загрузка центрального процессора (CPU) и оперативной памяти (RAM), последняя используется весьма активно.
Загрузку GPU видеокарты в утилите GPU-Z надо смотреть не как обычно в строке GPU Load, а в строке для загрузки видео ядра: Video Engine Load. Технология Boost Clock также не активизировалась.
1080p25 DSLR клип длительностью 2 минуты и 47 секунд, выводился: 38 секунд. Таблички индикатора статуса всплывают две, первая это основное время, а вторая всего на несколько секунд.
Информация (Properties) о полученном видео после рендеринга, которое импортировали в Adobe Premiere Pro CS6:
*В версии драйвера NVIDIA GeForce Graphics Driver 378.78 исправлена ошибка: [NVENC][Steam]: NvFBC H.264 ошибка кодирования. [1867544]
...........................
Тестирование скорости работы NVENC в Adobe Premiere Pro: