翻译 | Alex
技术审校 | 袁荣喜
视频编码是一门在减少视频数据体积大小或码率的同时而不对其质量产生不良影响(在人类的视觉感知下)的科学。对视频进行编码从而减少其数据体积同时保持视频质量是一项综合了艺术和科学的技术。在本篇文章中,我们将介绍这个复杂且神奇的领域对视频流和视频传输产生的巨大影响。
视频编码
EasyTech
#003#
本文我们将会学习:
什么是视频编码
什么是视频转码以及视频转码与视频编码的区别
视频质量VS码率
视频编码中的关键概念:编解码器、码率、分辨率、时间、GOP和帧类型
视频编码是艺术还是科学?
什么是视频编码?
视频编码是一门在减少视频数据体积或码率的同时而不对其质量产生不良影响(在人类的视觉感知下)的科学。减小文件体积被称为压缩,视频压缩通过一系列定义明确且记录在案的数学工具和算法(被称为视频编解码器)来完成。当对某个视频数据进行压缩,一般来说,压缩后的格式(被称为比特流)只能被可以解码这种格式的相应的软件所理解。比如,一个使用H.264/AVC视频编码器编码的视频是无法被HEVC解码器解码的。当一个视频被压缩,那么就可以从主观和客观上来判断视频质量:客观方法包括PSNR、SSIM、VMAF。这些软件使用数学方法来判断视频质量。主观方法如MOS(Mean Opinion Score, 平均主观意见分),这种方法包含强烈的个人主观色彩,通过一群人为视频打分(0~5分)来确定视频质量。这种方法也被称为“黄金眼观测(Golden-eye viewing)”。
什么是视频转码以及视频转码与视频编码的区别
你可能经常听到人们交替使用视频编码和视频转码这两个术语。这种做法有失偏颇,因为两者之间还存在细微的差别。视频编码通常指将原始视频数据压缩成编码数据的整个过程。而视频转码是指重新编码压缩文件,但它多了一个编码之前对传入视频解码的步骤。但不要搞混了,这两个过程都需要在最后阶段编码视频。通常转码器有很多功能,比如:解码不同的容器格式(mp4,ts等)。使用不同的视频编解码器解码比特流,如H.264/AVC、HEVC、AV1和VP9等。改变视频的分辨率,从而可以输出不同的分辨率(对ABR流制作至关重要)。除了转码,还有两个术语不常在行业中使用:Transrate是指改变视频码率。Transmux是指改变容器格式,如将mp4更改为avi或者ts。在介绍了视频编码和转码之后,现在让我们学习下一部分中最重要的率失真折衷(Rate-distortion Trade-off)。
视频质量VS视频编码/转码中的码率
想要理解码率和视频质量之间的平衡关系,就要先理解视频压缩是如何操作的。你不必深入探究质量与码率的折衷,但你需要明白几件事:视频压缩算法要做两件重要的事(如在H.264/AVC、HEVC、VP9和AV1等编解码器中):
使用DCT(Discrete Cosine Transform,离散余弦变换)将“像素域”转换为“频域”。如果你还不了解什么是DCT,可以看下这篇文章(如何给5岁孩子解释DCT?)。
通过一种被称为量化的技术舍弃一些频域数据(被称为系数),同时确保人眼无法感知这种数据丢失。本质上,当你压缩视频时,你需要丢掉一些信息,但同时要保证视频质量没有被破坏。
如果你使用过高的压缩率来压缩视频数据,那么将丢掉大量信息,压缩的效果显而易见——糟糕的视频质量。
如果你使用较低的压缩率来压缩视频,那么压缩后文件就会很大,但会得到很棒的视频质量。上面所述被称为视频压缩中的率失真折衷。码率越小,视频质量越差(假设分辨率、比特位深、色度二次采样、编码时间和硬件等都是固定的。)下面两张CrowdRun的屏幕截图说明了这一点,它们分别使用 H.264/AVC 以两种不同码率编码,其他参数在编码过程中保持不变。
1080P,低码率
1080P,高码率
低码率流的视频质量要比高码率流的视频质量差,这正说明了我们之前对于率失真折衷的论述。然而,不要误以为较低的码率就意味着较差的视频质量,要依据视频内容的性质而定,降低码率但并不影响视频质量是非常有可能的。在编码和转码之前,让我们来学习一些影响视频编码的重要因素。
影响视频编码的重要因素
有很多重要因素影响视频编码和转码,并且大部分因素之间也相互影响。比如,在转码时,你不能随便改变视频的分辨率而不去调整码率,对吧?在本节中,让我们来看看一些能够产生压缩充分且高质量的比特流的最重要的因素。内容性质并不是所有创造出来的视频都一样!每个视频都独一无二,都有自己的风格,这就使得视频压缩成为了一门艺术。充满各种动作的职业橄榄球比赛视频背后的各种设置和调整肯定不同于压缩《辛普森的一家》那样的卡通视频,对吧?
非常容易压缩!
没那么容易压缩!
影响视频分类的因素有很多,比如:视频里有充满各种动作的体育运动吗?有大量的草地或者水(二者都很难压缩)吗?充满各种动作的电影(战争或者高速追车)露出头部和肩部的内容,比如新闻或者脱口秀卡通、日本动画?内容中是否有提示文字(Ticker text)向一侧移动,而电影向着另一侧移动?电影中存在许多不同的场景,这些场景使得每部影片都与众不同,了解了这些,工程师就能更好地压缩视频。如果你知道视频中含有诸如卡通这样的平场区域(Flat region),如上所示,你就可以给它分配一个更低的码率,而不必像处理体育运动视频那样用高码率。视频编解码器我是这样定义视频编解码器的:它们是一组用来压缩视频以达到预定率失真折衷的工具和算法。视频编解码器通常由工程师、学术界和工业界(软件和硬件公司)的科学家组成的委员会来协商创建。现在市面上流行的视频编解码器包括H.264/AVC、HEVC、AV1、VP9、EVC、VVC和LCEVC。每一个编码器在设计时都有一个特定的目标。它们有可能比上一代具有更高的性能,或者免版税,或者推出一种新的压缩方法(像LCEVE那样)。因为每一种编码器都拥有不同的设计和优化方法,它们的性能也必然有所不同。比如,AV1在压缩效率上就比H.264/AVC高出很多,但却比AVC要消耗更多时间和资源。但这些都没有关系,重要的是是否能满足你自己的需求和资源。码率控制模式(CBR、VBR和有上限的VBR)每个编码器都拥有码率控制算法,该算法用于确定在一段时间(或者GOP)内如何消耗码率预算。编解码器中的码率控制技术极大地影响了压缩效率、视频质量和速度。下面是三种常用的码率控制算法。1.CBR(Constant Bitrate,固定码率):在牺牲视频质量的同时,平均码率保持不变。2.VBR(Variable Bitrate,可变码率):在码率出现波动的同时,视频质量保持不变。3.Capped VBR(Capped Variable Bitrate,有上限的VBR):视频质量保持不变的同时,允许码率在一定限制或者上限之内波动。根据你为视频编码/转码选择的模式,编码器将在视频质量和码率(或者文件尺寸)之间折衷优化。码率视频码率是指每秒传送信息的比特数。码率单位通常为:kbps(千比特每秒)mbps(兆比特每秒)当你开始编码时,你通常需要设置编码器的码率,根据编码模式(CBR、VBR、2-pass VBR和Capped VBR),编码器将使用设置的码率值作为压缩视频的指南。根据经验,码率越大,视频质量越好。但是也有例外,如果调整了视频分辨率和内容(动作快慢,头肩是否出镜),增加码率也有可能不会提高视频质量。分辨率视频分辨率是指视频图像的宽度乘以高度,其中衡量分辨率的单位是像素。视频分辨率通常有以下两种表现形式:1.使用视频图像高度描述分辨率:1080p或720p2.或者使用图像宽乘高描述分辨率:1920×1080或者1280×720视频分辨率在编码过程中能够发挥重要作用的原因如下:
高分辨率的视频(如4K)需要更多内存空间和时间来压缩。
低分辨率的视频(如360p)需要较少内存空间,并且能够很快被压缩。
所以,当选择编码码率时,视频分辨率是一个重要的决策因素。编码时间压缩、编码以及转码视频时所需的时间也是一个关键因素。不同环境下有不同的解决方案,对吧?
如果你正在视频直播,那么你肯定不能每分钟只编码1帧,那么做将是大灾难!你需要以接近24fps、50fps或者60fps的刷新率来实时压缩视频。在这样的情况下,编码器通常会为了提升速度而牺牲视频质量。
然而,当你在点播视频时,你可以花几个小时的时间来压缩视频。在这样的情况下,编码器被调整为缓慢压缩,并使用复杂的工具来获得更高的压缩效率及更好的视频质量。
比如,在FFmpeg这种编码器中,你已经预定义了Slow、Slower,、VerySlow、Fast、Faster和Fastest的设置,而这些设置表明了编码器中速度、质量和压缩效率之间的权衡。所以应该依据视频应用场景(直播还是点播)来选择你的编码设置(和速度)。GOP(一组图像,Group of Pictures)和GOP长度一组图像(GOP)是指一批按照事先定义好的顺序被编码、解码和播放的视频帧。GOP长度对视频压缩效率、视频流恢复能力和视频质量影响深远。简而言之,GOP尺寸越大,视频压缩效率越高,但视频质量和视频流恢复能力也越差,反之亦然。Closed GOP和Open GOPClosed GOP和Open GOP常见于视频流中,并影响压缩效率、视频容错能力以及ABR流的切换能力。顾名思义,Closed GOP对GOP外部的帧是封闭的。一个属于Closed GOP的帧只能参考这个GOP之内的帧。Open GOP与Closed GOP相反,Open GOP内部的帧可以参考其他GOP中的帧。
帧的类型(I帧、P帧和B帧)I帧、P帧和B帧是视频压缩领域中的基础概念,用于提升视频压缩效率、视频质量和视频恢复能力。I帧(关键帧或帧内帧)仅由帧内预测的宏块组成。P帧代表预测帧,除了空域预测以外,它还可以通过时域预测来进行压缩。P帧通过使用已经编码的帧进行运动估计。B帧可以参考在其前后出现的帧,B帧中的B代表双向(Bi-Directional)。
升频、降采样的工具和算法本篇文章中,我们不会深入讲解升频和降频算法。但是需要注意的是这些工具会对视频质量产生很大的影响。假如输入的视频分辨率为540p,你想输出720p的视频,那你就需要一个可以升频的工具,对吧?通过降低视频采样率,该工具又深深影响了视频质量——如果它出色地完成了任务,那么输出视频也会很清晰。否则,你就陷入了大麻烦。通常来说,升采样和降采样工具使用经过充分研究的图像处理过滤器(如 Lanczos 或 Bicubic 过滤器)来创建具有新分辨率的视频。在选择购买或使用编码器/转码器之前,最好先对这些工具进行详细的测试。现在,我们对于影响视频编码的重要因素的学习已经将近尾声,虽然没有那么详尽,但也为音视频技术的学习提供了一个指南。下面我们将通过视频编码一览表来总结我们所学过的知识。
视频编码一览表
在编码视频之前,有几点要铭记于心。这虽然不是一个详尽无遗的表单,但却能帮助你缩小视频压缩中使用到的正确参数范围。1.理解你的观众:你的观众平时常用的带宽是多少?你是为拥有高速互联网的城市居民提供视频服务,还是为低网速的乡村人口提供服务?他们是使用固定连接的网线,还是使用移动互联网?2.你的终端用户使用什么设备?他们平时会看大屏幕的智能电视吗?还是使用智能手机看视频?3.你所提供的视频服务的内容性质是什么?是充满各种动作的电影、体育赛事,还是没有那么多动作的新闻,亦或是很容易压缩的卡通片?4.你拥有多少时间压缩视频?你所提供的服务是直播还是点播?5.你使用哪种视频编解码器?你的目标观众的设备能否解码H.264/AVC、 HEVC、AV1或者VP9?以上这些只是部分(在编码、转码视频前)影响因素,我相信还有更多,但我希望这个一览表对你来说是个好的开始。现在,让我们来看下视频编码和转码中用到的工具和服务。
视频编码和转码工具
在这一部分,我们将了解视频压缩、编码和转码中的常用工具和服务。其中一些是付费的,一些是开源的。每种工具或服务都拥有不同的功能和特性。我们先来看开源的工具。FFmpeg (开源)FFmpeg是目前为止最流行的视频编解码工具。它支持视频解码、大部分容器格式的多路分离和多路复用、改变视频分辨率、能够在最常用的视频编解码器(如H.264/AVC、HEVC、AV1和VP9等)中编码,这些功能使FFmpeg成为不可或缺的视频压缩工具。
Handbrake(开源)作为开源视频转码器,Handbrake被认为是基于GUI的最佳视频编码和转码工具。操作简单、可基于多平台、并涵盖广泛的预设和设备。这意味着你无需花钱购买转换或转码工具,更无需花费数小时制作命令行参数,就能够前所未有地轻松、快速压缩视频。视频编码的付费工具和服务基于云的视频压缩付费服务有好几百个,这些服务通常支持多种类型的容器、编解码器、ingest/egress格式,如RTMP、HLS、DASH等。下面简略地列出了一些比较常用的服务:
Mux.com
Encoding.com
Wowza.com
Harmonic 360
AWS Elemental
QEncode
Coconut.co
Bitmovin.com
所以,视频编码究竟是艺术还是科学?
学习了这么多视频编码和压缩的知识,这里有一个有趣的哲学问题:视频编码/转码究竟是艺术,还是科学?你认为呢?老实讲,如果你问我,我只能回答,各有千秋。说视频编码是科学,是因为它需要精确的公式和算法,而这些公式和算法都是在世界各地的实验室中被发明出来的,并需要接受不断的测试和改进。另一方面,说视频编码是艺术,是因为对视频编码质量的感知是主观的,不同的人对视频质量好坏的判断不同。所以,当你在设置某个编码器或者编码器的压缩工具时,你不能只是按照发给你的表格中的质量措施和码率值来设置编码器。一位态度认真的工程师在进行视频编码设计时,一定会尝试在不同的参数设置下观察编码效果,并最后决定哪种设置才能最大程度上满足他的观众。你看,取悦他人是一门艺术??你是怎么想的?编码是艺术,还是科学?在评论区告诉我你的想法!
结束语