实战 NVENC 快速编码存档视频

By | 2022年1月1日

0.前言

使用显卡进行视频编码加速其实并不是什么新鲜技术,早在2011年 Intel 就在处理器中增加了名为 Quick Sync 的硬件编码单元用以加速视频处理。而 Nvidia 这边利用 CUDA 核心的通用计算能力进行视频编码加速时间还要更早一些。但彼时受限于技术水平和编码规范本身,显卡硬编码除了速度之外优势似乎并不明显。对于低码率区间,硬件编码的画质更是可以用惨不忍睹来形容。

不过随着技术的演进和时代的变化,配备 HEVC 编码加速支持的现代显卡又再度回到了大众的视野当中。对于时下热门的直播类主播而言,要在画质、转码速度、延迟三者之间找到平衡点并非易事。而使用显卡进行编码加速无疑是众多解决方案中性价比最高的一个。

我们今天的主角 NVENC 是 Nvidia 自 Kepler 架构显卡(600系)起所配备的独立显卡编码加速单元。相较于过往使用 CUDA 通用计算进行加速,NVENC 无论是画质还是性能方面都有了长足的进步。今天我们便以 NVENC 为例,实战处理非常常见的 1080P 30fps 6Kbps 标准的视频压缩存档。(相信大家应该都明白)

1.软件及硬件

由于 reizhi 囊中羞涩并买不起 RTX 显卡,以下的配置方案基于 Pascal 架构的 GTX 1080 显卡。如果你使用的也是10系显卡的话可以直接抄作业,16/20/30系可以对参数稍加改动。

不支持 NVENC 的显卡:MX130 MX150 MX330 MX350 GT 1030 等。

软件方面使用的是 StaxRip ,对于 ffmpeg/NVENC 套壳软件而言画质上其实并不会有什么区别,更多的是 GUI 是否方便好用。下载地址见文末。

注:本文与任意第三方无利害关系,请放心食用。

2.新增配置模板

运行软件后,依次点击:x265 – Edit Profiles ,选中 Nvidia | H265 后点击右侧的 Clone ,最后点击 Rename 将复制的模板重命名为好记的名字,如 nvenc 。

双击刚刚新建的配置模板,进入详细参数设置。

3.详细参数设置

3.1 Basic

Basic 页面顾名思义是一些基本参数,其中 Bitrate 项10系显卡建议设置为3700,16/20/30系显卡可酌情降低20%左右。其他项目如图设置即可。

额外说明:除非使用的是900系显卡,无论源视频是否为10位色深,此处都按图设置。

3.2 Rate Control

Rate Control 页面主要用于控制码率,其中 Max Bitrate 和 VBV Bufsize 项10系显卡看图即可,16/20/30系显卡可对应降低20%左右。

注意 Multipass 项选择 2Pass-Full ,其他如图所示即可。如果希望牺牲一定的画质来提高转码速度,也可以选择为 2Pass-Quarter 。

3.3 Slice Decision

Slice Decision 页面主要是和关键帧有关的一些设置项,此处按图设置即可。

额外说明:10系显卡不支持带 B 帧的 HEVC 编码,所以前两项设置仅在16/20/30系显卡上生效。

3.4 Analysis

Analysis 页面只需要勾选 Enable weighted prediction in P slices 一个项目即可,这里就不截图了。

3.5 VPP

VPP 是 Video Post Processing 的缩写,即视频后处理。这里通常是一些视频后期强化调整的项目。

如果需要对视频进行反交错处理,进入 Deinterlace 页面,选择 AFS 或 Nendi 均可。使用默认参数,实测效果没有明显区别。

额外说明:如果选择 AFS ,还要在 Input/Output 页面为 Interlace 项选择 Top Field First 。

reizhi 在10系显卡上测试使用 nvenc 后发觉画面锐度略有下降,推荐按照上图设置轻微的细节锐化。

3.6 其他

如果需要计算 SSIM 和 PSNR ,可以进入 Statistic 页面进行勾选。如果不了解其含义请不要勾选。

Input/Output 页面的 Decoder 项选择 ffmpeg(DXVA2) 以便使用显卡进行视频解码,加快整体转码速度。

全部完成后,点击右下角的向下箭头,选择 Save Profile 保存刚刚的预设,最后点击 OK 返回软件主界面。

4.添加转码任务

确认好配置模板选择的是之前创建的 nvenc ,容器格式选择 mp4 ,点击最下方的 Click here …… 来添加待转码的视频到 StaxRip 中。最后点击 Start 即可启动转码任务。

如果还需要对视频进行调整分辨率或帧率等操作,可以在添加任务前点击 AVS Filters 进行相关的设置。

由于 Nvidia 在2020年6月将消费级(Geforce)显卡的 NVENC 会话数限制提高到了3,我们可以打开3个 StaxRip 同时运行转码任务。只需要启动一个新的实例,依次点击 Tools – Jobs – Start 即可。

额外说明: 在转码完成后可以删除 _temp 为后缀的同名文件夹。

5.速度和能耗

在 reizhi 的系统上,3实例的合计速度可以达到 340-360fps ,GPU 报告的功率消耗为 83.6w 。

额外说明:由于配备了2个 NVENC 模块(Titan V 为3个),1070/1070ti/1080 的转码速度要高于16/20/30系显卡。但除1650外,后者支持带 B 帧的 HEVC 编码,同体积下能够提供更好的画质。

6.画质和体积

以其中一个编号为 SSNI-805 的文件为例,编码前文件大小为 5.11G ,编码后为 3.32G ,压缩率64.97%。

视频质量分析数据如下(基于前30分钟):

SSIM: Y:0.993126 U:0.996568 V:0.995596 All:0.994112
PSNR: psnr_avg:50.43 psnr_y:49.51 psnr_u:53.65 psnr_v:52.84
VMAF: 98.513620

如果你对以上指标并不熟悉,那么用更通俗方式来表述就是:在逐帧100%分辨率肉眼对比的情况下,仍然有较高的难度来区分源视频和受损视频。

7.其他资料

如果你对 VMAF 感兴趣,可以参见之前的文章:使用VMAF对视频质量进行分析

StaxRip 项目地址:https://github.com/staxrip/staxrip/

NVENC 详细支持列表:https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new

4 thoughts on “实战 NVENC 快速编码存档视频

  1. river ai

    这个例子厉害了。

    我对视频保存的需求是希望有个什么软件,可以把所有视频全部做到语音转文字,然后方便快速回顾。这种方法就适合看网课视频。

    Reply
  2. 404

    请问VMAF参数在哪里看结果?设置里勾选了结束后再log里没找到

    Reply
    1. reizhi Post author

      不建议在转码时选vmaf,转码会非常慢。
      结果在原视频文件夹下_tmp里

      Reply

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

滑动到最右以进行验证 *