掃描區別
在電視的標准顯示模式中,i表示隔行掃描,p表示逐行掃描。
隔行掃描視頻編碼(interlaced-scan video coding)
隔行掃描圖像的每幀包括兩個場,所以對於隔行掃描圖像有三種編碼方式:
1、將兩場合並為一幀進行編碼;
2、將兩場分別編碼;
3、將兩場合 並為一幀,但是在宏塊級別上,將一個幀宏塊划分為兩個場宏塊進行編碼。
前兩種編碼方式稱為圖像自適應幀/場編碼(Picture-adaptive frame-field, PicAFF or PAFF)
第三種稱為宏塊自適應幀/場編碼(Macroblock-adaptive frame-field, MBAFF)。
- PAFF:對於一個運動圖像,由於場之間存在着較大的掃描間隔,所以幀中相鄰兩行之間的空間相關性相對於逐行掃描圖像較小,因此對兩個場分別編碼 會更節省碼流。對於一個非運動圖像,相鄰兩行之間存在較大的空間相關性,將兩場合並為一幀編碼更有效。所以PAFF編碼方式可以針對整個圖像的編碼方式做 自適應調整,選擇幀編碼或場編碼。
- MBAFF:當圖像同時存在運動區域和非運動區域時,PAFF的劣勢便顯現出來,PAFF的自適應粒度太粗,無法實現滿足更加精細的編碼要求,於 是MBAFF應運而生。MBAFF對幀編碼或場編碼的選擇是基於宏塊的,MBAFF將兩場合並為一幀進行編碼,但將每一個幀宏塊(16x16)划分為場宏 塊對(8x16),針對每一個幀宏塊,比較幀編碼和場編碼產生的碼流大小,使用最節省碼流的方式。
運動補償
一種描述相鄰幀(相鄰在這里表示在編碼關系上相鄰,在播放順序上兩幀未必相鄰)差別的方法,具體來說是描述前面一幀(相鄰在這里表示在編碼關系上的前面,在播放順序上未必在當前幀前面)的每個小塊怎樣移動到當前幀中的某個位置去。這種方法經常被視頻壓縮/視頻編解碼器用來減少視頻序列中的時域冗余。它也可以用來進行去交織(deinterlacing)以及運動插值(motion interpolation)的操作。
一個視頻序列包含一定數量的圖片--通常稱為幀(frame)。相鄰的圖片通常很相似,也就是說,包含了很多冗余。使用運動補償的目的是通過消除這種冗余,來提高壓縮比。
最早的運動補償的設計只是簡單的從當前幀中減去參考幀,從而得到通常含有較少能量(或者稱為信息)的"殘差",從而可以用較低的碼率進行編碼。解碼器可以通過簡單的加法完全恢復編碼幀。
一個稍微復雜一點的設計是估計一下整幀場景的移動和場景中物體的移動,並將這些運動通過一定的參數編碼到碼流中去。這樣預測幀上的像素值就是由參考 幀上具有一定位移的相應像素值而生成的。這樣的方法比簡單的相減可以獲得能量更小的殘差,從而獲得更好的壓縮比--當然,用來描述運動的參數不能在碼流中 占據太大的部分,否則就會抵消復雜的運動估計帶來的好處。
通常,圖像幀是一組一組進行處理的。每組的第一幀(通常是第一幀)在編碼的時候不使用運動估計的辦法,這種幀稱為幀內編碼幀(Intra frame)或者I幀。該組中的其它幀使用幀間編碼幀(Inter frame),通常是P幀。這種編碼方式通常被稱為IPPPP,表示編碼的時候第一幀是I幀,其它幀是P幀。
在進行預測的時候,不僅僅可以從過去的幀來預測當前幀,還可以使用未來的幀來預測當前幀。當然在編碼的時候,未來的幀必須比當前幀更早的編碼,也就是說,編碼的順序和播放的順序是不同的。通常這樣的當前幀是使用過去和未來的I幀或者P幀同時進行預測,被稱為雙向預測幀,即B幀。這種編碼方式的編碼順序的一個例子為IBBPBBPBBPBB。