提示💡
帧内压缩和帧间压缩
帧指的是视频中的单幅画面,多个帧连起来就构成了视频。而在编码视频压缩过程中,为了节省存储空间,并不会将每一帧的信息都会完完全全保留下来,会采用各种方法来减少视频数据大小,其中生成I、B、P帧就是一种编码器常采用的办法。
帧作为NAL层中的基本数据,存储在NALU当中,存储着视频的真正数据。
IBP帧是什么
如图从左到右依次解码。
第一帧是I帧,它是关键帧。I帧进行帧内预测,可以单独解码本帧的数据。
第二帧是 B 帧,它是向前预编码帧。它要使用一个前面的 I 帧或 P 帧和一个后面的 I 帧或 P 帧进行预测。不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。
第四帧是 P 帧,它是向前预测编码帧。P 帧在解码过程中使用一个前面的 I 帧或 P 帧作为参考图像进行运动补偿。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
I 帧:帧内编码帧(intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一帧,经过适度地压缩,作为随机访问的参考点可以当成静态图像。I 帧可以看做一个图像经过压缩后觉得产物,I 帧压缩可以得6:1的压缩比而不会产生任何可觉察的模糊现象。I 帧压缩可去掉视频的空间冗余信息,下面即将介绍 P 帧和 B 帧是为了去掉 时间冗余信息。
P帧:前向预测编码在帧(predictive-frame),通过将图像序列中前面已编码帧的时间冗余信息去充分去除压缩传输数据量的编码图像,也成为预测帧。
B帧:双向预测内插编码帧(bi-directionalinterpolated prediction frame),既考虑源图像序列前面的已编码帧,又估计源图像序列后面的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也成为双向预测帧。
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 的大小,已得到更高质量的视频。
帧的作用
由于连续的帧之间相似性极高,为便于储存传输,我们需要对原始的视频进行编码压缩,以去除空间、时间维度的冗余。帧的压缩技术,极大的节约了网络带宽,提高了传输效率。
重要的NAL流基本数据介绍完了,如果想了解SEI帧的相关信息,请查看后面章节SEI
想了解播放器复用(remux)的相关知识,请学习下一章复用(remux)