这三种帧的主要区别在于它们的压缩方式和相互依赖关系:
完整编码的独立帧
不依赖其他帧,可独立解码
数据量最大,压缩率最低,但支持随机访问
I帧:即Intra-coded picture(帧内编码图像帧),I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)。又称为内部画面 (intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。在MPEG编码的过程中,部分视频帧序列压缩成为I帧;部分压缩成P帧;还有部分压缩成B帧。I帧法是帧内压缩法,也称为“关键帧”压缩法。I帧法是基于离散余弦变换DCT(Discrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。
JPEG(联合图像专家组)压缩算法
定义和原理:JPEG主要用于静态图像的压缩。它是一种有损压缩算法,通过去除图像中的视觉冗余信息来减小图像数据量。其核心是基于离散余弦变换(DCT)。在压缩过程中,图像被分割成多个8×8像素的小块。对于每个小块,先进行DCT变换,将图像的空间域数据转换为频率域数据。然后,根据预设的量化表对频率系数进行量化,这一步是造成信息损失的主要环节。量化后的系数经过 zig - zag(之字形)排序和熵编码(如霍夫曼编码),最终生成压缩后的JPEG图像数据。
应用场景:广泛应用于数码相机拍摄的照片、网页图片展示等静态图像场景。例如,在数码相机中,拍摄的照片通常以JPEG格式存储,这样可以在保证一定图像质量的同时,大大减小图像文件的大小,方便存储和传输。
MPEG(动态图像专家组)系列标准
定义和原理:MPEG是一系列用于视频和音频编码的标准。与JPEG专注于静态图像不同,MPEG主要针对动态视频。MPEG标准在视频编码方面利用了帧间和帧内压缩技术。其中,帧内压缩类似于JPEG的压缩方式,对视频帧内部进行压缩,以减少空间冗余。而帧间压缩是MPEG的关键创新,它利用视频帧之间的时间相关性,通过运动估计和运动补偿来预测相邻帧之间的差异,只对这些差异进行编码,从而大大减少了数据量。例如,在一个视频序列中,对于连续的两帧,如果场景中的物体运动较小,那么两帧之间的大部分内容是相似的,通过运动估计和运动补偿可以有效地去除这些时间冗余。
应用场景:用于各种视频相关领域,如数字电视广播、视频光盘(如DVD、蓝光)制作、网络视频流媒体等。以数字电视广播为例,MPEG - 2标准被广泛用于视频信号的传输,使得在有限的带宽内能够传输高质量的视频节目。
两者的关系
技术传承与基础:MPEG在帧内压缩部分借鉴了JPEG的一些原理和技术。因为视频是由一帧帧的图像组成的,在对视频帧进行内部压缩时,MPEG采用了类似于JPEG的DCT变换、量化和熵编码等方法来减少帧内的数据冗余。这使得MPEG在处理视频帧的空间信息时,有了成熟的技术基础。
功能扩展与区别:MPEG在JPEG的基础上进行了功能扩展,重点在于处理视频的动态特性。JPEG只能处理静态图像,而MPEG通过帧间压缩技术,能够很好地应对视频中物体的运动和场景的变化,实现对动态视频的高效编码。例如,在一个包含运动物体的视频场景中,MPEG可以利用帧间压缩将连续帧之间的运动信息进行有效编码,而JPEG没有这种处理动态信息的能力。
【I帧特点】
1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
2.解码时仅用I帧的数据就可重构完整图像;
3.I帧描述了图像背景和运动主体的详情;
4.I帧不需要参考其他画面而生成;
5.I帧是P帧和B帧的参考帧(其质量直接影响到同组GOP中以后各帧的质量);
6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
7.I帧不需要考虑运动矢量;
8.I帧所占数据的信息量比较大。
【I帧编码流程】
(1)进行帧内预测,决定所采用的帧内预测模式。
(2)像素值减去预测值,得到残差。
(3)对残差进行变换和量化。
(4)变长编码和算术编码。
(5)重构图像并滤波,得到的图像作为其它帧的参考帧。
例如:在视频会议系统中,终端发送给MCU(或者MCU发送给终端)的图像,并不是每次都把完整的一幅幅图片发送到远端,而只是发送后一幅画面在前一幅画面基础上发生变化的部分。如果在网络状况不好的情况下,终端的接收远端或者发送给远程的画面就会有丢包而出现图像花屏、图像卡顿(P帧)的现象,在这种情况下如果没有I帧机制(接收端开启周期性关键帧)来让远端重新发一幅新的完整的图像到本地(或者本地重新发一幅新的完整的图像给远端),终端的输出图像的花屏、卡顿现象会越来越严重,从而造成会议无法正常进行。
在视频画面播放过程中,若I帧丢失了,则后面的P帧也就随着解不出来,就会出现视频画面黑屏的现象;若P帧丢失了,则视频画面会出现花屏、马赛克等现象。
在视频会议系统中I帧只会在会议限定的带宽内发生,不会超越会议带宽而生效。I帧机制(接收端开启周期性关键帧)不仅存在于MCU中,电视墙服务器、录播服务器中也存在。就是为了解决在网络状况不好的情况下,出现的丢包而造成的如图像花屏、卡顿,而影响会议会正常进行。
I帧(关键帧)的重要性
I帧是视频编码中的关键帧,它包含了完整的图像信息,能够独立进行解码。在视频序列中,I帧就像是一个个“锚点”,后续的P帧(前向预测帧)和B帧(双向预测帧)都是基于I帧或者其与I帧的关系来进行编码和重建画面的(MPEG动态图像专家组 的 运动估计和运动补偿)。例如,在H.264、H.265等常见的视频编码标准中,P帧记录的是与前面I帧或P帧的差值信息,B帧是通过参考前后的P帧来获取自身像素信息。
可能出现黑屏情况:当I帧丢失时,在很多情况下会导致黑屏现象。这是因为如果没有I帧作为起始参考点,后续的P帧和B帧无法正确地解码和重建画面。对于大多数播放器来说,由于缺少关键的I帧来启动画面解码过程,它们无法根据丢失I帧后的现有信息生成完整的可视画面,从而显示为黑屏。比如在一个直播场景中,如果一个I帧丢失,而播放器又没有足够的缓存来获取之前的I帧进行恢复,那么屏幕很可能会瞬间变黑。
其他可能的情况:不过,也有一些特殊情况。如果播放器有足够的缓存并且之前已经成功解码了一个I帧,它可能会尝试延长这个已解码I帧的显示时间来避免黑屏,直到下一个I帧到达。但这种情况比较复杂,还取决于播放器的缓存策略、视频编码方式以及网络状况等因素。而且,即使这样做能够暂时避免黑屏,画面也可能会出现明显的卡顿或者不连贯的情况,因为后续的帧在没有新I帧更新参考的情况下,其与之前缓存的I帧的时间差会越来越大,导致画面质量下降。
仅包含与前一帧的差异信息
依赖前面的 I 帧或 P 帧
数据量适中,压缩率高于 I 帧,小于B帧
P帧:
P帧:即Predictive-coded Picture(前向预测编码图像帧)。P帧表示的是这一帧跟之前的一个I帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
【P帧的预测与重构】运动估计、运动补偿
P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量,从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
【P帧特点】
1.P帧是I帧后面相隔1~2帧的编码帧;
2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
4.P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
6.由于P帧是参考帧,它可能造成解码错误的扩散;
7.由于是差值传送,P帧的压缩率较高。
花屏或马赛克现象:P帧(前向预测帧)丢失很可能会导致画面出现花屏或马赛克现象。P帧是通过参考前面的I帧或P帧来进行编码的,它记录了与前面参考帧的差异信息。当P帧丢失时,解码器在解码过程中就缺少了用于还原当前画面的关键信息。由于无法正确获取这部分差异信息来构建完整的画面,播放器只能尝试用之前已解码的帧来进行替代,这就导致画面出现部分区域的像素错误,表现为花屏或马赛克。例如,在播放一个体育比赛视频时,如果P帧丢失,观众可能会看到运动员的身体部分或比赛场地的某些区域出现模糊、色块错乱的情况,也就是花屏或马赛克。
卡顿情况:除了花屏或马赛克现象外,P帧丢失也可能导致画面卡顿。这是因为P帧的丢失破坏了视频帧之间的连贯性,播放器可能需要花费额外的时间来等待下一个可用的帧(如I帧或未丢失的P帧)来恢复正常的播放,在这个等待过程中就会出现卡顿。而且,如果连续丢失多个P帧,卡顿现象会更加明显,甚至可能导致播放暂停,直到新的有效帧到达才能继续播放。
B帧记录的是本帧与前后帧的差别(参考前后两帧进行编码)
数据量最小,压缩率最高
需要更多的解码资源(要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时耗费CPU。)
【B帧的预测与重构】
B帧以前面的P帧和后面的I帧或P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。采用运动预测的方式进行帧间双向预测编码
在视频编码标准(如 MPEG 等)规定的视频序列中,I 帧、P 帧和 B 帧的排列顺序是有规则的。一般情况下,I 帧之后通常会跟着 P 帧。因为 P 帧是通过参考前面的 I 帧或者 P 帧来进行编码的,它主要记录的是相对于参考帧的变化信息,这种排列方式有助于解码器从 I 帧开始,逐步根据 P 帧的变化信息来重建视频画面。
不过,从理论上来说,I 帧后面也可以跟着 B 帧。但在实际的视频编码流程和大多数标准的编码模式中,这种情况比较少见。因为 B 帧的解码需要前后参考帧,当 I 帧后面直接跟 B 帧时,B 帧在解码时后面的参考帧可能还没有被解码,这会给解码过程带来一些复杂的逻辑处理。而且这种排列方式不符合常规的由基础参考帧(I 帧)逐步构建后续画面的流程,不利于高效的视频编码和解码。
所以,I 帧后面从理论上可能跟着 B 帧,但在实际的视频编码过程和常见的编码模式中一般很少出现这种情况。
【B帧特点】 1.B帧是由前面的P帧和后面的I帧 或 P帧来进行预测的; 2.B帧传送的是它与前面P帧和后面的I帧、P帧之间的预测误差及运动矢量; 3.B帧是双向预测编码帧; 4.B帧压缩率最高,因为它只反映并参考帧间运动主体的变化情况,预测比较准确; 5.B帧不是参考帧,不会造成解码错误的扩散
【为什么需要B帧】
从上面的看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。那么为什么还要引入B帧?
比如网络上点播的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡顿(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。
在实时互动直播系统中,很少使用B帧。主要的原因是压缩和解码B帧时,由于要双向参考,所以它需要缓冲更多的数据,且使用的CPU也会更高。由于实时性的要求,所以一般不使用它。
一般情况:B帧丢失通常不会直接导致画面卡顿。因为B帧(双向预测帧)主要是用于提高视频的压缩效率和视觉质量,它不是独立解码的帧,而是通过参考I帧(关键帧)或P帧(前向预测帧)来获取自身的像素信息。当B帧丢失时,播放器可以利用其前后的I帧和P帧来尝试恢复或推测出丢失B帧位置的大致图像内容。例如,在一个相对稳定的视频场景中,如人物对话场景,丢失部分B帧后,观众可能只是察觉到画面质量有轻微的下降,如画面的流畅感稍差或细节有一些模糊,但基本不会出现卡顿现象。
特殊情况:不过,在某些特定情况下,B帧丢失也可能会导致卡顿。如果视频内容包含快速运动的物体或者场景切换频繁,并且丢失的B帧数量较多,播放器可能难以准确地从相邻帧推测出丢失B帧位置的内容,此时画面的连贯性会受到破坏,从而出现短暂的卡顿。另外,当播放设备的解码能力有限或者网络状况不佳(如在实时流媒体播放中),B帧丢失后的恢复机制可能无法正常工作,也会导致卡顿。
参考:
https://www.cnblogs.com/yongdaimi/p/10676309.html
https://www.cnblogs.com/linyilong3/p/9940210.html
基本定义
编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures ) , 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。GOP ( Group of Pictures) 是一组连续的视频帧,由一个 I 帧和若干个 B 、P 帧组成,是视频图像编解器存取的基本单位,它的排列顺序将会一直重复到影像结束。
在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。两个I帧之间形成一组图片,就是GOP(Group Of Picture)。
GOP 的结构组成
通常一个 GOP 包含三种类型的帧:I 帧(Intra - coded Frame)、P 帧(Predicted - coded Frame)和 B 帧(Bi - predicted - coded Frame)。由一张 I 帧和数张 B / P 帧组成。
I 帧是内部编码帧(也称为关键帧),P帧是前向预测帧(前向参考帧),B 帧是双向预测帧(双向参考帧)。简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧,P 帧和 B 帧就无法解码。
GOP 的作用
视频压缩效率方面:通过合理设置 GOP 的大小(即一个 GOP 中包含的帧数),可以在保证视频质量的基础上,显著提高视频的压缩效率。例如,对于一个相对静态的场景,如一个人坐在办公桌前办公,适当延长 GOP 长度,减少 I 帧的数量,可以使视频编码后的数据量更小。因为在这种静态场景下,P 帧和 B 帧可以很好地利用前后帧的相似性来减少数据量。
视频编辑和随机访问方面:I 帧在视频编辑和随机访问中起到关键作用。因为 I 帧可以独立解码,所以在视频编辑过程中,如剪辑、拼接等操作,只要找到 I 帧的位置,就可以方便地对视频进行修改。同时,当用户在播放视频时想要快速跳转seek到某个位置,解码器可以更快地定位到附近的 I 帧,然后开始解码,减少了等待时间,提高了用户体验。
分辨率
定义:视频分辨率是指视频图像在水平和垂直方向上所包含的像素数量,通常用“宽×高”来表示,如1920×1080(1080p)、1280×720(720p)等。它决定了视频画面的大小和细节程度。像素数量越多,画面能够呈现的细节就越丰富,图像也就越清晰。例如,1080p的视频比720p的视频在相同尺寸的屏幕上显示时,画面会更加细腻,能够展现更多的物体细节、文字信息等。
与其他参数的关系:分辨率越高,在保持相同画质的情况下,通常需要更高的码率来支持。这是因为高分辨率意味着每一帧图像包含的像素更多,要准确地描述这些像素的颜色、亮度等信息,就需要更多的数据量。例如,一个4K(3840×2160)分辨率的视频相比1080p分辨率的视频,每帧的像素数量是其4倍左右,所以如果要达到相似的画质,4K视频所需的码率会比1080p视频高很多。同时,帧率的提高也会使单位时间内需要处理的帧数量增加,进一步增加了数据量,这也会对码率产生影响。