H.264中的P-Skip宏块和BSkip宏块简介

       先说PSkip宏块,再说BSkip宏块.

       P-Skip宏块是一种特殊的P宏块,在H.264中非常常见,那么P-Skip宏块特殊在什么地方呢?下面会慢慢道来.

 

       对于一般的P宏块而言,像素残差和运动矢量残差都会写入码流,从编码端传到解码端,但是P-Skip宏块的特殊之处就在于,既不传送像素残差,也不传送运动矢量残差(在这种情况下,像素残差和运动矢量残差必定都为零,所以根本不需要传送).编码端除了传送一些标识该宏块是PSkip宏块的很少量的bit外,不在需要传送关于该宏块的其他信息,那么解码端如何恢复出像素呢?

       我们知道,mvd = mv - mvp, 刚才说了,运动矢量残差mvd为零,而从解码端可以得到mvp, 所以,在解码端也就知道了mv. 在解码端有参考帧对应宏块的重建像素,根据这个重建像素和mv, 就可以恢复出本帧本宏块的像素值(如果mv是分数,则需要插值),这就是所谓的P-skip宏块原理,从字面理解就是跳过了这个宏块,相当于这个宏块没有编码,在解码端采取了近似替代的恢复办法.

 

       为什么要引入P-skip宏块呢?如果本帧的一宏块和参考帧的一宏块像素(不要求两宏块在同一位置)几乎完全一致,很显然,当前帧的宏块压根就不用编码,在解码端,直接就可以用近似替代的办法恢复出本帧本宏块的像素值. 比如在第一帧中有个乒乓球,在第二帧中也有个乒乓球,那个第二帧中乒乓球这个宏块就很可能编成了PSkip宏块.

 

       小结一下:用Elecard分析码流可以见,在H.264视频中, PSkip非常常见,一般而言,视频运动越小,QP越大,PSkip宏块出现的概率就会越高,对于PSkip宏块而言,像素残差和运动矢量残差必定为零(运动矢量不一定为零),下面给出用H.264visa分析的运动矢量不为零运动矢量为(-1/2, 0)的一个PSkip宏块:

==== MB 17(6, 1) ====
    Location : (96, 16),
    Slice No. : 0
    Slice Type : P Slice
    MB Type : P_Skip
    NumMbPart : 1
    MbPartSize : (16, 16)

****** Inter Info ******

Pos(0, 0):
    L0=MV(-2, 0),POC: 2,refIdx:0,DecNo:2

 

      BSkip宏块的原理和PSkip宏块的原理一样,只不过是从前后两个方向进行罢了,所以对于BSkip宏块就不在赘述.(之前博文在剖析B宏块编码原理时就有一个地方选用了BSkip宏块简化分析)

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值