NVIDIA 视频编解码器 SDK v13.0

NVENC 应用说明

NVIDIA GPU - 从 Kepler 世代开始 - 包含一个基于硬件的编码器(在本文档中称为 NVENC),它提供完全加速的基于硬件的视频编码,并且独立于图形/CUDA 核心。通过将端到端编码卸载到 NVENC,图形/CUDA 核心和 CPU 核心可以自由地执行其他操作。例如,在游戏录制场景中,将编码卸载到 NVENC 使图形引擎完全可用于游戏渲染。在视频转码用例中,视频编码/解码可以在 NVENC/NVDEC 上并行进行,同时在 CUDA 核心上进行其他视频后处理/预处理。

NVENC 中可用的硬件功能通过本文档中称为 NVENCODE API 的 API 公开。本文档提供有关硬件编码器的功能以及通过 NVENCODE API 公开的功能的信息。

简介

NVENC 功能

NVENC 可以为 H.264、HEVC 8 位、HEVC 10 位、AV1 8 位和 AV1 10 位执行端到端编码。这包括运动估计和模式决策、运动补偿和残差编码以及熵编码。它也可以用于生成两个帧之间的运动矢量,这对于深度估计、帧插值、使用 NVENC 不支持的其他编解码器进行编码或混合编码等应用非常有用,在混合编码中,运动估计由 NVENC 执行,其余编码在系统的其他地方处理。这些操作由 GPU 芯片上的专用块进行硬件加速。NVENCODE API 提供了利用硬件编码功能所需的旋钮。

表 1 总结了通过 NVENCODE API 公开的 NVENC 硬件的功能。

功能描述Kepler GPU第 1 代 Maxwell GPU第 2 代 Maxwell GPUPascal GPUVolta 和 TU117 GPUAmpere 和 Turing GPU(TU117 除外)Ada GPUBlackwell GPU
H.264 baseline、main 和 high profiles编码 YUV 4:2:0 序列并生成 H.264 比特流的能力。
H264 high10 profile支持编码 10 位内容生成 H.264 比特流。
H.264 4:2:2 编码编码 YUV 4:2:2 序列并生成 H.264 比特流的能力。
H.264 4:4:4 编码(仅 CAVLC)编码 YUV 4:4:4 序列并生成 H.264 比特流的能力。
H.264 无损编码无损编码。
H.264 运动估计 (ME) 仅模式提供宏块级别运动矢量和帧内/帧间模式的能力。
H.264 场编码编码场内容的能力。
H.264/HEVC 加权预测支持加权预测。
H.264 ARGB 内容的编码支持编码 RGB 输入的能力。
H.264 的多个参考帧使用不同参考帧的能力
HEVC main profile编码 YUV 4:2:0 序列并生成 HEVC 比特流的能力。
HEVC 无损编码无损编码。
HEVC main10 profile支持编码 10 位内容生成 HEVC 比特流。
HEVC 4:2:2 编码编码 YUV 4:2:2 序列并生成 HEVC 比特流的能力。
HEVC 4:4:4 编码编码 YUV 4:4:4 序列并生成 HEVC 比特流的能力。
HEVC 运动估计 (ME) 仅模式提供 CTB 级别运动矢量和帧内/帧间模式的能力。
HEVC 8K 编码支持编码 8192 × 8192 内容。*
HEVC 采样自适应偏移 (SAO)提高编码视频质量。
HEVC B 帧提高编码质量
HEVC 的多个参考帧使用不同参考帧的能力
AV1 main profile支持编码 YUV 4:2:0 8 位和 10 位内容,分辨率高达 8192 × 8192,并生成 AV1 比特流。

  • :支持, :不支持
  • *在部分 Pascal 世代 GPU 中支持

NVENC 许可政策

就 NVENC 硬件编码而言,NVIDIA GPU 分为两类:“合格”和“不合格”。在合格的 GPU 上,并发编码会话的数量受可用系统资源(编码器容量、系统内存、显存等)的限制。在不合格的 GPU 上,每个系统的并发编码会话数量限制为 8 个。每个系统 8 个并发会话的限制适用于在系统中存在的所有不合格卡上执行的编码会话的总数。

有关合格和不合格 GPU 的完整列表,请参阅 https://developer.nvidia.com/nvidia-video-codec-sdk

例如,在一个配备一块 Quadro RTX4000 卡(属于合格 GPU)和三块 GeForce 卡(属于不合格 GPU)的系统中,应用程序可以在 Quadro RTX4000 卡上运行 N 个并发编码会话(其中 N 由编码器/内存/硬件限制定义),并在所有 GeForce 卡上总共运行 8 个会话。因此,此类系统的并发编码会话数量限制为 N + 8。

NVENC 性能

随着每一代 NVIDIA GPU(Maxwell 第 1/2 代、Pascal、Volta、Turing、Ampere 和 Ada)的推出,NVENC 性能稳步提升。表 2 提供了 Pascal、Turing 和 Ada GPU 在不同预设和码率控制模式下的 指示性1 NVENC 性能(这两个因素在决定性能和质量方面起着重要作用)。请注意,表 2 中的性能数据是在 GeForce 硬件上测量的,并假设了表下所列的条件。性能因 GPU 类别(例如 Quadro、Tesla)而异,并且对于每个硬件,性能(几乎)与时钟速度呈线性关系。

虽然第一代 Maxwell GPU 每个芯片只有一个 NVENC 引擎,但第二代 Maxwell、Pascal、Volta 和 Ada GPU 的某些变体每个芯片有两个/三个 NVENC 引擎。这提高了 GPU 的总编码器性能。NVIDIA 驱动程序负责在芯片上的多个 NVENC 引擎之间进行负载平衡,因此应用程序不需要任何特殊代码来利用多个编码器,并且可以自动从更高端 GPU 硬件上的更高编码器容量中受益。表 2 中列出的编码性能是每个 NVENC 引擎给出的。因此,如果 GPU 有 2 个 NVENC(例如 GP104、AD104),则将 表 2 中的相应数字乘以每个芯片的 NVENC 数量,即可获得总的最大性能(仅在运行多个并发编码会话时适用)。请注意,除非启用拆帧编码,否则单次编码会话的性能不能超过每个 NVENC 的性能,无论 GPU 上存在多少 NVENC。多 NVENC 拆帧编码是 SDK12.0 在 Ada GPU 上为 HEVC 和 AV1 引入的一项功能。有关此功能的更多详细信息,请参阅 NVENC 视频编码器 API 编程指南。

NVENC 硬件原生支持多个硬件编码上下文,上下文切换开销可忽略不计。因此,在硬件性能限制和可用内存的约束下,应用程序可以同时编码多个视频。NVENCODE API 公开了多个预设、码率控制模式和其他参数,用于对硬件进行编程。这些参数的组合使视频编码能够在不同的质量和性能水平下进行。一般来说,可以牺牲性能来换取质量,反之亦然。

预设RC 模式调优信息H.264HEVCAV1
PascalTuringAmpereAdaBlackwellPascalTuringAmpereAdaBlackwellAdaBlackwell
p1CBRLL6678558689109775399329431055113410901076
VBRHQ69283384688594850692093910371119741957
p3CBRLL649600613652718442463467494529774798
VBRHQ398602617647708443552557706947549678
p5CBRLL363271273291323370305307343506512624
VBRHQ327264266283317371334335411521440552
p7CBRLL321229231247264345306308343464356395
VBRHQ250207213211227260171171181181323401

  • 分辨率/输入格式/位深:1920 × 1080/YUV 4:2:0/8 位
  • 以上测量是使用以下 GPU 进行的:GTX 1060 用于 Pascal,RTX 8000 用于 Turing,RTX 3090 用于 Ampere,RTX 4090 用于 Ada。所有测量均在 nvidia-smi 报告的最高视频时钟下完成(即 GTX 1060、RTX 8000、RTX 3090 和 RTX 4090 分别为 1708 MHz、1950 MHz、1950 MHz、2415 MHz)。对于每个系列的其他 GPU,性能应根据 nvidia-smi 报告的视频时钟进行缩放。有关 nvidia-smi 的信息,请访问 https://developer.nvidia.com/nvidia-system-management-interface
  • Volta GPU 的 H.264 和 HEVC 编码 fps 可以通过将上表中的 Pascal fps 乘以 nvidia-smi 报告的时钟比率获得。
  • 软件:Windows 11,视频编解码器 SDK v13.0
  • CBR:恒定比特率控制模式,VBR:可变比特率控制模式,LL:低延迟调优信息,HQ:高质量调优信息

NVENC 编程

有关所需驱动程序版本的信息,请参阅 SDK 发行说明。

有关如何编程 NVENC 的详细信息,请参阅 SDK 包中包含的文档和示例应用程序。

FFmpeg 支持

FFmpeg 是最流行的多媒体转码工具,广泛用于视频和音频转码。

NVIDIA GPU 中的视频硬件加速器可以有效地与 FFmpeg 结合使用,以显著加快视频解码、编码和端到端转码的速度,并实现非常高的性能。有关如何将 NVENC 或 NVDEC 与 FFmpeg 结合使用的更多信息,请参阅视频编解码器 SDK 中的 FFmpeg 指南。

请注意,FFmpeg 是开源项目,其使用受 FFmpeg 的特定许可和条款与条件的约束。

声明

本文档仅供参考,不应被视为对产品的特定功能、条件或质量的保证。NVIDIA Corporation(“NVIDIA”)不对本文档中包含的信息的准确性或完整性做出任何明示或暗示的陈述或保证,并且对本文档中包含的任何错误不承担任何责任。对于因使用此类信息或因使用此类信息而可能导致的侵犯第三方专利或其他权利的行为,NVIDIA 概不负责。本文档不构成对开发、发布或交付任何材料(如下定义)、代码或功能的承诺。

NVIDIA 保留随时对本文档进行更正、修改、增强、改进和任何其他更改的权利,恕不另行通知。

客户应在下订单前获取最新的相关信息,并应验证此类信息是否为最新且完整。

NVIDIA 产品根据订单确认时提供的 NVIDIA 标准销售条款和条件进行销售,除非 NVIDIA 和客户的授权代表签署的单独销售协议(“销售条款”)另有约定。NVIDIA 特此明确反对将任何客户一般条款和条件应用于购买本文档中引用的 NVIDIA 产品。本文档不直接或间接地构成任何合同义务。

NVIDIA 产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命维持设备,也不适用于 NVIDIA 产品的故障或失灵可以合理预期会导致人身伤害、死亡或财产或环境损害的应用。NVIDIA 对在任何此类设备或应用中包含和/或使用 NVIDIA 产品不承担任何责任,因此此类包含和/或使用由客户自行承担风险。

NVIDIA 不保证或声明基于本文档的产品适用于任何特定用途。NVIDIA 不一定对每个产品的所有参数进行测试。客户有责任评估和确定本文档中包含的任何信息的适用性,确保产品适合客户计划的应用,并为应用执行必要的测试,以避免应用或产品的缺陷。客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本文档中包含的附加或不同条件和/或要求。对于可能基于或归因于以下原因的任何缺陷、损坏、成本或问题,NVIDIA 概不负责:(i)以任何违反本文档的方式使用 NVIDIA 产品,或(ii)客户产品设计。

商标

NVIDIA、NVIDIA 徽标以及 cuBLAS、CUDA、CUDA Toolkit、cuDNN、DALI、DIGITS、DGX、DGX-1、DGX-2、DGX Station、DLProf、GPU、Jetson、Kepler、Maxwell、NCCL、Nsight Compute、Nsight Systems、NVCaffe、NVIDIA Deep Learning SDK、NVIDIA Developer Program、NVIDIA GPU Cloud、NVLink、NVSHMEM、PerfWorks、Pascal、SDK Manager、Tegra、TensorRT、TensorRT Inference Server、Tesla、TF-TRT、Triton Inference Server、Turing 和 Volta 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其关联的各自公司的商标。

1

编码器性能取决于许多因素,包括但不限于:编码器设置、GPU 时钟、GPU 类型、视频内容类型等。
© 2010-2025 NVIDIA Corporation。保留所有权利。 上次更新于 2025 年 1 月 27 日。