视频帧、分辨率啥的不再懵

上一篇文章介绍了音频的相关知识,接下来我们继续讲视频,比音频复杂一些,不过通过这篇文章,你应该会对视频的相关知识会有所了解,让我们开始吧!

一、电视的成像原理

1、CRT电视成像原理

先让我们看看这个大家伙吧,小时候家里都是这种彩色电视机。

打开他的翘臀看看里面是什么?

 

这里隐藏的成像的秘密,首先我们要明白几个概念

阴极射线管: 将电信号转换为光信号,下面就是CRT的原理图

栅格图像学说:将一张图片分成横竖分成一个个小栅格,每个栅格显示一种颜色,拼接在一起就形成了一张图片

基于以上两个概念,CRT显示原理就是通过电子枪发射“一束”电子,经过聚焦系统、XY偏转等操作,打到涂有荧光层的屏幕上进行发光。每点亮屏幕的一点(一个小栅格),就称为一个像素。而CRT无重叠的打到屏幕上的最多点数称为分辨率,如我们熟知的1280X1024,表示屏幕上最多有1280X1024个点可以被点亮。打完全部的点,形成了一副完整图像,我们称之为。之后会自动从起点开始,接着打下一帧。一秒内打完的帧数,称之为帧率。人眼在每秒25帧以上,就会将图片自动转换为连续的动画。

视频是由帧组成的,帧是由像素组成的,那如何用数值来表示呢?

二、视频图象的数值采样

1、RGB表示

RGB分别表示红,绿,蓝三原色光,通过红绿蓝可以组合出各种颜色。


举个彩色CRT例子,彩色CRT的原理,就是分别点亮R(红)、G(绿)、B(蓝)三基色的荧光点,每个荧光点发出对应强度值的光,因为三个荧光点距离非常小,从而在人眼看来,看到的是三个荧光点组合之后的彩色亮光。

 

一个彩色像素点就可以用RGB来表示,如果每个颜色用一个字节来表示,那么一个像素点就是3个字节,那么一个1280*720分辨率的图象大小等于:

1280 * 720 * 3 = 2.636MB

RGB这种表示方式,原始的图片数据太大了。如果这样的大小在网络上传播,显然不实际,所以发展出了许多图片压缩算法,比如JPEG, 另外这种更多的用于表示图片信息,对于视频帧更多的采用的是YUV的表示方式。

2、YUV表示

视频是由帧组成的,帧是由像素组成的,那么视频的采样,其最小单位就是像素点的采样。每个像素都可以用YUV采样。“Y”表示明亮度(Luminance、Luma),“U”是色度(Chrominance)、“V”是浓度(Chroma)。

那为啥视频帧采用YUV,而不是用RGB呢?主要有下面几个原因:

1)、兼容黑白电视机,Y是可以和UV分离,如果只有Y,而无UV,则表示的图象就是黑白灰度图象,所以黑白电视机只要处理Y信号,就可以显示黑白图象。当YUV都处理了,那么就是彩色电视了。

2)、YUV比RGB有更高的压缩率,由于人眼对于UV敏感度比较低,所以就可以认为降低UV比重,而人眼无感知,就可以减低一帧的大小,减小传输流量。比如说我们现有的三种YUV采样YUV444, YUV422,YUV420。具体我们可以参考这篇文章

YUV444:表示Y\U\V全采样,如果Y\U\V都是用一个字节表示,那么一个像素点就是3个字节,就跟RGB的大小一样了。一般来说这种表示方式,存储量太大了。

YUV422:表示每两个Y共用一个UV,两个像素点 2*Y + 1*U + 1*V = 4字节,这样就相当于一个像素就只有2个字节。

YUV420:  表示四个Y共用一个UV,4个像素点 4*Y + 1*U + 1*V = 6字节,这样就相当于一个像素就只有1.5个字节。

所以目前视频帧最常用的采样格式是Y420。那么一个1280*720分辨率的视频帧大小等于:

1280 * 720 * 1.5 = 1.318MB

相较于RGB,减少了压缩了一半的大小。

有了以上知识,现在让我们做一道算术题,一段90分钟的视频,分辨率为1280*720,帧率为24,采用Y420数据格式表示。那么其数据量是多大?

1280 * 720 * 1.5 * 90min * 60s * 24fps = 166.8GB

显然这个数据量用于存储太大了,在网络上传输格式不可能。那么唯一的解决办法就是对其进行压缩,也就是视频编码。

三、视频编码和封装格式

视频压缩主要也是从去除冗余信息着手,包括空间冗余信息时间冗余信息

空间冗余:一张图片内,同一物体颜色存在空间相关性,说白就是相邻像素在数字表示时相同或者相近,造成的空间上的冗余。对其做压缩处理,称之为空间冗余编码。一般的压缩率为7,比如我们的I帧,就属于帧内编码,压缩空间冗余

时间冗余:在连续视频帧,前后两个视频帧基本相同,或者只有轻微改变,造成时间上的冗余。对其压缩处理,称之为时间冗余编码,比如我们B帧、P帧。

既然视频编码这么重要,所以就出现了很多标准,比如ISO指定的Mpeg1~Mpeg4, ITU-T制定的H261~H264等等,后面文章会着重介绍这些编码的历史沉浮。

接下来我们说说封装格式。

将音频编码数据,视频编码数据,以及其他数据,比如字幕信息都打包成一个文件,文件格式遵循一个固定的标准规范,比如MP4,WAV这种格式规范。具体关系看下图:

四、视频帧概念

1、I帧

俗称关键帧,帧内编码,不需要前后帧,可以解码成一张完整图片,压缩空间冗余信息,压缩率低,所以I帧通常比较大,在实时直播中,过多的I帧会增加带宽压力和传输流量。

2、P帧

前向预测编码帧,俗称运动补偿帧,提取的是前向帧的差异,或者运动特性。压缩时间冗余信息。在解码时,需要参考前向I帧或者P帧,通常压缩率在20.

3、B帧

双向预测编码帧,主要存储的是本帧和前后帧差异,所以在解码的时候需要参考前后帧,实现逻辑上比较复杂,CPU消耗比较大,对解码机器性能有一定要求。不过压缩率能达到50

4、IDR帧

特殊的I帧,除了拥有I帧的特性外,其还有立即刷新作用,即清空参考帧列表(DBP),重新查找参数集,开始一个新的序列,之前的解码的数据将全部清除。这种可以防止如果一个序列发生严重问题时,可以重新刷新,开始新的序列,防止错误一直传播。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

5、参考帧列表

我们知道P帧、B帧都需要参考帧,才能解码,所以就需要一个列表来管理这些参考帧,这个就是参考帧列表

6、GOP

GOP是两个I帧之间的距离,通常在优化rtmp延迟时,会设置这个参数,原因就是GOP的长度会影响到解码端Seek的响应时间。由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长,这样拉流端延迟就会增加。根据经验GOP Size一般来说设置为FPS*1s

 

五、参考

https://www.jianshu.com/nb/22515965

https://zhuanlan.zhihu.com/p/61747783

https://zhuanlan.zhihu.com/p/61747783

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值