可以通過各種方法在一個圖像幀內或者在一系列幀之間減少視頻數據量。
在某個圖像幀內,只需要刪除不必要的信息就可以減少數據量,但這樣做會導致圖像的分辨率下降。
在一系列的幀內,可以通過差分編碼這樣的方法來減少視頻數據量,包括H.264在內的大多數視頻壓縮標準都采用這種方法。在差分編碼中,會將一個幀與參考幀(即前面的I幀或P幀)進行對比,然后只對那些相對于參考幀來說發生了變化的像素進行編碼。通過這種方法,可以降低需要進行編碼和發送的像素值。
圖3.對M-JPEG格式來說,上述序列中的三個圖像分別作為獨立的圖像(I幀)進行編碼和發送,彼此之間互不依賴。
圖4.對差分編碼(包括H.264在內的大多數視頻壓縮標準都采用這種方法)來說,只有第一個圖像(I幀)是將全幀圖像信息進行編碼。
如果是根據像素塊(宏塊)而不是單個的像素來檢測差別并進行差分編碼,還可以進一步減少需要編碼的信息量;因此,可以對更大的區域進行對比,而只需對那些存在重大差別的塊進行編碼。此外,對發生更改的區域位置進行標記的相關開銷也將大大降低。
然而,如果視頻中存在大量物體運動的話,差分編碼將無法顯著減少數據量。這時,可以采用基于塊的運動補償技術。基于塊的運動補償考慮到視頻序列中構成新幀的大量信息都可以在前面的幀中找到,但可能會在不同的位置上。所以,這種技術將一個幀分為一系列的宏塊。然后,通過在參考幀中查找匹配塊的方式,逐塊地構建或者“預測”一個新幀(例如P幀)。如果發現匹配的塊,編碼器只需要對參考幀中發現匹配塊的位置進行編碼。與對塊的實際內容進行編碼相比,只對運動矢量進行編碼可以減少所占用的數據位。
圖5.基于塊的運動補償圖示
上圖文字:
Search window | 搜索窗口 |
Matching block | 匹配塊 |
Motion vector | 運動矢量 |
Target block | 目標塊 |
Earlier reference frame | 前面的參考幀 |
P-frame | P幀 |