I帧,P帧,B帧,视频码率,帧率和分辨率 区别和理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I帧,P帧,B帧,视频码率,帧率和分辨率 区别和理解相关的知识,希望对你有一定的参考价值。

参考技术A 视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

简单地说, I帧 是关键帧,属于 帧内压缩 。就是和AVI的压缩是一样的。 P是 向前搜索的意思 。B是 双向搜索 。他们都是 基于I帧来压缩数据 。

I帧表示关键帧 ,你可以理解为这一帧画面的完整保留; 解码时只需要本帧数据就可以完成(因为包含完整画面)

P帧 表示的是 这一帧跟之前的一个关键帧(或P帧)的差别 , 解码时 需要用 之前缓存的画面叠加上本帧定义的差别,生成最终画面 。(也就是 差别帧 , P帧没有完整画面数据 ,只有 与前一帧的画面差别的数据 )

B帧是双向差别帧 ,也就是 B帧记录的是本帧与前后帧的差别 (具体比较复杂,有4种情况),换言之, 要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面 ,通过 前后画面的与本帧数据的叠加取得最终的画面 。B帧 压缩率高,但是解码时CPU会比较累 ~。

从上面的解释看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进。

但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别 ,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉, 因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了) ,并且由于网络上的电影为了节约空间,往往使用相当多的B帧, B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡 。

一般平均来说, I的压缩率是7(跟JPG差不多),P是20,B可以达到50 ,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

下面举例说明:

在如上图中,GOP (Group of Pictures)长度为13,S0~S7 表示 8个视点,T0~T12 为 GOP的 13个时刻。每个 GOP包含帧数为视点数 GOP 长度的乘积。在该图中一个 GOP 中,包含94 个 B帧。B 帧占一个 GOP 总帧数的 90.38%。GOP 越长,B 帧所占比例更高,编码的率失真性能越高。下图测试序列 Race1 在不同 GOP 下的率失真性能对比。

总结 : I帧,P帧,B帧 理解看粗体字的标记,关键的点都标出了,一定要看重点。

分辨率: 影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。

视频码率:(1:传输码率;2:编码码率)

码率:影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。

传输码率: 码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。也就是取样率(并不等同与采样率,采样率的单位是Hz,表示每秒采样的次数),单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真,围绕这个核心衍生出来cbr(固定码率)与vbr(可变码率), “码率”就是失真度,码率越高越清晰,反之则画面粗糙而多马赛克。

编码码率:单位时间的数据位数,(下面的结论是针对编码码率来说的跟传输码率没啥关系)

1:在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。(一帧图像就那么多数据,分辨率(面积大)越高,码率一定,相对图像越不清晰了)

2:在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。

帧率: 影响画面流畅度,与画面流畅度成正比,帧率越大,画面越流畅;帧率越小,画面越有跳动感。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。 帧率: 就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。

1. 音频 码率 计算公式:

音频码率=采样率 x 位深度 x 声道= 44.1Khz x 16位 x 2声道 = 1411.2 Kbps

2.文件大小 = 码率 x 时长(s) = 文件大小 = 码率 x 时长(s) = (Kbps )= (Kbps )/ 1024 Kb = (MB)

2.视频文件大小计算

文件大小 = 码率 x 时长(s)/8 = (Kbps )= (Kbps )/ 1024 Kb = (MB)

问题编解码的音视频同步问题原理

带来一个问题:在视频流中,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,这样一来播放时间与解码时间不一致了,顺序打乱了,那这些帧该如何播放呢?这时就需要我们来了解另外两个概念:DTS 和 PTS。

DTS、PTS 的概念

DTS、PTS 的概念如下所述:

DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。

PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。

当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。

比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:

PTS:1423  

 DTS:1234

Stream: I P B B

音视频的同步

上面说了视频帧、DTS、PTS 相关的概念。我们都知道在一个媒体流中,除了视频以外,通常还包括音频。音频的播放,也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。

音频视频混合在一起播放,就呈现了我们常常看到的广义的视频。在音视频一起播放的时候,我们通常需要面临一个问题:怎么去同步它们,以免出现画不对声的情况。

要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。这里的说的时间戳就是我们前面说的 PTS。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

带宽帧率分辨率概念与计算

目录

一、带宽的概念

        1.   B和b的关系

        2.    带宽的概念

        3.    相关换算公式

二、码率的概念 & 码率和带宽的区别

三、分辨率的概念

        1、分辨率的含义

        2、分辨率高的好处:

        3、图片在不同分辨率手机的效果:

四、帧率的概念

        1. 什么是帧率

        2、IPB帧

        3、GOP(Group Of Picture)

        4、示例分析

五、带宽、码率、帧率、分辨率的关系

2.  问题前提:一个视频文件的大小为5.86M,播放时长为3分7秒(目的:根据 文件大小&时长 -> 文件码率)

2.  问题前提:一个视频文件的大小为5.86M,播放时长为3分7秒(目的:根据 分辨率&帧率 -> 推荐码率)


一、带宽的概念

        1.   B和b的关系

      bit(binary digit-二进制位)是表示信息的最小单位,叫做二进制位;一般用0和1表示。

Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示计算机中的一个字符。

1Byte = 8bit,即 1B=8b其中

       

        2.    带宽的概念

        通常宽带速率的单位用bps(或b/s)表示,bps表示比特每秒即表示每秒钟传输多少位信息,是bit per second的缩写。

然而下载速度即下行网速用Byte来算,即 带宽1Mbps = 128KB/s

在实际所说的1M带宽的意思是1Mbps(是兆比特每秒Mbps不是兆字节每秒MBps)。

所以联通最高级别的千兆带宽,是 1000兆带宽 = 1000Mbps = 1000Mb/s  = 1000 * 1024 Kb/s =  1000 * 1024 ÷ 8 KB/s = 128000 KB/s

如下图,想要设置1000Mbps的带宽,对应下行网速为 128000 KB/s

        3.    相关换算公式

1B=8b

1B/s=8b/s(或1Bps=8bps)

1KB=1024B

1KB/s=1024B/s

1MB=1024KB

1MB/s=1024KB/s

二、码率的概念 & 码率和带宽的区别

        码率也叫比特率,单位是bps,带宽也是这个单位。两者的区别是

        带宽是相当于公路,公路越宽,意味着能够容纳更多的人流量;也就是宽窄用传输速度表示,更高的传输速率,代表系统拥有更高的处理能力,是代表能力不是实际情况的速度

      而码率是从传输的角度,码率表示1秒内传输多少位。从播放的角度,码率表示1秒内播放多少位(指连续的压缩后的音频或视频数据)。相当于采样调查,类似于压缩之前的原视频某条数据1s有10000位(10000bit)数据,但播放时只有500b,故此时的码率为500b;

        其实带宽和码率的关系不大,只是带宽代表了最大的承受速率,码率代表视频压缩后实际传输的速率;

三、分辨率的概念

        1、分辨率的含义

                目前手机普遍一种分辨率为1920×1080,即1920像素×1080像素。其中1920×1080的像素=2073600,即分辨率为2073600,即大约200万像素。

                因为水平方向含有像素数为1920个,垂直方向像素数1080个。故一般又被称1080P,P为逐行扫描的意思;并且我们通常都提1080p而不提1920,是因为1080p仅规范垂直像素点。

        

        2、分辨率高的好处:

手机分辨率高意味着更好的清晰度,也意味着显示更多的内容

        3、图片在不同分辨率手机的效果:

相同分辨率的图片在不同分辨率的手机上显示效果不一样。(这也就是测试时,需要适配不同分辨率手机的原因

当我们的手机的分辨率大于我们图片的分辨率的时候,这个时候图片就会被伸展(插入像素)造成图片失帧。其实事实上不仅仅是手机的分辨率大于图片的分辨率这种情况,当手机分辨率小于图片分辨率的时候也会出现图片压缩(释放像素)而造成的模糊。

        参考: https://blog.csdn.net/qq_15437701/article/details/39533047

        例如:对于500*500的图片,假设所有屏幕大小相同,

  • 如果某屏幕分辨率是1*1,那显示效果就是一个色块(如果手机不能达到和图片一样的像素手机显示的图片就会拥有和手机本身一样的像素,此时其实就是一个像素点其实很小,同屏幕分辨率100*100图片失帧)。

       

  •  但如果屏幕分辨率是100*100,你就能大概开出这张图的内容,但细节会丢失(因为上面提到手机分辨率小于图片分辨率的时,会进行图片压缩也就是释放一些像素造成了图片失帧)。 
  • 如果屏幕分辨率恰好是500*500,则完美显示。分辨率再高显示效果也不会好于1:1显示的,不过一般也不会比1:1的差。

四、帧率的概念

        1. 什么是帧率

        FPS (帧率Frames Per Second):1秒内平均画面刷新次数,是指1秒钟视频包含多少幅图画,类似动画片和电影胶片,帧率越大看起来更连贯,帧率用fps表示。常见的帧率有25fps、30fps。一般来说,帧率低于15帧/秒,连续的运动视频就会有停顿的感觉,30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感

如视频:「翻页动画」简单、易学、好画的翻页书动画,快做一个吧!,动漫,动漫综合,好看视频,帧率也就是类似1s中翻页多少次,如1s中翻页30次形成的视频,则帧率为 30bps

        2、IPB帧

        视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

  ● I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码
  ● P帧即Predictive-coded Picture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码
  ● B帧即Bidirectionally predicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图
像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码

  在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。

  I、P、B帧示意图

  所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

        3、GOP(Group Of Picture)

       两个I帧之间形成的一组图片,就是GOP(Group Of Picture)的概念。通常在为编码器设置参数的时候,必须要设置gop_size的值,其代表的是两个I帧之间的帧数目。一个GOP中容量最大的帧就是I帧,所以相对来讲,gop_size设置得越大,整个画面的质量就会越好,但是在解码端必须从接收到的第一个I帧开始才可以正确解码出原始图像,否则会无法正确解码(这也是前面提到的I帧可以作为随机访问的帧)。在提高视频质量的技巧中,还有个技巧是多使用B帧,一般来说,I的压缩率是7(与JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来更多地保存I帧,这样就能在相同的码率下提供更好的画质。所以我们要根据不同的业务场景,适当地设置gop_size的大小,以得到更高质量的视频。

        4、示例分析

        IPB帧编码顺序(解码顺序)与显示顺序

         

仅仅使用前一个显示的基准帧来编码的帧被称为“P帧”,同时使用前一个显示帧和未来帧作为基准帧进行编码的帧称为“B帧”。在通常的场景中,编解码器编码一个I帧,然后向前跳过几个帧,用编码I帧作为基准帧对一个未来P帧进行编码,然后跳回到I帧之后的下一个帧。编码的I帧和P帧之间的帧被编码为B帧。之后,编码器会再次跳过几个帧,使用第一个P帧作为基准帧编码另外一个P帧,然后再次跳回,用B帧填充显示序列中的空隙。这个过程不断继续,每12到15个P帧和B帧内插入一个新的I帧。例如,图1种给出了一个典型的视频帧序列。

通常,更换场景后的第一帧就是I帧,I帧应当全帧传送。从压缩的程度来看,I画面的压缩量最少;P画面次之,它是以I画面为基础;B画面压缩最多。为了加大压缩比,通常在I帧后面相隔2帧(最多3帧)设置1个P帧,在I、P帧之间都是B帧,在两个P帧之间也是设置2~3帧B帧。B帧传送它与I帧或P帧之间的差值信息,或者P帧与后面P帧或I帧之间的差值信息,或者它与前后I、P帧或P、P帧平均值之间的差值信息。当主体内容变化愈大时,两个I画面之间的帧数值越小;当主体内容变化小时,I面画的间隔可以适当大一些。或者说,B帧、P帧所占比例越大,图像压缩比越高。一般两个I画面相隔13~15帧,相隔帧数不宜再多。

下面以15帧为例,说明VCD图像帧的排列顺序。I、P、B三种画面的典型设置方式,对NTSC制共约需半秒时间。节目输入顺序是按实际出现顺序排列的,即I、B、B、P、B、B、P、B、B……I、B、B、P……;但为了解码时便于从I、P画面插补得到B画面,在编码录制节目时,将顺序改变了,即按照I、P、B、B……顺序,即改为按原来0、3、1、2、6、4、5、9、7、8…的画面顺序。解码时先解出0帧、3帧,再由其插补预测计算得出1帧、2帧等等。为此,须在解码器内设置动态存储器,将I、P帧先解码并存储,再计算出各个B帧。不过最后输出时,还是应当按照实际播放顺序重组读出,按正确顺序输出。


音视频编码卡的视频编码算法从JPEG 发展到MPEG-1、MPEG-2、MPEG-4和H.264。JPEG是一种著名的图像压缩方法,最初由Joint Photographic Experts Group在1986年提出并于1992年正式成为ISO标准(ISO/IEC 10918),主要应用于静态图像压缩,如果把它用在运动图像压缩的时候,就是我们通常所说的Motion-JPEG,由于JPEG相当于MPEG的帧内压缩,因而没有去除时域上的冗余,所以在保证一定图像质量的时候,压缩比不高,通常只有10-30倍,但是它有一个固定的优点,就是延迟在40ms,实时性很好,所以在某些特殊应用的场合仍然可以看到它的踪影。MPEG运动图像编码技术标准是由Motion Picture Experts Group在1988年提出,并于1992年11月通过,1993年8月作为ISO/IEC 11172标准公布,这就是通常所说的MPEG-1。MPEG-1为了追求更高的压缩效率,更注重去除图像系列的时间冗余度。因此引入了I帧(帧内编码)、P帧(前向预测编码)、B帧(双向预测编码)。P帧由前一个I帧或P帧图像来预测,而B帧由前后的两个P帧或一个I帧和一个P帧来预测,因而编解码和帧的显示顺序有所不同,如图1所示

I B B P B B P…B B I    I P B B P B B … I B B
1 2 3 4 5 6 7 …        1 4 2 3 7 5 6 …
  (a) 显示顺序          (b) 编解码顺序
                  图 1
        在此有两个问题需要说明:首先是插多少B 帧最合适?理论上说I、P之间插入的B帧越多,压缩比越高,但是编解码器所需的帧存储器也越大,因此实际应用中一般最多两个。其次,B帧的引入会增加编解码端的延迟,如果追求网络监视的时延,最好是不使用B帧。

五、带宽、码率、帧率、分辨率的关系

1.  问题前提:一个视频文件的大小为5.86M,播放时长为3分7秒(目的:根据 文件大小&时长 -> 文件码率)

1). 该文件对应的码率就是

5.86 * 1024 * 1024 * 8 / (3 * 60 + 7) =262872.95657754bps,其中计算5.86 * 1024 * 1024 * 8后的单位是位bit,视频文件共有(5.86 * 1024 * 1024 * 8)bit信息

2). 10M独享带宽能支撑的同时在线人数

10* 1024 * 1024 / 262872.95657754 =39.889078498294,其中10M = (10* 1024)K  =(10* 1024 * 1024)b

3). 支撑1000人同时在线的系统最少需要的带宽数为

262872* 1000 / (1024 * 1024) = 250.69427490234M,其中码率单位是bps,带宽单位 MB/s,故需要 1b = 1/ (1024 * 1024) = ... M

2.  问题前提:一个视频文件的大小为5.86M,播放时长为3分7秒(目的:根据 分辨率&帧率 -> 推荐码率)

视频宽    视频高    帧率60    帧率30    帧率25(荐)    帧率20    帧率15    帧率10    分辨率比例

计算公式 bitrate = w * h * fps * factor

手机直播场景: factor=0.08 ,同上表,建议不超过 0.2
电脑推流、本地录像保存:根据带宽实际需求,可提高, 建议不超过 0.5
大部分编码器有最大码率限制,不要超出最大值
例如
1) . 720X480 25帧 推荐码率 675Kb/s ( 720 * 480 * 25 * 0.08 )/1024 = 675Kb/s ,100M带宽够100/0.675≈148路 ,其中 ( 720 * 480 * 25 * 0.08 )单位为bit, 从bitrate = w * h * fps * factor 也能看出来单位

2).1280X720 25帧 推荐码率 1800Kb/s,100M带宽够100/1.8≈55路
 

参考链接:

https://blog.csdn.net/blade2001/article/details/46944287/

https://blog.csdn.net/ssllkkyyaa/article/details/110138393

直播视频分辨率码率参考设置_清霜之辰的专栏-CSDN博客

​​​​​​相同分辨率的图片在不同分辨率的手机上显示效果一样吗_百度知道

Android 图片失真的原因_我是小小舒-CSDN博客

以上是关于I帧,P帧,B帧,视频码率,帧率和分辨率 区别和理解的主要内容,如果未能解决你的问题,请参考以下文章

带宽帧率分辨率概念与计算

码率、帧率是啥?解析视频码率、帧率、分辨率的关系

视频基本概念

视频帧速率影响清晰度吗

Android FFmage 修改视频分辨率,帧率,区域裁剪

视频和视频帧:视频和帧基础知识整理