I、P、B帧区别

I、P、B帧区别

I frame :

帧内编码帧 又称 intra picture ,I 帧通常是每个 GOP( MPEG 所使用的一种视频压缩技术)的第一个帧,
经过适度地压缩, 做为随机访问的参考点, 可以当成图象。 I 帧可以看成是一个图像经过压缩后的产物	

I 帧特点 :

1.I 帧是一个全帧压缩编码帧。它将全帧图像信息进行 JPEG 压缩编码及传输 ; 
2.I 帧解码时仅用 I 帧的数据就可重构完整图像 ; 
3.I 帧描述了图像背景和运动主体的详情 ; 
4.I 帧不需要参考其他画面而生成 ; 
5.I 帧是 P 帧和 B 帧的参考帧 (其质量直接影响到同组中以后各帧的质量 ); 
6.I 帧是帧组 GOP 的基础帧 (第一帧 ),在一组中只有一个 I 帧 ; 
7.I 帧不需要考虑运动矢量 ; 
8.I 帧所占数据的信息量比较大。

P frame:

前向预测编码帧 又称 predictive-frame ,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;
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 帧的压缩比较高。	

B frame:

双向预测内插编码帧 又称 bi-directional interpolated prediction frame ,既考虑与源图像序列前面已编码帧,
也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧
B 帧 以前面的 I 或 P 帧和后面的 P 帧为参考帧 , “找出 ”B帧“某点 ”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在
	两个参考帧中 “找出 (算出 ) ”预测值并与差值求和 ,得到 B 帧“某点 ”样值 ,从而可得到完整的 B 帧。

B 帧特点

1.B 帧是由前面的 I 或 P 帧和后面的 P 帧来进行预测的 ; 
2.B 帧传送的是它与前面的 I 或 P 帧和后面的 P 帧之间的预测误差及运动矢量 ; 
3.B 帧是双向预测编码帧 ; 
4.B 帧压缩比最高 ,因为它只反映丙参考帧间运动主体的变化情况 ,预测比较准确 ; 
5.B 帧不是参考帧 ,不会造成解码错误的扩散

注:I 、B、P 各帧是根据压缩算法的需要 ,是人为定义的 ,它们都是实实在在的物理帧 ,至于图像中的哪一帧是 I 帧,是随机的 ,一但确定了 I 帧,以后的各帧就严格按规定顺序排列。
如果一个GOP钟没有B帧,解码器可以线性解码。
如果GOP中I\P\B帧间隔进行,那么解码器需要结合前后帧画面去预解读。切B帧不能随便丢,如果丢掉会造成画面卡顿即丢帧,因为B帧也包含了画面信息的。
一般平均I帧的压缩率是7相当于一个JPG图片的压缩率,P帧是20,B帧是50,相对来说B帧更节约空间。,B帧多了,就可以将节省下的空间保存I帧。

GOP组:

画面组 Group of Picture
一个 GOP 就是一组连续的画面,gop一般设置为帧率的2倍,关键帧间隔越长,也就是 GOP 越长,理论上画面越高清。GOP说白了就是两个I帧之间的间隔。
GOP=frameRate*2

MPEG-2 压缩

该算法压缩的帧结构有两个参数:
	一个参数是 GOP( Group Of Picture )图像组的长度,一般可按编码方式从 1-15;
	另一个是 I 帧和 P 帧之间 B 帧的数量, 一般是 1-2 个。前者在理论上记录为 N,即多少帧里面出现一次 I 帧;后者描述为多少帧里出现一次 P 帧,记录为 M

MPEG4

mpeg4 的每一帧开头是固定的: 00 00 01 b6,
各类型帧与 2bit 的对应关系
00: I Frame 
01: P Frame
10: B Frame
举例说明:
   举几个例子,以下是 16 进制显示的视频编码:
   00 00 01 b6 10 34 78 97 09 87 06 57 87 …… I 帧
   00 00 01 b6 50 78 34 20 cc 66 b3 89 …… P 帧
   00 00 01 b6 96 88 99 06 54 34 78 90 98 …… B 帧
下面我们来分析一下为什么他们分别是 I、P、B 帧
   0x10 = 0001 0000 
   0x50 = 0101 0000 
   0x96 = 1001 0100
大家看红色的 2bit ,再对照开头说的帧与 2bit 的对应关系,bingo,符合
   switch (buf[i] & ( BYTE)0xc0) 
   { 
   	case 0x00: 
   	 //I Frame 
   	break ; 
   	case 0x40: 
   	 //P Frame 
   	break ; 
   	case 0x80: 
   	 //B Frame 
   	break ; 
   	default : 
   	break ;
   }

PTS:

Presentation Time Stamp。PTS 主要用于度量解码后的视频帧什么时候被显示出来	

DTS:

Decode Time Stamp。DTS 主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码,在没有 B 帧存在的情况下 DTS 的顺序和 PTS 的顺序应该是一样的.

码率:

一般用多少 kbps(千比特 /秒)或者 mbps (兆比特 /秒)来表示

帧率:

(FPS, 帧 /秒), 就是视频画面刷新的速度,	

yuv:

主要指亮度和两个色差信号
YUV 文件格式又分很多种,有存储和压缩格式。
视频压缩用到的是 YUV420 格式,这是 因为人眼对亮度更敏感些,对色度相对要差些	

附:FFMPEGLinux安装

ffmpeg Linux安装:
1.安装SDL:
sudo apt-get install libsdl1.2-dev
sudo apt-get install libsdl-image1.2-dev
sudo apt-get install libsdl-mixer1.2-dev
sudo apt-get install libsdl-ttf2.0-dev
sudo apt-get install libsdl-gfx1.2-dev
2.安装x264:
git clone https://github.com/qupai/x264.git
./configure --prefix=/usr --enable-shared --disable-cli &&
sudo make 
sudo make install
3.安装FFMPEG:(该方法未生成ffplay)
更新库:(libMP3lame-dev、libxvidcore4-dev未找到,删掉即可)
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libMP3lame-dev libsdl1.2-dev libtheora-dev libx11-dev libxvidcore4-dev zlib1g-dev

./configure   --enable-shared  --prefix=/usr/local/ffmpeg  --enable-gpl --enable-libx264 --extra-cflags=-I/usr/local/ffmpeg/include --extra-ldflags=-L/usr/local/ffmpeg/lib --enable-ffplay
sudo make
sudo make install
4.配置环境变量:
sudo vi /etc/ld.so.conf
----添加 /usr/local/ffmpeg/lib
sudo ldconfig
sudo vi ~/.bashrc
----添加 export PATH="/usr/local/ffmpeg/bin:$PATH"
source ~/.bashrc
问题:ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open (未配置上述环境变量导致)
sudo vi /etc/ld.so.conf
----添加 /usr/local/ffmpeg/lib
sudo ldconfig
sudo vi ~/.bashrc
----添加 export PATH="/usr/local/ffmpeg/bin:$PATH"
source ~/.bashrc

参考:FFMPEG基础库编程开发

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值