Nvidia NVENC
# Nvidia NVENC

Nvidia NVENC (abreviatura de Nvidia Encoder) es una característica de las tarjetas gráficas Nvidia que realiza la codificación de video, descargando esta tarea de cómputo intensivo de la CPU a una parte dedicada de la GPU. Se introdujo con la serie GeForce 600 basada en Kepler en marzo de 2012.

El codificador es compatible con muchos programas de grabación y transmisión en vivo, como vMix, Wirecast, Open Broadcaster Software (OBS) y Bandicam, así como con aplicaciones de edición de video, como Adobe Premiere Pro o DaVinci Resolve . También funciona con la captura de juegos Share, que se incluye en el software GeForce Experience de Nvidia.

Las tarjetas gráficas GeForce dirigidas al consumidor admiten oficialmente no más de 3 transmisiones de video codificadas simultáneamente, independientemente del número de tarjetas instaladas, pero esta restricción se puede eludir en los sistemas Linux y Windows aplicando un parche no oficial a los controladores. Al hacerlo, también se desbloquea NVIDIA Frame Buffer Capture (NVFBC), una rápida API de captura de escritorio que utiliza las capacidades de la GPU y su controlador para acelerar la captura. Las tarjetas profesionales admiten entre 3 y transmisiones simultáneas sin restricciones por tarjeta, según el modelo de tarjeta y la calidad de compresión.

Los chips Nvidia también cuentan con un decodificador integrado, NVDEC (abreviatura de Nvidia Decoder), para descargar la decodificación de video de la CPU a una parte dedicada de la GPU.

## Versiones

NVENC ha sido objeto de varias revisiones de hardware desde su presentación con la primera GPU Kepler (GK104).

NVENC Summary :

| Hardware de la GPU | Hardware de la GPU | Hardware de la GPU | H.264 (AVC) (En H.264, NVENC siempre es compatible con B Frame, resolución máxima de 4096x4096 y profundidad máxima de 8 bits) | H.264 (AVC) (En H.264, NVENC siempre es compatible con B Frame, resolución máxima de 4096x4096 y profundidad máxima de 8 bits) | H.264 (AVC) (En H.264, NVENC siempre es compatible con B Frame, resolución máxima de 4096x4096 y profundidad máxima de 8 bits) | H.265 (HEVC) | H.265 (HEVC) | H.265 (HEVC) | H.265 (HEVC) | H.265 (HEVC) | H.265 (HEVC) | AV1 |
| - | - | - | - | - | - | - | - | - | - | - | - | - |
| Generación NVENC | Nombre de código de GPU | NVENC por chip | Croma | Croma | Codificación sin pérdidas | Croma | Croma | Codificación sin pérdidas | Resolución | Profundidad del color | B Frames | AV1 |
| Generación NVENC | Nombre de código de GPU | NVENC por chip | 4:2:0 | 4:4:4 | Codificación sin pérdidas | 4:2:0 | 4:4:4 | Codificación sin pérdidas | Resolución | Profundidad del color | B Frames | AV1 |
| 1a Gen | GK110 | 1 | | | | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 1a Gen | GK107 | 1 | | | | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 1a Gen | GK106 | 1 | | | | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 1a Gen | GK104 | 1 | | | | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 2a Gen | GM108 | 0 | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles |
| 2a Gen | GM107 | 1 | | | | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 3a Gen | GM208 | 1 | | | | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | H.265 no compatible | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 3a Gen | GM206 | 1 | | | | | Si? No? | Si? No? | 4096 x 4096 | 8-bit | | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 3a Gen | GM204 | 2 | | | | | | | 4096 x 4096 | 8-bit | | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 3a Gen | GM200 | 2 | | | | | | | 4096 x 4096 | 8-bit | | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 4a Gen | GP108 | 0 | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles |
| 4a Gen | GP107 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 4a Gen | GP106 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 4a Gen | GP104-2xx+ | 2 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 4a Gen | GP104-1xx | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 4a Gen | GP102 | 2 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 4a Gen | GP100 | 3 | | | | | | | 4096 x 4096 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 5a Gen | GV10x | 3 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 5a Gen | TU117 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 6a Gen | TU116 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 6a Gen | TU106 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 6a Gen | TU104 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 6a Gen | TU102 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 7a Gen | GA106 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 7a Gen | GA104 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 7a Gen | GA102 | 1 | | | | | | | 8192 x 8192 | | | AV1 no soportado | AV1 no soportado | AV1 no soportado |
| 7a Gen | GA100 | 0 | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles | No hay codificadores NVENC disponibles |
| 8a Gen | AD104 | 2 | | | | | | | 8192 x 8192 | | | |
| 8a Gen | AD103 | 2 | | | | | | | 8192 x 8192 | | | |
| 8a Gen | AD102 | 2 | | | | | | | 8192 x 8192 | | | |

### Primera generación, Kepler GK1xx

La primera generación de NVENC, que es compartida por todas las GPU basadas en Kepler, es compatible con H.264 de alto perfil (YUV420, marcos I/P/B, CAVLC/CABAC), H.264 SVC Temporal Encode VCE y Display Encode Mode (DEM).

La documentación de NVidia establece un rendimiento máximo del codificador de 8 × en tiempo real a una resolución de 1920 × 1080 (donde la línea de base "1 ×" es igual a 30 Hz). El rendimiento real varía según los parámetros y ajustes predeterminados seleccionados y controlados por el usuario, y las frecuencias de reloj de GPU/memoria. La calificación de 8x publicada se puede lograr con el preajuste de alto rendimiento NVENC, que sacrifica la eficiencia y la calidad de la compresión por el rendimiento del codificador. El preajuste de alta calidad es considerablemente más lento pero produce menos artefactos de compresión

### Segunda generación, Maxwell GM107

Presentado con la arquitectura Maxwell de primera generación, NVENC de segunda generación agrega soporte para el perfil HP444 de alto rendimiento (YUV4: 4: 4, codificación predictiva sin pérdidas) y aumenta el rendimiento del codificador hasta 16 veces en tiempo real, lo que corresponde a aproximadamente 1080p @ 480 Hz con el preajuste de alto rendimiento.

Maxwell GM108 no es compatible con el codificador de hardware NVENC.

### Tercera generación, Maxwell GM20x

Presentado con la arquitectura Maxwell de segunda generación, NVENC de tercera generación implementa el algoritmo de compresión de video Codificación de video de alta eficiencia (también conocido como HEVC, H.265) y también aumenta el rendimiento del codificador H.264 para cubrir la resolución 4K a 60 Hz (2160p60). Sin embargo, no admite fotogramas B para la codificación HEVC (solo fotogramas I y P). El tamaño máximo de unidad de árbol de codificación (CU) NVENC HEVC es 32 (el estándar HEVC permite un máximo de 64) y su tamaño mínimo de CU es 8.

La codificación HEVC también carece de Sample Adaptive Offset (SAO). La cuantificación adaptativa, el control de velocidad anticipada, los fotogramas B adaptativos (solo H.264) y las funciones GOP adaptativas se agregaron con el lanzamiento de Nvidia Video Codec SDK 7. Estas características se basan en núcleos CUDA para la aceleración de hardware.

SDK 7 admite dos formas de cuantificación adaptativa; AQ espacial (H.264 y HEVC) y AQ temporal (solo H.264).

Las tarjetas de nivel de consumidor (GeForce) de Nvidia y algunas de sus tarjetas Quadro profesionales de gama baja están restringidas a tres trabajos de codificación simultáneos. Sus tarjetas Quadro de gama alta no tienen esta restricción.

### Cuarta generación, Pascal GP10x

NVENC de cuarta generación implementa la codificación de hardware HEVC Main10 de 10 bits. También duplica el rendimiento de codificación de 4K H.264 y HEVC en comparación con NVENC de la generación anterior. Es compatible con HEVC 8K, submuestreo de croma 4:4:4, codificación sin pérdidas y desplazamiento adaptativo de muestra (SAO).

Nvidia Video Codec SDK 8 agregó la función de predicción ponderada exclusiva de Pascal (basada en CUDA). La predicción ponderada no se admite si la sesión de codificación está configurada con tramas B (H.264).

No hay soporte B-Frame para la codificación HEVC, y el tamaño máximo de CU es 32 × 32.

NVIDIA GT 1030 y Mobile Quadro P500 son chips GP108 que no admiten el codificador NVENC.

En los gráficos para portátiles, los gráficos NVIDIA MX no incluyen NVENC, ya que se basan en un chip GM108 de generación Maxwell o GP108 de generación Pascal. La GeForce MX350 es un chip GP107 cuyo codificador NVENC está desactivado durante la fabricación.

### Quinta generación, Volta GV10x/Turing TU117

Volta NVENC tiene un rendimiento similar al NVENC de Pascal.

No ofrece soporte para HEVC B-Frames.

En gráficos móviles, como ocurre con la mayoría de los demás gráficos de la serie GeForce MX, la GeForce MX450 no es compatible con NVENC, ya que es un chip TU117 cuyo codificador de hardware está permanentemente desactivado en su fabricación. Sin embargo, la GeForce MX550 es compatible con NVENC ya que su codificador de hardware permanece habilitado en el nivel de fabricación.

### Sexta generación, Turing TU10x/TU116

NVENC de sexta generación implementa la codificación HEVC 8K a 30 FPS, fotogramas B HEVC y fotogramas B HEVC como referencia (con soporte para cada modo y modo medio) y soporte Alpha HEVC y proporciona hasta un 25 % de ahorro de tasa de bits para HEVC y hasta un 15 % de ahorro en la tasa de bits para H.264. Sin embargo, el lanzamiento inicial de la Nvidia GeForce GTX 1650 estuvo exento de esta generación, ya que utilizó Volta NVENC en lugar de Turing. Nvidia actualizó el codificador NVENC de las tarjetas GTX 1650 en 2020 para usar también el motor de Turing. La GTX 1650 Super utiliza el motor Turing NVENC, ya que se basa en el TU116 en lugar del TU117 utilizado en la GTX 1650 original.

### Séptima generación, Ampere GA10x

Ampere tiene esencialmente el mismo motor de generación NVENC que Turing. La única diferencia sustancial es que NVDEC recibió soporte para la decodificación AV1 (con grano de película).

En gráficos móviles de nivel de entrada, la GeForce MX570 basada en el chip GA107 viene en dos versiones, una de las cuales (la GeForce MX570 A) tiene el decodificador y codificador de hardware permanentemente desactivados durante la fabricación.

### Octava generación, Ada Lovelace AD10x

Nvidia anunció el NVENC de próxima generación con codificador de hardware de función fija 8K 10 bits 60FPS AV1 en GPU Ada Lovelace.

## Soporte del sistema operativo

El núcleo Nvidia NVENC SIP debe ser compatible con el controlador del dispositivo. El controlador proporciona una o más interfaces (por ejemplo, OpenMAX IL) a NVENC. Solo se puede acceder al núcleo NVENC SIP a través de la API NVENC patentada (a diferencia de la API VDPAU de código abierto).

Se incluye con el controlador GeForce de Nvidia.

NVENC está disponible para los sistemas operativos Windows y Linux. El controlador de dispositivo nouveau gratuito y de código abierto no es compatible con Nvidia NVENC.

## Soporte de software de aplicación

* Adobe Premiere Pro agregó compatibilidad con NVENC en la versión 14.2 en mayo de 2020
* AJA Bridge Live
* Avidemux es compatible con NVENC desde al menos 2016, en H.264 o H.265
* Bandicut
* DaVinci Resolve Studio al exportar video en H.264 o H.265
* FFmpeg es compatible con NVENC desde 2014, y es compatible con los controladores de Nvidia
* HandBrake es compatible con NVENC desde la versión 1.2.0 (diciembre de 2018), para H.264 y H.265
* HitFilm express/pro al previsualizar videos en la línea de tiempo o exportar videos en H.264 o H.265
* Jellyfin tiene soporte para NVENC para transcodificación en tiempo real
* Logitech Capture
* MacroSystem BogartSE admite la exportación NVENC desde la versión 9.4 (octubre de 2017) y la codificación UHD-Disc desde la versión 11.3 (octubre de 2019)
* MediaCoder
* Open Broadcaster Software (OBS)
* Shotcut
* StaxRip
* VideoProc

## Rendimiento de GPU

Comparación del rendimiento de codificación

| Streams | Codificación H.264 (1080p30) |
| - | - |
| GM204 (Tesla M6) | 18 |
| GM107(Tesla M10) | 28 |
| GM200 (Tesla M40) | 18 |
| GM204(Tesla M60) | 36 |
| GP104(Tesla P4) | 24 |
| TU104 (Tesla T4) | 32 |
| P100 | 36 |
| V100 | 36 |
