1、码率 、帧率以及分辨率
帧率:FPS(每秒钟要多少帧画面);以及Gop(表示多少秒一个I帧)
码率:编码器每秒变出多少数据大小,单位是kbps,好比800kbps表明编码器每秒产生800kb(或100KB)的数据
分辨率:单位英寸所包含的像素点;VGA:Video Graphics Array (视频图像分辨率)
三者的对应直播的影响因素
帧率:影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。若是码率为变量,则帧率也会影响体积,帧率越高,体积越大。帧率就是在1秒钟时间里传输的图片的帧数,也能够理解为图形处理每秒钟可以刷新几回。
分辨率:影响图像大小,与图像大小成正比:分辨率越高,图像越大,分辨率越低,图像越小。
清晰度
在码率必定的状况下,分辨率与清晰度成反比关系:分辨率越高,清晰度越低,图像越清晰。
在分辨率必定的状况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。算法
二 视频编码
1.视频编码
帧间编码技术
运动补偿:运动补偿是经过先前的局部图像来预测、补偿当前的局部图像,它是减小帧序列冗余信息的有效方法。
运动表示:不一样区域的图像须要使用不一样的运动矢量来描述运动信息。
运动估计:运动估计是从视频序列中抽取运动信息的一整套技术。
使用帧内编码技术而已去除空间上的冗余信息。
2.编码概念
(1) IPB帧
视频压缩中,每帧都表明着一幅静止的图像。而在进行实际压缩时,会采起各类算法以减小数据的容量,其中IPB帧就是最多见的一种。
I帧:帧内编码帧(intra picture),I帧一般是每一个GOP(MPEG所使用的一种视频压缩技术)的第一帧,通过适度地压缩,做为随机访问的参考点能够当成静态图像。I帧能够看作一个图像通过压缩后以为产物,I帧压缩能够得6:1的压缩比而不会产生任何可觉察的模糊现象。I帧压缩可去掉视频的空间冗余信息,下面即将介绍P帧和B帧是为了去掉时间冗余信息。
P帧:前向预测编码在帧(predictive-frame),经过将图像序列中前面已编码帧的时间冗余信息去充分去除压缩传输数据量的编码图像,也成为预测帧。
B帧:双向预测内插编码帧(bi-directionalinterpolated prediction frame),既考虑源图像序列前面的已编码帧,又估计源图像序列后面的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也成为双向预测帧。
基于上面的定义,咱们能够从解码的角度来理解IBP帧。
I帧自身能够经过视频解压算法解压成一行单独的完善的完整视频画面,因此I帧去掉视频帧在空间维度上的冗余信息。
P帧须要参考其前面一个I帧或者P帧来解码成一张完整的视频画面。
B帧则须要参考前一个I帧或者P帧及其后面一个P帧来生成后面一张完整的视频画面,因此P帧与B帧去掉是视频在时间维度上的冗余信息。
(2)IDR帧与I帧的理解
在H264的概念中有一个帧被称为IDR帧(instantaneous decoding refresh picture),那么IDR帧与I帧的区别是什么呢?由于H264采用多帧预测,因此在I帧以后P帧有可能会参考以前的I帧以前的帧,这就使得在随机访问的时候不能以找到I帧做为参考条件,由于即便找到I帧,I帧以后的帧仍是有可能解析不出来,而IDR就是一个特殊的I帧,即这一帧以后的全部参考帧只会参考到这个IDR帧,而不会参考前面的帧。在解码器中,一旦接收到一个IDR帧,就会当即清理参考帧缓存区,并将IDR帧做为被参考的帧。
3.PTS与DTS
DTS(英文全称Decoding Time Stamp)主要用于视频的解码,PTS(Presentation Time Stamp)主要用于视频解码阶段进行视频的同步和输出。在没有B帧的状况下,DTS和PTS的输出顺序是同样的。由于B帧打乱了解码和显示的顺序,因此一旦存在B帧,PTS和DTS势必就会不一样。FFmpeg中使用AVPacket结构体描述解码前或解码后的压缩数据,用AVFrame结构体来描述解码后或编码前的原始数据。对于视频来讲,AVFrame就是视频的一帧图像,这帧图像何时给用户,取决于它的PTS。DTS是AVPacket里的一个成员,表示该压缩包应该何时被解压,若是视频里各帧里编码是按照输入顺序(显示顺序)依次进行的,那么解码和显示的时间应该是一致的,可是事实上,在大多数编码标准(如H264或HEVC)中,编码顺序和输入并非一致的,才会 须要PTS和DTS这两种不一样呢的时间戳。
4.GOP的概念
两个I帧之间造成一组图片,就是GOP(Group Of Picture)的概念。一般在为编码器设置为参数的时候,必须设置为gop_size的值,其表明的两个I帧之间的帧数目。一个GOP中容量最大的就是I帧,因此相对来说,gop_size设置的越大,整个画面就会越好,可是在解码端必须从接收接收到一个I帧的第一个I帧开始I才能够正确解码出原始图像,否者没法正常解码(这也是前面提到的I帧能够做为随机访问的帧)。在提升视频质量的技巧中,还有个技巧是多使用B帧,通常来讲,I帧的压缩率是7(与JPG差很少),P是20,B能够达到50,可见使用B帧能节省大量的空间,节省出来的空间能够哦用来更多的保存I帧,这样就能在相同的码率下提供更好的画质。因此咱们要根据不一样的业务场景,适当的设置gop_size的大小,已获得更高质量的视频。
下面给出一个GOP为15的例子,其解码的参照frame及其解码的顺序都在里面:缓存
如上图:I frame的解码不依赖于任何其余的帧。而Pframe 的几码则依赖于前面的面的Ifarme或者Pframe.Bframe 的解码则依赖于其前的最近一个I frame 或者P frame 及其后的最近的一个P frame .ide
做者: 岑雄峰
说明:八点钟学院第一期VIP学员
免费学习连接:https://ke.qq.com/course/171725
精修课程连接:https://ke.qq.com/course/229709学习