今天我们来做一道算术题——
废话不多说,我们直接开始。
我们先从最基本的图像开始计算。
图像,大家都知道,是由很多“带有颜色的点”组成的。这个点,就是“像素点(Pixel)”。
像素是图像显示的基本单位。我们通常说一幅图片的大小,分辨率是1920×1080,就是长度为1920个像素点,宽度为1080个像素点。乘积是2,073,600,也就是说,这个图片是两百万像素的。
对视频来说,常见的分辨率有:
注意:不同的标准,对2K/4K/8K的定义不同
那么,一个像素点是多少比特(bit)呢?
在计算机里,是用数字来表示颜色的。这就牵出了“彩色分量数字化”的概念。
以前我们美术课学过,任何颜色,都可以通过红色(Red)、绿色(Green)、蓝色(Blue)按照一定比例调制出来。这三种颜色,被称为“三原色”。
在计算机里,R、G、B也被称为“基色分量”。它们的取值,分别从0到255,一共256个等级(256是2的8次方)。
所以,任何颜色,都可以用R、G、B三个值的组合表示。
RGB=[183,67,21]
通过这种方式,一共能表达多少种颜色呢?256×256×256=16,777,216种,因此也简称为1600万色。RGB三色,每色有8bit,这种方式表达出来的颜色,也被称为24位色(占用24bit)。
这个颜色范围已经超过了人眼可见的全部色彩,所以又叫真彩色。再高的话,对于我们人眼来说,已经没有意义了,完全识别不出来。
我们按现在比较流行的1080p直播来举例计算吧,像素点是2,073,600。用24位色,也就是每张图片2,073,600×24bit=49,766,400bit,约5.9MB。
感觉有点大呀~ 别急,我们继续往下看。
接下来看帧率(Frame Rate)。
我们的视频,其实就是很多张静止的图像连续播放。
在视频中,一个帧(Frame)就是指一幅静止的画面。帧率,就是指视频每秒钟包括的画面数量(FPS,Frame per second)。
帧率越高,视频就越逼真、越流畅。
常见的帧率,有24fps(电影标准)、30fps、60fps。
我们就以24fps来算吧,接上前面的结果,那就是:
49,766,400bit×24=1,194,393,600bit=149,299,200byte(8bit 比特=1byte 字节)
也就是说,每秒视频大小约是142MB,每分钟是8.3GB,每小时是499.2GB。每部90分钟的电影,是748.8GB。
这不科学啊,我们平时看的电影,哪有这么大的?不就才几GB嘛?
没错,我们平时的视频确实没有那么大,因为我们对视频进行了编码压缩。
我们先来看看,视频从录制到播放的整个过程,如下:
首先是视频采集。通常我们会使用摄像机、摄像头进行视频采集。限于篇幅,我就不打算和大家解释CCD成像原理了。
采集了视频数据之后,就要进行模数转换,将模拟信号变成数字信号。其实现在很多都是摄像机(摄像头)直接输出数字信号。
信号输出之后,还要进行预处理,将RGB信号变成YUV信号。
前面我们介绍了RGB信号,那什么是YUV信号呢?
简单来说,YUV就是另外一种颜色数字化表示方式。
视频通信系统之所以要采用YUV,而不是RGB,主要是因为RGB信号不利于压缩。
在YUV这种方式里面,加入了亮度这一概念。
在最近十年中,视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度。
所以,工程师认为,在我们的视频存储中,没有必要存储全部颜色信号。我们可以把更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”)。于是,就有了YUV。
YUV里面的“Y”,就是亮度(Luma),“U”和“V”则是色度(Chroma)。
YUV码流的存储格式其实与其采样的方式密切相关。(采样,就是捕捉数据。)
主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。
具体解释起来有点繁琐,大家只需记住,通常用的是YUV4:2:0的采样方式,能获得1/2的压缩率。
这些预处理做完之后,就是正式的编码了。
编码的过程和原理我们就不解释了。目前比较流行的编码格式有H.264,H.265。
这些编码格式有着非常惊人的压缩率。以2013年推出的H.265为例,压缩率能够达到300~500:1(包括前面的视频输入信号YUV重采样)。
也就是说,刚才那个1080p的视频,我们要直播的话,如果采用H.265编码格式(按300:1算),码流就是:
1,194,393,600bit÷ 300 = 3,981,312bit/s
码流(Data rate)是视频文件在单位时间内使用的数据流量,我们可以理解为视频文件大小除以视频时长。一般来说,码流越大,视频的压缩比就越小,画面质量就越好。
是不是这样就算完啦?当然没有,我们还有音频没有计算呢。
音频的计算相对来说要简单一点。
声音是连续的模拟信号,我们对声音进行采样、量化、编码,最终变成数字信号,然后在网络中传输。
采样的指标是采样率,也就是单位时间内(每秒)用多少个数据来描述声音波形。
采样率越高,波形越接近,音质越好。
采样率通常有24KHz、44.1KHz、48KHz等。
常见的数字音频采样率
现在视频直播基本上都是用44.1KHz或48KHz采样率。
然后是采样位数,也称为位深、精度、比特。
这个值有点像前面所说的图像位色。它可以理解数字音频设备处理声音的解析度,即对声音的辨析度。这个数值越大,解析度就越高,录制和回放的声音就越真实(声音越细腻)。
声音的采样位数有8bit,16bit,24bit等。
一个bit数据大约可以记录6dB的声音,故定义0dB为峰值。常见的16bit(CD音质),可以记录大概96分贝的动态范围。24bit的声音动态范围-144dB(24×6)—0dB。
人耳的无痛苦极限声压是90分贝,所以,一般来说数字音频基本上都会采用16bit的采样位数。
声音通常会分为单声道或多声道(双声道、四声道等,两个以上的声道就属于立体声)。双声道的话,就是×2。
所以,在无损无压缩格式(例如wav格式)中,音频的码率=采样率(48k)× 位深度(16)× 通道数(2)= 1,536 kbps。
注意,如果是有损压缩(例如mp3格式),音频的码率不等于这个格式,因为原始信息已经被破坏了。
Mp3通过抽取音频中的一些频段来达到提高压缩比,降低码率,减少所占空间,但同时声音的细节如人声的情感、后期的混响等等都已经发生变形。盲听的话也很难较快地分辨出wav和mp3,需要借助设备。
Mp3目前是最为普及的声频压缩格式,可以最大程度地保留压缩前的音质。Mp3常见码率是128kbps、192kbps、224kbps、256kbps。320kbps是mp3格式的最高码率。
我们一般都是用有损压缩格式,192kbps已经够用了,我们以192kbps为例吧。
视频加音频,就是3,981,312 bps+192kbps= 4,080 kbps。
一般来说,考虑到一些抖动和冗余,网络需求带宽≈视频码率×1.3。所以,带宽需求大约是5,304kbps。也就是说,差不多6Mbps的带宽,就可以满足了。