本文共 754 字,大约阅读时间需要 2 分钟。
在H.264中,一个宏块包括16*16个像素,I宏块有三种形式:
1. 16个I4x4编码方式组成的宏块(为了方便,简称I4x4方式的宏块);
2. I16x16宏块;
3. IPCM宏块(特殊)
为什么一个宏块有时要分成16个I4x4方式的宏块呢?
因为分块越细,就越准确。
所以I4x4编码方式适合编码那些纹理比较复杂的宏块,而I16x16编码方式就更加笼统,适合编码那些比较平滑的区域.
在实验中也可以看出来:
用JM8.6编码foreman视频,用H.264visa分析码流,可以发现,在第一帧中,只有5个I16x16宏块,而这5个宏块所在区域都非常平坦,像素值几乎没有什么差异.
最特别的是IPCM宏块,这种宏块的脾气很古怪:
a.不预测
b. 没残差
c. 不变换
d.无量化等操作
那怎么玩呢?它是直接传像素值,直接将最原始的yuv数据写入到码流中,可见IPCM的信息不会有任何损失,是完全无损的.
想象一下:
如果将视频的所有宏块都编码成IPCM宏块,会怎样呢?
显然,此时H.264就是一个无损编码。
当然,在现实中,很少有人这么做.
那么,为什么要引入IPCM宏块呢?原因如下:
(1). 在某些特别的情况下(这种情况极少),某种编码方式并不是data compressor而是data expander, 这时候,与其进行复杂的变换,还不如直接传输原始yuv数据;
(2). 传输宏块所需要的代价有了一个上限,最大限度不得超过IPCM编码方式;
(3). 该宏块可以实现无失真传输,从理论上来讲,H.264可以实现无失真传输.
看最后一个问题:
一般来说,如果视频的静止区域少,那么,在视频中,有如下关系式:
I4x4方式的宏块数目 > I16x16宏块的数目 > IPCM宏块的数目.
转载地址:http://sczti.baihongyu.com/