NVIDIA Video Codec SDK
A comprehensive set of APIs including high-performance tools, samples and documentation for hardware-accelerated video encode and decode on Windows and Linux.
Hardware-Based Decoder and Encoder
NVIDIA GPUs contain one or more hardware-based decoders and encoders (separate from the CUDA cores) which provide fully accelerated hardware-based video decoding and encoding for several popular codecs. This provides two benefits:
With decoding/encoding offloaded, the compute engine and the CPU are free for other operations.
Any processing pipeline which requires video and GPU compute in sequence runs far more efficiently. This is because the output of the video decoder can be directly provided to the GPU compute, and the output of the GPU compute can be directly provided to the video encoder without any extra memory/PCIe transfers.
GPU hardware accelerator engines for video encoding (referred to as NVENC) and video decoding (referred to as NVDEC) support faster-than-real-time video processing, which makes them suitable for use in multiple applications, including video transcoding, video data compression/decompression for deep learning, game broadcasting, virtual desktops, cloud gaming, secure video playback, etc. Video Codec SDK exposes the APIs that let you harness the NVENC and NVDEC for all video encoding/decoding capabilities of these engines. NVIDIA’s newest GPU architecture, Blackwell, further enhances the performance and quality of NVENC and NVDEC. The ultra-high quality (UHQ) mode for HEVC introduced in SDK v12.2 extends to AV1 in SDK v13.0 (January 2025). In addition, the Blackwell architecture supports 422 H.264; 422 HEVC; 422i, 420i H.264; multi-view HEVC, and improved H.264 throughput per NVDEC.
Hardware-Accelerated Video Encoding - NVENC
NVIDIA GPUs contain an on-chip hardware-accelerated video encoder (NVENC), which provides video encoding for H.264, HEVC (H.265) and AV1 codecs.
The software enhancements in SDK v13.0 enable extending ultra-high quality (UHQ) mode to AV1 encoding.. This makes AV1 encoding on Blackwell NVENC comparable to software AV1 encoding with ~3X throughput. The UHQ HEVC mode was introduced in the SDK v12.2 in the Ada generation.
Blackwell introduces 422 progressive and interlaced encode and decode support in hardware, enabling professional use cases in media and entertainment, video editing and broadcast. Multiple NVENCs working together can achieve performance as high as 8K video at 60FPS+.
Video Codec SDK 13.0 also introduces MV-HEVC for hardware-accelerated stereo encoding to address use cases in broadcast, auto and AR/VR headsets.
Using rich APIs in Video Codec SDK, NVENC can be used in a wide range of use cases requiring latency as low as cloud gaming and quality as high as OTT streaming and studio broadcasting. NVIDIA’s Python video bindings, such as PyNvVideoCodec, enable deep learning applications to harness the power of NVENC for video data curation and archiving.
GPU | H.264 (AVCHD) YUV 4:2:0 | H.264 (AVCHD) YUV 4:4:4 | H.264 (AVCHD) LOSSLESS | H.265 (HEVC) YUV 4:2:0 | H.265 (HEVC) YUV 4:4:4 | H.265 (HEVC) LOSSLESS | AV1 | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | |
Maxwell (1st Gen)* | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
Maxwell (2nd Gen) | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | N/A | N/A | N/A | N/A | N/A | N/A |
Maxwell (GM206) | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | N/A | N/A |
Pascal | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 10-bit | 8192 x 8192** | 10-bit | 8192 x 8192** | 10-bit | 8192 x 8192** | N/A | N/A |
Volta | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | N/A | N/A |
Turing | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | N/A | N/A |
Ampere (A100) |
No | No | No | No | No | No | No | No | No | No | No | No | No | No |
Ampere (non A100) |
8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | N/A | N/A |
Ada | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 4096 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 | 10-bit | 8192 x 8192 |
* Except GM108 and GP108 (not supported)
** Except GP100 (is limited to 4K resolution)
Hardware-Accelerated Video Decoding - NVDEC
NVIDIA GPUs contain an on-chip hardware-accelerated video decoder (NVDEC), which provides video decoding for several popular codecs.
The APIs in Video Codec SDK enable the software developers to harness the power of NVDEC for many use cases, ranging from traditional use cases such as secure video playback to accelerating video data ingestion and decoding for DNN training and inference.
NVDEC supports hardware-accelerated decoding of the following video codecs on Windows and Linux platforms: MPEG-2, VC-1, H.264 (AVCHD), H.265 (HEVC), VP8, VP9, and AV1 (see table below for codec support for each GPU generation).
With Blackwell GPUs, NVDEC doubles the video decoding throughput for H.264 decoding and adds support for 422 decoding for H.264 and HEVC codecs.
GPU | *H.265 (HEVC) 4:4:4 | H.265 (HEVC) 4:2:0 | H.264 (AVCHD) 4:2:0 | VP9 | VP8 | MPEG-2 | VC-1 | AV1 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | MAX Color | MAX Res. | |
Kepler | N/A | N/A | N/A | N/A | 8-bit | 4096 x 4096 | N/A | N/A | N/A | N/A | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Maxwell (1st Gen)* | N/A | N/A | N/A | N/A | 8-bit | 4096 x 4096 | N/A | N/A | N/A | N/A | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Maxwell (2nd Gen) | N/A | N/A | N/A | N/A | 8-bit | 4096 x 4096 | N/A | N/A | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Maxwell (GM206) | N/A | N/A | 10-bit | 4096 x 2304 | 8-bit | 4096 x 4096 | 8-bit | 4096 x 2304 | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Pascal | N/A | N/A | 12-bit | 8192 x 8192** | 8-bit | 4096 x 4096 | 12-bit**** | 8192 x 8192** | 8-bit | 4096 x 4096*** | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Volta | N/A | N/A | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Turing | 12-bit | 8192 x 8192 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Ampere
(A100) |
12-bit | 8192 x 8192 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | N/A | N/A |
Ampere
(non A100) |
12-bit | 8192 x 8192 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | 10-bit | 8192 x 8192 |
Ada | 12-bit | 8192 x 8192 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 12-bit | 8192 x 8192 | 8-bit | 4096 x 4096 | 8-bit | 4080 x 4080 | 8-bit | 2048 x 1024 | 10-bit | 8192 x 8192 |
* Except GM108 (not supported)
** Max resolution support is limited to selected Pascal chips
*** VP8 decode support is limited to selected Pascal chips
**** VP9 10/12 bit decode support is limited to select Pascal chips
Video Codec APIs
NVIDIA has provided hardware-accelerated video processing on GPUs for over a decade through the NVIDIA Video Codec SDK.
Video Codec SDK is a comprehensive set of APIs, high-performance tools, sample applications, reusable code, and documentation for hardware-accelerated video encoding and decoding on Windows and Linux.
The NVENCODE and NVDECODE APIs in the NVIDIA Video Codec SDK are C-style APIs, useful for high-performance encoding and decoding using NVENC and NVDEC, respectively. They expose most of the hardware functionality, along with other codec features that are commonly used. Video Codec SDK also provides a set of reusable code in the form of C++ classes built on top of the NVENCODE/NVDECODE APIs, which the applications can easily integrate. NVENCODE/NVDECODE APIs are comprehensive in nature, and expose a large number of codec capabilities, including advanced features.
DirectX and Vulkan Video, on the other hand, provide low-level, hardware-agnostic APIs, and attempt to provide more precise control over resource/memory allocation, task scheduling, and work submission to video hardware engines.
Whether you prefer DirectX or Vulkan, you can combine flexible GPU-accelerated video encoding and decoding with other GPU acceleration, like 3D and AI, using the language of your choice.
The low-level Vulkan Video extensions are also attractive to developers of popular open-source streaming media frameworks such as GStreamer and FFmpeg, both of which are being actively ported to Vulkan Video. The cross-platform availability of Vulkan will enable accelerated GPU processing for these frameworks across multiple platforms without needing to port to multiple proprietary video APIs. Please refer to the Vulkan Video getting started page for more details.
PyNvVideoCodec is another set of APIs introduced in Q4 2023, which provides simple APIs for harnessing video encoding and decoding capabilities when working with videos in Python. PyNvVideoCodec is a library that provides python bindings over C++ APIs for hardware accelerated video encoding and decoding. Major advantages of PyNvVideoCodec are: simple installation process, easy APIs with advanced features, and direct interoperability with many deep learning frameworks such as PyTorch.
Video Codec SDK, DirectX Video, Vulkan Video, and PyNvVideoCodec provide comprehensive support for GPU-accelerated video workflows. NVIDIA will continue to support these APIs, providing developers multiple options to choose from, and use the ones that best suit their needs.
Vulkan Video | DirectX Video | NVIDIA Video Codec SDK | PyNvVideoCodec | |
---|---|---|---|---|
Platform | Windows and Linux | Windows | Windows and Linux | Windows and Linux |
Benefits |
|
|
|
|
Native API interface | Vulkan Graphics | D3D11 (Decode only) and D3D12 | D3D9, D3D10, D3D11, D3D12 (Encode only) CUDA (Encode and decode) | CUDA (Encode and decode), PyTorch, TensorRT |
Partners and Examples
Latest Video Codec SDK News
New Video Creation and Streaming
Features Accelerated by the NVIDIA Video Codec SDK
Video Codec SDK 12.1 is available now, bringing improvements to split encoding and a new low-level NVENC API. Learn about the new features and how they've been used to accelerate video creation and streaming.
Improving Video Quality and
Performance With AV1 and NVIDIA Ada Lovelace Architecture
AV1 is the new gold standard video format, with superior efficiency and quality compared to older H.264 and H.265 formats. It's the most recent royalty-free, efficient video encoder standardized by the Alliance for Open Media.
AV1 Encoding and Optical Flow:
Video Performance Boosts and Higher Fidelity on the NVIDIA Ada Architecture
Updates to Video Codec SDK, including AV1 encoding on the new Ada GPU generation and updates to Optical Flow SDK, including the new frame rate up conversion library, are announced at GTC.