H.264中IPCM巨集塊簡介
在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巨集塊,這種巨集塊的脾氣很古怪:不預測,沒殘差,不變換,無量化等操作,而是直接傳畫素值,直接將最原始的yuv資料寫入到碼流中,可見IPCM的資訊不會有任何損失,是完全無損的. 如果將視訊的所有巨集塊都編碼成IPCM巨集塊,那麼H.264就是一個無損編碼,當然,在現實中,很少有人這麼做. 那麼,為什麼要引入IPCM巨集塊呢?原因如下:
(1). 在某些特別的情況下(這種情況極少),某種編碼方式並不是data compressor而是data expander,這時候,與其進行復雜的變換,還不如直接傳輸原始yuv資料;
(2). 傳輸巨集塊所需要的代價有了一個上限,最大限度不得超過IPCM編碼方式;
(3). 該巨集塊可以實現無失真傳輸,從理論上來講,H.264可以實現無失真傳輸.
最後閒聊一句:一般來說,如果視訊的靜止區域少,那麼,在視訊中,I4x4方式的巨集塊數目 > I16x16巨集塊的數目 > IPCM巨集塊的數目.