FMUSER更輕鬆地傳輸視頻和音頻!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷蘭語
sq.fmuser.org ->阿爾巴尼亞人
ar.fmuser.org ->阿拉伯語
hy.fmuser.org - >亞美尼亞
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄羅斯語
bg.fmuser.org - >保加利亞
ca.fmuser.org ->加泰羅尼亞語
zh-CN.fmuser.org ->中文(簡體)
zh-TW.fmuser.org - >中國(繁體)
hr.fmuser.org ->克羅地亞語
cs.fmuser.org ->捷克
da.fmuser.org ->丹麥語
nl.fmuser.org - >荷蘭
et.fmuser.org ->愛沙尼亞語
tl.fmuser.org ->菲律賓
fi.fmuser.org ->芬蘭語
fr.fmuser.org - >法國
gl.fmuser.org ->加利西亞語
ka.fmuser.org ->喬治亞
de.fmuser.org ->德語
el.fmuser.org - >希臘
ht.fmuser.org ->海地克里奧爾語
iw.fmuser.org ->希伯來語
hi.fmuser.org ->印地語
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰島語
id.fmuser.org ->印尼語
ga.fmuser.org ->愛爾蘭
it.fmuser.org - >意大利
ja.fmuser.org ->日語
ko.fmuser.org ->韓文
lv.fmuser.org ->拉脫維亞
lt.fmuser.org - >立陶宛
mk.fmuser.org ->馬其頓語
ms.fmuser.org ->馬來語
mt.fmuser.org ->馬耳他語
no.fmuser.org - >挪威
fa.fmuser.org ->波斯語
pl.fmuser.org ->波蘭語
pt.fmuser.org ->葡萄牙語
ro.fmuser.org - >羅馬尼亞
ru.fmuser.org ->俄語
sr.fmuser.org ->塞爾維亞語
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亞
es.fmuser.org ->西班牙語
sw.fmuser.org ->斯瓦希里語
sv.fmuser.org ->瑞典語
th.fmuser.org - >泰國
tr.fmuser.org ->土耳其語
uk.fmuser.org ->烏克蘭語
ur.fmuser.org ->烏爾都語
vi.fmuser.org - >越南
cy.fmuser.org ->威爾士語
yi.fmuser.org - >意第緒語
前言
H264視頻壓縮算法無疑是目前所有視頻壓縮技術中使用最廣泛和最受歡迎的算法。 隨著諸如x264 / openh264和ffmpeg之類的開源庫的引入,大多數用戶不再需要對H264的細節進行過多的研究,從而大大降低了使用H264的人們的成本。
但是為了充分利用H264,我們仍然必須弄清楚H264的基本原理。 今天,我們將看一下H264的基本原理。
H264概述
H264壓縮技術主要使用以下方法壓縮視頻數據。 包括:
幀內預測壓縮解決了空間數據冗餘的問題。
幀間預測壓縮(運動估計和補償)解決了時域數據冗餘的問題。
整數離散餘弦變換(DCT),它將空間相關性轉換為頻域中的不相關數據,然後對其進行量化。
CABAC壓縮。
壓縮幀分為:I幀,P幀和B幀:
I幀:關鍵幀,使用幀內壓縮技術。
P幀:前向參考幀,壓縮時僅參考先前處理過的幀。 使用幀音頻壓縮技術。
B框架:雙向參考框架。 在壓縮期間,它指的是前一幀和後一幀。 使用幀間壓縮技術。
除了I / P / B幀外,還有圖像序列GOP。
GOP:兩個I幀之間是一個圖像序列,一個圖像序列中只有一個I幀。 如下所示:
現在我們將詳細描述H264壓縮技術。
H264壓縮技術
H264的基本原理實際上很簡單,下面簡要介紹一下H264壓縮數據的過程。 攝像機捕獲的視頻幀(以每秒30幀計算)被發送到H264編碼器的緩衝區。 編碼器必須首先為每個圖像劃分宏塊。
以下面的圖片為例:
分區宏塊
H264默認使用16X16區域作為宏塊,也可以將其劃分為8X8大小。
劃分宏塊後,計算宏塊的像素值。
以此類推,計算圖像中每個宏塊的像素值,並對所有宏塊進行如下處理。
子區塊
H264使用16X16宏塊來獲得相對平坦的圖像。 但是,為了獲得更高的壓縮率,較小的子塊也可以劃分為16X16宏塊。 子塊的大小可以是8X16、16X8、8X8、4X8、8X4、4X4,這非常靈活。
在上圖中,紅色框中的大多數16X16宏塊都具有藍色背景,並且在此宏塊中繪製了三隻鷹的圖像的一部分。 為了更好地處理三隻鷹的部分圖像,將H264多個子塊劃分為16X16宏塊。
這樣,在幀內壓縮之後,可以獲得更有效的數據。 下圖是分別使用mpeg-2和H264壓縮上述宏塊的結果。 左半部分是MPEG-2子塊分割後的壓縮結果,右半部分是H264子塊壓縮的結果。 可以看出,H264分割法具有更多的優點。
分割宏塊後,可以對H264編碼器緩衝區中的所有圖片進行分組。
框架分組
對於視頻數據,主要有兩種類型的數據冗餘,一種是時間上的數據冗餘,另一種是空間上的數據冗餘。 其中,時間上的數據冗餘最大。 讓我們首先談談視頻數據時間的冗餘問題。
為什麼時間冗餘最大? 假設相機每秒捕獲30幀,則這30幀的數據主要相關。 也可能有30多個數據幀,數十個幀或數百個數據幀特別緊密相關。
對於這些密切相關的幀,實際上,我們只需要保存一幀數據,並且可以根據某些規則從該幀中預測其他幀,因此視頻數據具有最大的時間冗餘。
為了通過預測方法實現相關幀壓縮數據,有必要對視頻幀進行分組。 那麼,如何確定某些框架緊密相關並且可以組合在一起呢? 讓我們看一個例子。 下面是一組運動中的台球的捕獲視頻幀。 台球從右上角滾動到左下角。
H264編碼器每次都會取出兩個相鄰的幀以比較宏塊,以便計算兩個幀的相似度。 如下所示:
通過宏塊掃描和宏塊搜索,可以發現兩個幀之間的相關性非常高。 此外,發現該組幀的相關度非常高。 因此,上述幀可以分為一組。 該算法是:在相鄰圖像中,通常不同的像素僅在10%以內,亮度差異不超過2%,色度差異僅在1%之內變化。 我們認為可以將圖組合在一起。
在這樣的一組幀中,編碼後,我們僅保留第一篇文章的完整數據,而其他幀則通過參考前一幀進行計算。 我們將第一個幀稱為IDR / I幀,將其他幀稱為P / B幀,因此我們將編碼數據幀組GOP稱為。
運動估計和補償
在H264編碼器中對幀進行分組之後,有必要計算幀組中對象的運動矢量。 以上面的移動台球視頻幀為例,讓我們看一下它是如何計算運動矢量的。
H264編碼器首先按順序從緩衝區標頭中取出兩幀視頻數據,然後執行宏塊掃描。 當在其中一張圖片中找到對象時,在另一張圖片附近(在搜索窗口中)執行搜索。 如果此時在另一個圖像中找到該對象,則可以計算該對象的運動矢量。 下圖顯示了搜索後的撞球位置。
通過上圖中的台球位置之間的差異,可以計算出桌面圖片的方向和距離。 H264依次記錄每幀中球的移動距離和方向,並變為以下形式。
在計算運動矢量之後,減去相同的部分(即綠色部分)以獲得補償數據。 最後,我們只需要壓縮和保存補償數據,然後在解碼時就可以恢復原始圖像。 壓縮的數據僅需要記錄少量數據。 如下:
我們將運動矢量和補償稱為幀間壓縮技術,它可以及時解決視頻幀的數據冗餘問題。 除了幀間壓縮外,還必須在幀內執行數據壓縮。 幀內數據壓縮解決了空間數據冗餘問題。 現在我們將介紹幀內壓縮技術。
幀內預測
人眼對圖像具有一定的識別度,它對低頻亮度非常敏感,而對高頻亮度不是很敏感。 因此,基於一些研究,可以從圖像中刪除對人眼不敏感的數據。 以這種方式,提出了幀內預測技術。
H264的幀內壓縮與JPEG非常相似。 將圖像劃分為宏塊後,可以以9種模式預測每個宏塊。 找到最接近原始圖像的預測模式。
下圖是預測整個圖片中每個宏塊的過程。
幀內預測後的圖像與原始圖像之間的比較如下:
然後,將原始圖像和幀內預測圖像相減以獲得殘差值。
然後保存我們之前獲得的預測模式信息,以便我們可以在解碼時恢復原始圖像。 效果如下:
經過幀內和幀間壓縮後,儘管數據大大減少了,但仍有優化的空間。
對殘差數據進行DCT
可以對殘差數據進行整數離散餘弦變換,以去除數據的相關性並進一步壓縮數據。 如下圖所示,左側是原始數據的宏塊,右側是計算出的殘差數據的宏塊。
殘留數據的宏塊被數字化,如下圖所示:
在殘差數據宏塊上執行DCT轉換。
刪除關聯數據後,我們可以看到數據已被進一步壓縮。
DCT完成後,還遠遠不夠,並且需要CABAC進行無損壓縮。
卡巴克
上述幀內壓縮是有損壓縮技術。 換句話說,在壓縮圖像後,無法將其完全還原。 CABAC是一種無損壓縮技術。
無損壓縮技術可能是每個人最熟悉的霍夫曼編碼,一種用於高頻詞的短代碼,一種用於低頻詞的長代碼,以達到數據壓縮的目的。 MPEG-2中使用的VLC是這種算法,我們以AZ為例,A屬於高頻數據,Z屬於低頻數據。 看看如何完成。
CABAC還是用於高頻數據的短代碼和用於低頻數據的長代碼。 同時,它將基於上下文進行壓縮,這比VLC效率高得多。 效果如下:
現在,將AZ替換為視頻幀,它將如下所示。
從上圖可以明顯看出,使用CACBA的無損壓縮方案比VLC高效得多。
總結
至此,我們已經完成了H264編碼原理。 本文主要討論以下幾點:
1.建音介紹了H264的一些基本概念。 例如I / P / B框架,GOP。
2.詳細解釋了H264編碼的基本原理,包括:
宏塊劃分
圖像分組
幀內壓縮技術原理
幀間壓縮技術的原理。
DCT
CABAC壓縮原理。
|
輸入電子郵件以獲取驚喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷蘭語
sq.fmuser.org ->阿爾巴尼亞人
ar.fmuser.org ->阿拉伯語
hy.fmuser.org - >亞美尼亞
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄羅斯語
bg.fmuser.org - >保加利亞
ca.fmuser.org ->加泰羅尼亞語
zh-CN.fmuser.org ->中文(簡體)
zh-TW.fmuser.org - >中國(繁體)
hr.fmuser.org ->克羅地亞語
cs.fmuser.org ->捷克
da.fmuser.org ->丹麥語
nl.fmuser.org - >荷蘭
et.fmuser.org ->愛沙尼亞語
tl.fmuser.org ->菲律賓
fi.fmuser.org ->芬蘭語
fr.fmuser.org - >法國
gl.fmuser.org ->加利西亞語
ka.fmuser.org ->喬治亞
de.fmuser.org ->德語
el.fmuser.org - >希臘
ht.fmuser.org ->海地克里奧爾語
iw.fmuser.org ->希伯來語
hi.fmuser.org ->印地語
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰島語
id.fmuser.org ->印尼語
ga.fmuser.org ->愛爾蘭
it.fmuser.org - >意大利
ja.fmuser.org ->日語
ko.fmuser.org ->韓文
lv.fmuser.org ->拉脫維亞
lt.fmuser.org - >立陶宛
mk.fmuser.org ->馬其頓語
ms.fmuser.org ->馬來語
mt.fmuser.org ->馬耳他語
no.fmuser.org - >挪威
fa.fmuser.org ->波斯語
pl.fmuser.org ->波蘭語
pt.fmuser.org ->葡萄牙語
ro.fmuser.org - >羅馬尼亞
ru.fmuser.org ->俄語
sr.fmuser.org ->塞爾維亞語
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亞
es.fmuser.org ->西班牙語
sw.fmuser.org ->斯瓦希里語
sv.fmuser.org ->瑞典語
th.fmuser.org - >泰國
tr.fmuser.org ->土耳其語
uk.fmuser.org ->烏克蘭語
ur.fmuser.org ->烏爾都語
vi.fmuser.org - >越南
cy.fmuser.org ->威爾士語
yi.fmuser.org - >意第緒語
FMUSER更輕鬆地傳輸視頻和音頻!
聯絡我們
分類
電子通訊