专栏/是什么影响了视频的码率

是什么影响了视频的码率

2022年04月19日 04:00--浏览 · --点赞 · --评论
粉丝:4.2万文章:436

团队简介:

B站视频云团队,负责B站的视频存储、编解码和视频传输等业务。


1. 前言

对于观众而言,视频编码是一门熟悉但又陌生的技术。熟悉是因为用户点开链接就能看到视频,而每一条视频都是经过压缩编码的。陌生是因为观众对于视频编码这种专业词汇基本都没有听说过。

没听说过的原因之一,是因为视频压缩编码技术相当硬核,要理解这门技术并不容易。所幸 B 站卧虎藏龙,前段时间知名 UP 主差评君发布了一条科普视频,生动形象地介绍了视频编码的基本原理,可以作为编码技术的启蒙材料。


图片

差评君科普视频编码技术

我们常听到的视频码流是指视频经过压缩编码后 0/1 比特的数据流,而码率是指每秒视频包含的比特数量。原始视频格式中的像素数据非常庞大,不经过压缩编码就无法被有效地存储和传输。比如分辨率为1920×1080(2K),每秒 30 帧的原始 RGB 视频数据,1 秒的数据量约 1.4 Gb,也就是 1.4 Gbps 的码率。那按照普通家庭 100 Mbps 的带宽,则需要 14s 左右才能缓冲 1s 的 2K 视频内容,这根本就无法流畅地观看。

观看视频时遇到卡顿和缓冲,是最让人恼火的体验。因此在提供视频内容时,视频平台都会将视频进行压缩并提供多种码率,让处在不同带宽环境下的观众都能流畅地观看视频。

那视频数据是如何被压缩的呢?原始视频数据中存在大量冗余,包括空间和时间上重复的信息。除此之外,由于人眼分辨力有限,无法察觉所有细节,因此人眼无法识别的数据也是冗余的信息,去除这些冗余就可以对视频数据量进行压缩。

所以编码算法就利用了颜色空间转换、块划分、帧内预测、运动搜索、运动补偿、DCT变换、量化、熵编码等技术,在不损伤主观画质的前提下,去除各类冗余数据,从而大大减少了记录视频信息所需要的码率。正是经过编码,用户端才能实时地接收视频码流。


图片
编码标准发展帮助视频应用落地

视频编码技术自上世纪 80 年代诞生以来,不断向前发展,其目的主要有两个:一是支持新兴的视频格式,比如HDR、8K、全景视频等,以满足不断升级的视频应用需求;二是在保持主观画质的前提下,不断降低码率,以提升视频存储和传输的效率,将用户的观看体验改善得更为流畅。

因此越先进的编码标准支持的视频格式就越丰富,压缩码率就越低。比如 H.265/HEVC 相对比 H.264/AVC 标准而言,对 HDR 和 8K 视频的兼容性支持得更好,同时画质不变时码率平均可以下降约40%。

图片
HEVC 使用了更先进的块划分、帧内预测等技术,对超高清视频进行编码时,HEVC 的码率比 AVC 更低,画质更好

实际上视频在压缩后的码率会受到很多因素影响,结果可能会千差万别。在拥有相同主观画质的前提下,有的压缩视频码率可以很低,而有的视频码率却很高。

为了理解这一现象,我们来深入地聊聊几个影响视频码率的因素。


2. 影响视频码率的因素

在保证相同主观质量的前提下,视频编码后的码率会受到视频内容特性,码率控制策略,编码算法等因素的影响。


2.1 视频内容特性

不同视频内容中包含的数据冗余量是不同的。在保证主观画质一样的前提下,视频内容越简单,其中包含的有效信息量就越少,那么可以被压缩的空间就越大,输出的码率就越低;反之视频越复杂,其中包含的信息量就越大,可压缩空间有限,输出码率就越高。

而视频的特性是由分辨率、帧率、空间相关性和时间相关性等属性所决定的。


2.1.1 分辨率和帧率

分辨率表示的是一幅视频帧中长宽各有多少像素,分辨率越高,画面细节越丰富,观感越细腻。比如常见的 2K 或 1080p 格式是指每帧画面由 1920×1080 个像素组成。4K 视频每帧有 3840×2160个像素,原始数据量是 2K 视频的 4 倍之多。

因此原始 4K 视频缩放到 2K 之后,编码 2K 所需的码率一般会比编码 4K 更低。根据这个特性,视频网站会提供多种分辨率的视频码流,用户在网络不佳的时候,可以切换成低分辨率的码流,这主要就是因为低分辨率视频所需的码率更低。

图片
分辨率越大,数据量越多,所需码率越高

同理,帧率表示视频在一秒内包含的视频帧数量,帧率越高,观感越顺滑,但原始视频数据量也就越大,所需码率也就更高。

但是码率与分辨率或帧率并不是简单的线性关系,这是因为分辨率或者帧率提升之后,像素间的相关性也会更强,包含的冗余数据会更多。编码器压缩高分辨率或者高帧率视频时,可能会取得更高的压缩率,所以码率并不会按像素数量成比例地增加。


2.1.2 空间相关性

空间相关性是指一帧视频中像素之间的相似性,用来衡量视频在空间维度上的冗余量。


图片
画面简单的视频有很多像素块是重复的,而在画面复杂的视频中很难找到重复的像素块

上面两张图中,有大片纯色区域的视频帧,很容易在周围找到很多相似的像素块,空间相关性就很高。反之内容高度随机的雪花图内,很难在周围找到匹配的像素块,空间相关性就很弱。

对空间相关性强弱不同的视频进行编码,所需码率的差别会很大。这是因为编码器采用了帧内预测技术,其原理是在压缩像素块的时候,会在周围已编码的像素块中找到相似内容作为参考,先预测出一个图像块,然后计算原始图像块与预测块之间的差异(又称残差)信息,最后只需要编码残差块即可。在解码时则先解码出参考像素块,通过预测得到预测图像块之后,再将残差块与预测块相加,即可解码出图像。


图片
编码相似的图像块,只需要记录差异信息即可

所以对于空间相关性强的视频,很容易找到相似的像素块,这些像素块之间的差异不大,编码残差块所需要的码率就越低。反之,空间相关性越弱的视频,像素块之间差异信息就越多,码率也会随之提高。

根据这个原理,就可以解释一些有趣的现象。比如当用户将低分辨率的视频简单地放大成高分辨率视频之后再进行编码,会发现高分辨率版本的视频,虽然像素数量增加了很多,但是码率并不会明显上升。

这是因为图像在放大过程中,高分辨率画面中多出来的像素,是由低分辨率画面中的像素通过线性组合等方式插值出来的,它们之间有很强的相关性。编码器能够识别出这样的相关性并加以去除,所以码率并不会明显上升。

图片
有很多方法可以提高视频分辨率,但放大后像素间的相关性很强,编码器可以有效去除

还有一个现象也可以使用空间相关性来解释,那就是相比原创视频而言,很多二创视频的码率相对较低。原创视频是指用户自己拍摄或制作的视频,而二创视频则是通过网络下载素材后再进行剪辑创作而成。原创视频中的数据一般是原始的高质量像素数据,而二创视频中的素材在网络传输中往往已经经过了各种压缩处理,损失了一部分原始信息,画面会变得模糊,空间相关性随之提高,冗余就会变多,所以编码所需码率就会降低。


2.1.3 时间相关性

时间相关性是指视频帧序列在播放过程中的连续程度,可以衡量视频在时间维度上的冗余量。

比如一段镜头不动的教学视频,画面中只有人脸在动,其他部分都保持静止,那么时间相关性就很强;再比如剪辑凌厉的电影预告片,短时间内会切换很多镜头,还包含各种复杂的视觉特效,很难预测下一帧的内容,时间相关性就很弱。

图片
镜头简单的视频码率低,镜头复杂的视频码率高

对具有不同时间相关性的视频进行编码,所需要的码率会有很大差别。这是因为编码器在编码视频时,采用了运动补偿和运动搜索技术。这些技术在压缩一帧中的图像块时,会先在周围已编码的帧中搜索相似的图像块作为参考,得出预测图像块,然后编码原始像素块与预测块之间的残差信息,同时在码流中记录参考块的相对位置信息。

对于时间相关性强的视频,在周围帧很近的地方就能找到高度相似的参考像素块,那么所需编码的残差信息就很少,所需记录的相对位置信息也很简单,因此所需码率就较低;反之对于时间相关性弱的视频,很难在周围帧中找到相似块,那么残差信息就越多,相对位置信息就越复杂,所需码率就越高。


2.1.4 上传稿件的码率

视频网站在提供用户自制内容时,一般会对用户上传的稿件进行转码后再进行分发。那么转码后的视频码率与稿件的码率有关系么?要回答这个问题,得先了解一下视频稿件的转码过程。

视频创作者在导出视频稿件时,编辑软件一般会对视频进行快速地压缩编码,以降低数据量,便于作品的存储和传播。因此用户上传到平台的稿件,一般是经过压缩的视频文件。

视频平台接收的稿件,其编码格式,封装方法,视频码率等属性五花八门。如果直接将原始稿件分发出去,那么很难保证所有客户端都能顺利地接收、解码和播放。

比如当稿件码率高达几百兆时,如果直接将这样的视频文件分发出去的话,大多数观众都不能流畅地接收。因此,为了提供广泛、稳定且流畅的用户体验,视频平台一般会将创作者稿件进行转码后再分发。

转码一般包含解码、再次编码和封装三个过程。是指将压缩视频文件先解码成原始像素格式的视频数据,再以特定的编码标准对像素数据重新进行压缩编码,以保持主观画质不下降为前提,尽可能将码率降低到观众可以流畅接收的水平,最后以统一的格式封装后进行分发。

因此转码后的码率,主要是与稿件在解码后的像素数据是否保留了足够多的原始视频信息有关,而与上传稿件时的码率并没有简单而直接的关系。

比如用户在编辑软件中制作好一段 30s 的视频作品后,其中一份设置导出码率 10 Mbps,文件大小 300 Mb;同时导出另一份码率 50 Mbps 的文件,大小为 1500 Mb。如果同时将这两份文件上传到视频平台,有可能会出现转码后两个视频的画质一样,同时码率也几乎是一样的现象。

图片
有些稿件10M码率和50M码率在解码后没什么区别,转码后的码率也就差不多

这是因为对这个作品而言,在编辑软件使用 10 Mbps 压缩导出时,编码器已经保留了足够多的原始视频信息,和未压缩视频相比,是近乎无损的。此时增加码率到 50 Mbps,只会把 10 Mbps 压缩时去除的冗余数据又补充了回来,有效的视频信息却没有增加。

这两份稿件在转码过程中,解码成像素数据后,对于编码器而言,有效信息量其实是差不多的,所以对它们进行再次编码后的码率也不会有很大差别。此时如果去比较转码后的码率与原始稿件的码率,是没有意义的。

当然,对于不同的视频内容,达到近乎无损的压缩状态,所需要的码率是不同的。比如有些内容更简单的视频,可能以 5 Mbps 压缩导出就能得到获得近乎无损的码流,此时再提高稿件的码率,转码后的结果都将差不多。

而当作品导出时设置码率较低的话,可能无法保留足够多的原始视频信息。此时若提高导出的码率,就可以增加稿件中的信息量,那么转码后的码率可能会更高些。

因此简单地比较转码后视频的码率与原始稿件的码率,不能作为判断转码效果的依据,而是要针对视频内容进行具体分析。

所以不同视频的内容特性千差万别,即使用相同的编码方法,保证相同的画面质量时,它们的码率也会有很大差别。但是针对相同的视频内容而言,使用更先进的编码方法一般码率会更低。


2.2 编码算法

视频编码标准每次更新换代都带来了压缩率的显著提升,在保持编码画质不变的前提下,使码率越来越低,让视频存储和传输更加高效,推动着各类视频应用不断落地和发展。


2.2.1 编码标准发展带来码率降低


图片
主流编码标准发展简史

在视频编码技术出现至今的 30 多年里,陆续出现了很多主流的编码标准,包括 MPEG 系列以及 H.264/AVC、H.265/HEVC 等 H.26x 系列,还有谷歌开源的 VP8、VP9 和 AV1。得益于编码标准的持续演进,编码算法去除冗余的能力不断增强,码率在不断下降。

图片
画质不变时,编码标准越先进,码率越低

我们以块划分技术的迭代为例,一窥编码标准的发展历程。块划分是指编码器对视频以像素块为单元进行编码,对块内像素进行压缩打包,可以有效去除块内像素间的冗余。

早在 2003 年就已出现的 AVC 标准只支持以最大 16×16 的方块为单位进行编码,这种方式只能有效压缩小范围内的数据冗余。在十多年前,视频以低清格式为主,AVC 编码标准还可以提供令人满意的压缩效果。

但随着视频技术发展,分辨率不断提高。AVC 简单的块划分技术在原理上,无法有效去除高分辨率视频中大面积像素块的数据冗余,也就很难再提供理想的压缩效果,所以码率较高。当用户带宽不足时,也就无法保证流畅的观看体验了。

图片
HEVC支持更大的编码块,对于高分辨率视频压缩率更高

更加先进的 HEVC 标准支持使用最大为 64×64 的图像编码块,大大增强了去除大面积像素冗余的能力,从而显著提升了对于高分辨率视频的压缩率。

而在极为先进的 AV1 标准中,更是将编码块大小提高到了 128×128,这对于逐渐普及的 4K 和 8K 分辨率视频的压缩更加有效。

总的来说,同样一段视频内容,更先进的编码标准由于拥有更复杂而精细的编码工具,在保持相同主观画质的前提下,可以更加有效地去除冗余,从而达到更高的压缩率,输出更低的码率,提升观看体验。


2.2.2 B 站采用先进编码标准改善观看体验

紧跟视频标准的最新发展趋势,B 站目前使用的是 H.264/AVC,H.265/HEVC 和 AV1 这 3 种编码标准。

B 站同时使用多种编码标准是为了给用户提供更加流畅的观看体验,同时支持更加先进的视频类型,比如 HDR 和 8K 视频。

目前 AVC 依然是使用最广泛的编码标准,无论新老设备都可以播放 AVC 视频,因此保留 AVC 编码可以保证广泛的兼容性。

但是 AVC 在编码超高清视频时,输出码率较高,无法保证良好的观看体验;同时很多 AVC 解码器也不支持 HDR 和 8K 视频的解码。而 HEVC 和 AV1 对于超高清视频的压缩能力明显提升,对于 HDR 和 8K 视频的支持显著改善,因此 B 站使用更先进的编码标准为用户提供服务。


图片
B 站提供了3种标准的码流

对于 B 站的很多热门视频,观众在网页端上可以自由地选择 AVC,HEVC 或 AV1 标准的码流进行观看。

图片
越先进的编码算法,码率越低

比如差评君的这条视频,在 3 种格式间切换,会发现它们的码率是不一样的,AVC 码率最高,HEVC 较低,AV1 最低。而在观看这 3 路视频时,并不会发现有明显的区别。

默认情况下,B 站会根据观众设备的性能,自动选择最优的播放策略。当用户终端支持 AV1 解码的时候,码率较低的 AV1 由于对带宽要求更低,会带来更加稳定和流畅的观看体验。

除了编码标准的更新换代,遵循相同编码标准下的不同编码器,压缩性能也会有差别。比如有很多符合 HEVC 标准的编码器,包括官方编码器 HM,以及大家所熟悉的开源编码器 x265。HM 由于编码速度很慢,无法在实际中使用。而 x265 可以快速编码,在实际应用中被广泛运用。不过 x265 还有很大的优化空间,因此各大厂商都选择自研编码器,以取得更高的压缩率。这方面 B 站也已经有了一些积累。


2.2.3 B 站自研编码器进一步降低码率

B 站从数据结构、算法流程、多线程机制等底层框架开始设计,借助机器学习、数据挖掘等先进工具,提出了大量快速算法、码控策略、汇编优化等技术,完全自主研发了 biliavc,bilihevc 和 biliAV1 三款编码器。相比于开源编码器,B 站自研编码器具有更好的编码性能。比如同为 HEVC 标准的编码器,bilihevc 相比于 x265 的性能表现如下。

图片
以 x265 默认的 medium 为基准,比较bilihevc 和 x265 在各个配置下的复杂度和码率。相同质量下,bilihevc 编码速度更快,码率更低

针对不同的应用场景,编码器可以运行在不同的配置下,比如在直播场景中,编码速度是首要的考虑因素,此时可以选择 ultrafast 模式进行快速编码,以支持 30fps 甚至 60fps 视频的直播。但是 ultrafast 的码率较高,用在对编码速度要求不高的点播场景中时,存在码率浪费。此时可以选择 slower 模式,以较高的复杂度为代价,进一步压缩码率。我们以 x265 默认的 medium 配置为基准(复杂度和码率均设为100%),来比较在相同 SSIM 画质下,bilihevc 和 x265 工作在不同配置下的编码性能。

测试结果显示,在相同的画质和配置之下,bilihevc 相比于 x265 而言,码率更低。比如相比于 x265 的默认配置,使用 bilihevc slower 进行点播转码服务,可以在复杂度和画质一样的情况下,将码率下降 28%。

再比如用于直播的 ultrafast 模式,bilihevc 相比于 x265 ultrafast,在节省 33% 复杂度,编码速度提高了 50% 的同时,码率还下降了 43%。

B 站自研编码器取得了更高的压缩率,使得视频码率进一步降低,这意味着可以给用户提供更加流畅的观看体验。

总而言之,使用更先进的编码标准可以降低码率。于此同时,在使用某个标准的编码器时,不同的使用策略也会对码率产生巨大影响。


2.3 码率控制策略

码率控制是指在编码过程中通过调节编码参数,从而控制码率资源的分配,目的是使压缩结果满足特定的码率或画质要求。

码控算法主要调节的是编码器中的量化参数。量化技术用于降低残差 DCT 变换后系数的数据精度,量化步长越大,数据精度压缩越多,编码所需码率就越低,同时解码图像信息丢失越多,质量就越差;反之量化步长越小,编码码率越高,质量越好。因此控制量化参数,即可控制编码结果的码率和质量。


2.3.1 abr 码控模式

直播场景中常常使用 abr 码控模式(average bit rate,平均码率模式)。该模式是以一段时间窗口为单位,利用已编码码率、失真等信息作为反馈,不断调整量化参数,使平均码率逼近预设的目标码率值。

在直播中使用 abr 模式,是因为该模式可以输出码率可控的码流,可以避免因码率波动造成的数据阻塞,网络延迟,播放卡顿等问题。使用 abr 模式时还可以根据实时的网络状态调整目标码率,比如在网络环境变差的时候,及时降低码率,从而有效地传输码流,保证直播的流畅性。

不过由于 abr 模式以输出码率的稳定性为首要考虑因素,并没有考虑画质的稳定性,因此在需要在提供高画质的码流时存在明显的缺陷。

图片
abr 码控策略会同时存在码率浪费和画质受损的问题

比如当一段视频中包含多个场景的时候,场景间的复杂度是不一样的,有的场景复杂,有的场景简单。想要保持一致的画质体验,复杂场景需要更高的码率,而 abr 模式分配给每个场景的码率却没有变化。

这可能导致复杂场景因码率不足而画质受损的问题。而于此同时,简单场景又不需要那么高的码率,因此还存在着码率浪费的问题。

在提供质量稳定的压缩视频时,使用可变码率模式(vbr,variable bit rate)会更好。下面介绍的 crf 模式即属于一种 vbr 策略。


2.3.2 crf 码控模式

crf(constant rate factor,恒定码率因子模式)码控算法的原理是分配更多的码率给视频中更重要的内容,保证画面质量;同时减少对不重要内容的资源分配,避免码率浪费。视频中更重要的内容是指那些人眼更加敏感的区域,那么编码器是如何识别重要内容的呢?

crf 算法在空间和时间维度上分别使用两种策略来衡量内容的重要性。在空间维度上,越简单规则的内容越重要,越杂乱无章的内容越不重要。杂乱程度可以通过方差能量占信号总能量的比值来定义,方差越大越杂乱。

比如下面图中的天空就属于简单且规则的重要内容,这些区域如果出现失真,人眼很容易察觉,因此需要多分配码率以保证质量。相反,草地看上去杂乱无章,出现失真后人眼并不能分辨出来,因此可以减少资源分配,以避免码率的浪费。

图片
人眼很容易察觉天空出现的压缩失真,但无法感觉草地上的失真

而在时间维度上,一个图像块如果被其他帧中的图像块用做参考,那么这个块就是重要的,被参考的次数越多,重要性就越高。反之不被参考的块,重要性就低。

图片
被多次参考的重要内容,crf 算法会分配更多码率

比如《重庆森林》中这个经典的慢门镜头,正在喝咖啡的梁朝伟,长时间停留在视频中,而虚化的人群一闪而过。此时观众的注意力会落在梁朝伟身上,一旦该区域出现了失真,观众是可以察觉到的。相反,由于人眼注意力有限,所以无法察觉到人群身上的画质损失。

那么在 crf 算法中,因为梁朝伟身上的图像块会被后面多帧作为参考,因而会被分配更多的码率,确保了质量不受损。同时,人群身上一闪而过的图像块没有被参考,分配的码率就会减少,避免了码率浪费。

所以 crf 模式可以在改善画质的同时避免浪费码率。一般而言,在码率相同的时候,crf 模式提供的画质体验要优于 abr 模式。


3. 总结

影响压缩视频码率的因素有很多,总的来说,在编码后主观画质不变的前提下:

  • 复杂视频码率高,简单视频码率低

  • 越先进的编码器需要的码率就越低

  • 使用更好的码率控制可以降低码率

B 站将会一直紧跟编码技术发展的潮流,努力优化编码算法,不断支持新兴的视频内容,持续改善用户的观看体验。

如果在观看 B 站视频过程中发现有画质模糊、播放卡顿等问题,欢迎随时提出。我们将及时应答,以为您提供更好的服务。

下一期我们将聊聊 WebAssembly 软解 HEVC 在 B 站的实践,欢迎您持续关注。


欢迎关注[哔哩哔哩技术]公众号~



投诉或建议