基础参数

在使用N卡进行硬编码时,需要调整参数才能调整导出视频的码率相关设置

使用参数 -b:v 10M 即为锁定目标码率,该方式不适合画面剧烈波动的情况,可能导致不同画面体验不一致

使用参数 qp 即可使用CQP,使用cq参数即可使用CRF(注意这里不支持-crf,那个是CPU编码时才有部门情况下可以用)

关于CQP和CRF,可以参考 https://blog.csdn.net/HTT_97/article/details/116694867

简单来说,CRF可综合调整使得最后的视频质量是恒定的,也就是一致的,CRF可以提供跟QP一样的视觉质量,但是文件更小,CRF是通过降低那些人眼无法察觉到的帧的质量来达到此目的的。正常的取值范围不可为0也不可高于51。

QP是量化参数,用于控制每帧视频中每一个宏块的压缩量。实际上,QP 反映了空间细节压缩情况。QP 越小,就会保留越多的细节信息。

实战测试

我是用了3个视频片段进行测试,一个是OBS录制的4K60视频(57M比特率,av1),一个是使用XBOX Game Bar在2k屏幕录制的1080p60fps视频(34M比特率,h264),均为游戏视频,还有一个是通过Anime4KCPPGUI将一个不足1M码率的720P视频调整为1080P30FPS的视频(码率12M,h264)

分别对比如下

可以看到,AVC转码AV1、HEVC时,可能是AV1优化不到位还是什么的问题,实际上压缩效果还不一定谁好。

qp的波动极大,再加上取值范围很大,尤其是av1我试到170了。所以再加上动态调整效果不如crf模式合理,所以还是建议所以crf模式。

cq在20以内时,码率变化极少

各网站推荐码率

常见流媒体和视频网站

部分多取值范围的我取中值,注意这里是比特率,1字节=8比特,默认都是H264/AVC编码

哔哩哔哩官方推荐(视频上传)
https://member.bilibili.com/platform/upload/video/frame
1080P 6M、4K 20M

Youtube官方推荐(视频上传)
https://support.google.com/youtube/answer/1722171
1080P30FPS 8M、1080P60FPS 12M、4K30FPS 40M、4K60FPS 60M

Youtube官方推荐(直播流)
https://support.google.com/youtube/answer/2853702
1080P30FPS 4.5M、1080P60FPS 6.8M、4K30FPS 24M、4K60FPS 35M

Youtube官方推荐(视频在线播放)
https://support.google.com/youtube/answer/78358
1080P 5M、4K 20M

Twitch官方推荐(直播流)
https://stream.twitch.tv/encoding/
1080P30FPS 4.5M、1080P60FPS 6M

Netflix官方推荐(视频在线播放)
https://help.netflix.com/en/node/306
1080P 5M、4K 15M

其他厂商

IBM官方推荐(云转码流)
https://support.video.ibm.com/hc/en-us/articles/207852117
1080P 6M、4K 11M

NVIDIA官网教程
https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide/
1080P 9M、4K 30M。另外在HEVC录制时提到,推荐CQ15,推荐码率40M,推荐最大码率60M

华为云官网教程(直播流)

https://support.huaweicloud.com/live_faq/live_08_0051.html

H264下 1080P 2M、4K 8M

H265下 1080P 1.4M、4K 5.6M

小结

大多数平台4K压制到20-30M,1080P压制到6M,H264.AVC即可。如果是Youtube可加倍。如果考虑到压缩比的话,请看下文。

实验对比分析

以4K20-30M、1080P6M为例。注意,实验样本有限,仅供参考,请以实际情况为准。

4K60视频测试

CQ30差不多就是这个水平(27M),对照CQ30到HEVC是22M、AV1是28M,感觉在CQ30左右时AV1转出的不同格式视频并没有明显差距。

不过在AV1的视频用CQ1转AVC、AV1、HEVC时发现,同CQ下AV1日常打不过HEVC(码率),AV1对比AVC的压制比率高达35%,但是随着视频质量的下降(CQ增加),AV1优势慢慢减弱。

当然,CQ一致不代表真实体验就是一个样子的。在视频网站推荐的码率时,三个编码差距不大,但是质量越高,AVC劣势越明显。

1080P60视频测试

大概CQ33即可达到6M的水平,对照CQ33到HEVC估计是4M多点,AV1的话是8M多点。在这样低码率的时候,AV1甚至处于劣势,HEVC表现很稳定。

另外HEVC在CQ25左右码率都没有明显波动。

当然,CQ一致不代表真实体验就是一个样子的。参考NVIDIA官网的一篇关于VMAF的文章 https://developer.nvidia.com/blog/improving-video-quality-and-performance-with-av1-and-nvidia-ada-lovelace-architecture/

在VMAF表中可以发现,3M的AV1对标6M的H264,9M的AV1对标12M的H264。

外部网站参考数据

维基百科-HEVC

H265对比H264,在1080P下减少码率62%,4K的话是64%

维基百科-AV1

AV1的压缩效率较原先的VP9提升了20%

HEVC与VP9编码效率对比

从测试结果来看:VP9的编码效率在H.264之上,但是在HEVC之下

VP9与H.265的6个不同点

根据Nettfix的一项测试,H.265的表现比VP9高出约20%。尽管其他的测试产生了不同的结果,但他们都得出结论,H.265创建了更小的文件大小。根据所使用的客观度量标准( objective metric ),H.265比VP9节省了0.6%至38.2%的比特率。

HEVC(H.265)比AVC(H.264)除了压缩率大一些外还有哪些优势?

HEVC能拿到比AVC接近50%的压缩率

高效率视频编码 (HEVC)

HEVC 的效率大约是 AVC 的两倍

AV1 VS HEVC VS VP9

图中显示AV1对比AVC压缩优势高达55%

AV1:比HEVC/H.265更有效率的视频编码格式?

AV1的目标是在VP9/HEVC上基础上提高约30%的编码效率。

AV1显著超越H.265和VP9?—MSU最新比较公布

最新的编码质量对比研究表明,视频编码标准AV1在质量已经登顶,但在编码速度方面仍与VP9、HEVC相差甚远。MSU的研究表明,仅考虑编码质量时,AV1的性能已胜过HEVC和VP9,成为目前质量最高的可用视频编码标准。同时发现,在常规操作模式下,VP9相比于HEVC也有更好的编码质量。从图中可看到,在编码质量相同的情况下,AV1标准仅产生相比于x264 55%的数据量。

【专访】 Chrome HEVC 硬解背后的字节开源贡献者

HEVC 预期相比 H.264 最多可以节省 50% 的 CDN 流量

AV1是一个由开放媒体联盟开发的下一代编解码器。AV1比目前最先进的视频编解码器VP9的压缩效率提高了30%。AV1解码器将被添加到基于官方比特流规范的Chrome桌面x86设备(Windows、macOS、Linux、Chrome OS)。目前,支持仅限于 "主 "配置文件0,不包括编码功能。支持的容器是ISO-BMFF(MP4)。

在有解码HEVC的硬件(如GPU、媒体加速器等)的平台上启用对HEVC视频解码的支持(安卓5.0以上,macOS 11以上,Windows 8以上和ChromeOS上有支持的硬件)。

直播推流应该如何设置分辨率和码率?

H.265转码码率(比H.264下降30%)

总结

整体来说第三方数据和实验倒是出入不小。在都是用N卡进行硬编码时,至少在同CQ下,AV1并没有表现出优势,这可能是因为新添加的功能,也有可能是测试样本差异。

总体来说,录制时优先使用HEVC、AV1,而不是AVC,然后CQ调整到25左右即可在码率和质量取得一个较好的表现(对照AVC 4K CQ25是50M、1080P时则是16M)(此大小用来存储备份是挺不错的)然后交给网站去压缩。

如果要避免二压,则可能需要使用目标恒定码率 -b或者配合使用最大比特率-maxrate来控制比特率。

不过需要注意的是,该数据仅供参考,请以实际情况为准。

我的OBS配置

本地环境

大约500M下30M上,使用802.11ac-5G网络,不过由于距离限制和带宽冗余,实际下行400M上行35M左右(网卡 Intel AX210,主板自带,外置独立天线)

本地配置

i7-13700kf(z790-a主板)、ddr4 4000 16gX2(C17)、RTX4080 16G、仓库盘希捷机械ST4000VX015-4TB(海康OEM监控盘)、系统盘三星PM9A1-1TB(980PRO的OEM)

2K60显示器(通过DSR超分辨率到4K并使用175%缩放)

直播配置(哔哩哔哩源)

NV H264硬编码、原画不缩放(4K60)、VBR模式,比特率10M、最大比特率20M、关键帧间隔0(自动)、预设P2(较快,质量更低)、调节低延迟、单词编码、配置High、前向不开、心理开、最大B帧2

注:使用X264缩放到1080P进行直播时,CPU负载压力不是特别大(占用率估计20%左右),但是如果用X264进行4K直播时,CPU直接拉满起飞。而使用上述NV-H264硬编码时,CPU占用很低,且GPU的视频编码核心占用率也就10%左右。

录制配置

我录制到仓库盘希捷机械ST4000VX015-4TB(海康OEM监控盘),录制是比较令人头疼的,调低了视频不清晰,调高了视频文件太大,虽然指定码率可以有效控制视频大小,但是可能造成浪费和不足(比如静态页面就浪费空间了,高动态场景又不怎么够用)。经过一番调试,我发现在下面的配置情况下,比较能满足我的需求。我的目标是首先码率尽量不超过20M,同时画面体感正常,在考虑到哔哩哔哩等视频网站会压制到20M的水平,那么这个水平的视频上传不会造成太大的带宽浪费。为了调教动静态录制的问题,可以根据实际情况来调整,但是综合来说还是建议使用CQP模式。另外,如果是短时间的高动态场景可以把CQP拉高到15~25之间,如果是长时间的录播则可以降低CQP。我目前使用的配置如下:(不过可惜的是没有最大分辨率的限制)

NV AV1硬编码、原画不缩放(4K60)、CQP模式,CQ33、关键帧间隔0(自动)、预设P5(慢速,质量高)、调节低延迟、二次编码(1/4分辨率)、配置Main、前向不开、心理开、最大B帧2

在该模式和上面的直播一起开的情况下,都是4K60,GPU的视频编码核心占用率大概30%不到50%。当然,你也可以高CQ录好了之后自己再压制到目标水平。

参考资料

https://developer.nvidia.com/blog/improving-video-quality-and-performance-with-av1-and-nvidia-ada-lovelace-architecture
https://zh.wikipedia.org/zh-sg/%E9%AB%98%E6%95%88%E7%8E%87%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81
https://zh.wikipedia.org/wiki/AOMedia_Video_1
https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide
https://blog.csdn.net/leixiaohua1020/article/details/84479858
https://www.livevideostack.cn/news/6-points-of-comparison-for-vp9-or-h265/
https://www.zhihu.com/question/398544680
https://aws.amazon.com/cn/media/tech/high-efficiency-video-coding/
https://zhuanlan.zhihu.com/p/50665570
https://www.jianshu.com/p/c8d4079b204b
https://cloud.tencent.com/developer/article/1871647
https://video.stackexchange.com/questions/25961/configure-cqp-crf-for-h264-nvenc
https://blog.csdn.net/HTT_97/article/details/116694867
https://superuser.com/questions/1236275/how-can-i-use-crf-encoding-with-nvenc-in-ffmpeg
https://blog.csdn.net/qq_18998145/article/details/106419963
https://wangwei1237.github.io/2022/03/11/Understanding-Rate-Control-Modes/
https://superuser.com/questions/1236275/how-can-i-use-crf-encoding-with-nvenc-in-ffmpeg/1236387
https://www.livevideostack.cn/news/what-are-cbr-vbr-crf-and-capped-crf/
https://juejin.cn/post/7158700639030247460
https://chromestatus.com/feature/5729898442260480
https://chromestatus.com/feature/5186511939567616
https://support.huaweicloud.com/live_faq/live_08_0051.html