h264編碼演算法
Ⅰ 關於視頻碼率的問題,怎麼壓縮不影響畫質,減小體積
最大限度保證清晰度這個很難有統一標准,清晰度是個比較主觀的指標。
編碼可選xvid或H264,碼流選1200以上,一般情況下清晰度是有保證的。建議不要改動解析度和幀速,那樣轉換速度會慢很多。
計算公式:
基本的演算法是:碼率(kbps)=文件大小(KB) * 8 / 時間(秒),舉例,D5碟,容量4.3G,其中考慮到音頻的不同格式,算為600M,所以視頻文件應不大於3.7G。
本例中取視頻文件的容量為3.446G,視頻長度100分鍾(6000秒),計算結果:碼率約等於4818kbps(3.446 * 1024 * 1024 * 8 / 6000 = 4817.857)。
碼率幾點原則:
1、碼率和質量成正比,但是文件體積也和碼率成正比。
2、碼率超過一定數值,對圖像的質量沒有多大影響。
3、DVD的容量有限,無論是標準的4.3G,還是超刻,或是D9,都有極限。計算機中的信息都是二進制的0和1來表示,其中每一個0或1被稱作一個位,用小寫b表示,即bit(位);大寫B表示byte,即位元組,一個位元組=八個位,即1B=8b。
前面的大寫K表示1024的意思,即1024個位(Kb)或1024個位元組(KB)。表示文件的大小單位,一般都使用位元組(KB)來表示文件的大小。
Kbps:ps指的是/s,即每秒。Kbps指的是網路速度,也就是每秒鍾傳送多少個千位的信息(K表示千位,Kb表示的是多少千個位),為了在直觀上顯得網路的傳輸速度較快,一般公司都使用kb(千位)來表示。1KB/S=8Kbps。
ADSL上網時的網速是512Kbps,如果轉換成位元組,就是512/8=64KB/S(即64千位元組每秒)。
4、一般來說,如果是1M的寬頻,在網上只能看不超過1024kbps的視頻,超過1024kbps的視頻只能等視頻緩沖才能流暢的觀看。
以上內容參考:網路-視頻碼率
Ⅱ H.264標准和H.264演算法以及H.264編碼器的關系和區別
標准只是規定了某個過程輸入和輸出的格式,對具體的演算法沒有規定,H.264編碼器就是符合H.264標準的編碼器
Ⅲ H264之幀編碼——透析(I幀+P幀+B幀編碼)原理與流程
在H.264壓縮標准中I幀、P幀、B幀⽤於表⽰傳輸的視頻畫⾯。在視頻壓縮中,每幀都代表著一幅靜止的圖像。在實際的視頻壓縮編碼時,會採取各種演算法減少數據的容量,其中IPB幀就是最常見的一種演算法。
I‑frame (Intra-coded picture): 即完整的一張圖片
P‑frame (Predicted picture): 與前面一張圖片的區別的區域
B‑frame (Bidirectional predicted picture):與前面以及後面的圖片的區別區域
I幀⼜稱幀內編碼幀,又稱全幀壓縮編碼幀,是⼀種⾃帶全部信息的獨⽴幀,⽆需參考其他圖像便可獨⽴進⾏解碼,可以簡單理解為⼀張靜態畫⾯。視頻序列中的第⼀個幀始終都是I幀,因為它是關鍵幀。I幀通常是每個GOP(MPEG所使用的一種視頻壓縮技術)的第一個幀,經過適度地壓縮,作為隨機訪問的參考點,可以當成靜態圖像。
現在有一段影片如下:
該影片總共是20張圖片組成的,每一張完整的圖片我們都可以叫做I幀。假如每張JPEG的圖片大小為100KB,那麼傳輸兩張圖片即為100 * 20 = 2000KB
要知道這個還不到幾秒的影片就2M了,要是幾個小時的那還得了,所以就有了影片壓縮的演算法
1.它是一個全幀壓縮編碼幀。它將全幀圖像信息進行JPEG壓縮編碼及傳輸;
2.解碼時僅用I幀的數據就可重構完整圖像;
3.I幀描述了圖像背景和運動主體的詳情;
4.I幀不需要參考其他畫面而生成;
5.I幀是P幀和B幀的參考幀(其質量直接影響到同組中以後各幀的質量);
6.I幀是幀組GOP的基礎幀(第一幀),在一組中只有一個I幀;
7.I幀不需要考慮運動矢量;
8.I幀所佔數據的信息量比較大。
P幀⼜稱幀間預測編碼幀,又稱前向預測編碼幀,需要參考前⾯的I幀才能進⾏編碼。表⽰的是當前幀畫⾯與前⼀幀(前⼀幀可能是I幀也可能是P幀)的差別。解碼時需要⽤之前緩存的畫⾯疊加上本幀定義的差別,⽣成最終畫⾯。
與I幀相⽐,P幀通常占⽤更少的數據位,但不⾜是,由於P幀對前⾯的P和I參考幀有著復雜的依耐性,因此對傳輸錯誤⾮常敏感。通常將圖像序列中前面已經編碼幀的時間冗餘信息充分去除來壓縮傳輸數據量的編碼圖像,也稱為預測幀。通過觀察,我們可以看出,實際上每一幀之間其實只有一部分細微的差別而已,如下圖提取了6幀
當傳輸完第一幀以後,第二幀其實我們只需要傳輸一部分,然後由另外一端進行圖片演算法來進行組合
用這種方式,在傳輸第二幀的時候,還不到原來的1/10,只需要傳輸第一幀的100KB,後續的都是按照這種方式傳輸部分,這種只傳輸部分的圖片,就是P幀了。最後整個影片的大小即為100KB + 10KB * 19 = 290 KB,比原來縮小了很多。
1.P幀是I幀後面相隔1~2幀的編碼幀;
2.P幀採用運動補償的方法傳送它與前面的I或P幀的差值及運動矢量(預測誤差);
3.解碼時必須將I幀中的預測值與預測誤差求和後才能重構完整的P幀圖像;
4.P幀屬於前向預測的幀間編碼。它只參考前面最靠近它的I幀或P幀;
5.P幀可以是其後面P幀的參考幀,也可以是其前後的B幀的參考幀;
6.由於P幀是參考幀,它可能造成解碼錯誤的擴散;
7.由於是差值傳送,P幀的壓縮比較高。
B幀⼜稱雙向預測編碼幀,又稱雙向預測內插編碼幀,也就是B幀記錄的是本幀與前後幀的差別。也就是說要解碼B幀,不僅要取得之前的緩存畫⾯,還要解碼之後的畫⾯,通過前後畫⾯的與本幀數據的疊加取得最終的畫⾯。B幀壓縮率⾼,但是對解碼性能要求較⾼。既考慮源圖像序列前面的已編碼幀,又顧及源圖像序列後面的已編碼幀之間的時間冗餘信息,來壓縮傳輸數據量的編碼圖像,也稱為雙向預測幀。B幀其實就是與前後兩張圖片的區別。如果理解了P幀和I幀,這個就很好理解了。
B幀比P幀更小,更節省空間
假設現在有三張圖片,如下圖:
在經過編碼後,會變成如下:
1.B幀是由前面的I或P幀和後面的P幀來進行預測的;
2.B幀傳送的是它與前面的I或P幀和後面的P幀之間的預測誤差及運動矢量;
3.B幀是雙向預測編碼幀;
4.B幀壓縮比最高,因為它只反映丙參考幀間運動主體的變化情況,預測比較准確;
5.B幀不是參考幀,不會造成解碼錯誤的擴散。
(1) 進行幀內預測,決定所採用的幀內預測模式。
(2) 像素值減去預測值,得到殘差。
(3) 對殘差進行變換和量化。
(4) 變長編碼和算術編碼。
(5) 重構圖像並濾波,得到的圖像作為其它幀的參考幀。
(1) 進行運動估計,計算採用幀間編碼模式的率失真函數(節)值。P幀只參考前面的幀,B 幀可參考後面的幀。
(2) 進行幀內預測,選取率失真函數值最小的幀內模式與幀間模式比較,確定採用哪種編碼模式。
(3) 計算實際值和預測值的差值。
(4) 對殘差進行變換和量化。
(5) 熵編碼,如果是幀間編碼模式,編碼運動矢量
Android音視頻工程師必備《全套音視頻入門到精通手冊》
I幀只需考慮本幀;P幀記錄的是與前⼀幀的差別;B幀記錄的是前⼀幀及後⼀幀的差別,能節約更多的空間,視頻⽂件⼩了,但相對來說解碼的時候就⽐較⿇煩。因為在解碼時,不僅要⽤之前緩存的畫⾯,⽽且要知道下⼀個I或者P的畫⾯,對於不⽀持B幀解碼的播放器容易卡頓。
Ⅳ 視頻編碼h264和h265是什麼意思
1、H.265
H.265是ITU-TVCEG繼H.264之後所制定的新的視頻編碼標准。H.265標准圍繞著現有的視頻編碼標准H.264,保留原來的某些技術,同時對一些相關的技術加以改進。新技術使用先進的技術用以改善碼流、編碼質量、延時和演算法復雜度之間的關系,達到最優化設置。
具體的研究內容包括:提高壓縮效率、提高魯棒性和錯誤恢復能力、減少實時的時延、減少信道獲取時間和隨機接入時延、降低復雜度等。H264由於演算法優化,可以低於1Mbps的速度實現標清數字圖像傳送;H265則可以實現利用1~2Mbps的傳輸速度傳送720P(解析度1280*720)普通高清音視頻傳送。
H.265旨在在有限帶寬下傳輸更高質量的網路視頻,僅需原先的一半帶寬即可播放相同質量的視頻。這也意味著,我們的智能手機、平板機等移動設備將能夠直接在線播放1080p的全高清視頻。
H.265標准也同時支持4K(4096×2160)和8K(8192×4320)超高清視頻。可以說,H.265標准讓網路視頻跟上了顯示屏「高解析度化」的腳步。
2、H.264
H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標准。
這個標准通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發者。
H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,採用MPEG-2壓縮標准壓縮後變成3.5GB,壓縮比為25∶1。
而採用H.264壓縮標准壓縮後變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和數據流量收費。
尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網路傳輸過程中所需要的帶寬更少,也更加經濟。
Ⅳ Android 音視頻01 --- H264的基本原理01
H264壓縮技術主要採用了以下幾種方法對視頻數據進行壓縮。包括:
解決的是空域數據冗餘問題。
解決的是時域數據冗徐問題
將空間上的相關性變為頻域上無關的數據然後進行量化。
經過壓縮後的幀分為:I幀,P幀和B幀:
關鍵幀,採用幀內壓縮技術。
向前參考幀,在壓縮時,只參考前面已經處理的幀。採用幀音壓縮技術。
雙向參考幀,在壓縮時,它即參考前而的幀,又參考它後面的幀。採用幀間壓縮技術。
除了I/P/B幀外,還有圖像序列GOP。
H264的基本原理其實非常簡單,下我們就簡單的描述一下H264壓縮數據的過程。通過攝像頭採集到的視頻幀(按每秒 30 幀算),被送到 H264 編碼器的緩沖區中。編碼器先要為每一幅圖片劃分宏塊。
劃分好宏塊後,計算宏塊的象素值。以此類推,計算一幅圖像中每個宏塊的像素值。
對於視頻數據主要有兩類數據冗餘,一類是時間上的數據冗餘,另一類是空間上的數據冗餘。其中時間上的數據冗餘是最大的。為什麼說時間上的冗餘是最大的呢?假設攝像頭每秒抓取30幀,這30幀的數據大部分情況下都是相關聯的。也有可能不止30幀的的數據,可能幾十幀,上百幀的數據都是關聯特別密切的。
H264編碼器會按順序,每次取出兩幅相鄰的幀進行宏塊比較,計算兩幀的相似度。如下圖:
在H264編碼器中將幀分組後,就要計算幀組內物體的運動矢量了。
H264編碼器首先按順序從緩沖區頭部取出兩幀視頻數據,然後進行宏塊掃描。當發現其中一幅圖片中有物體時,就在另一幅圖的鄰近位置(搜索窗口中)進行搜索。如果此時在另一幅圖中找到該物體,那麼就可以計算出物體的運動矢量了。
運動矢量計算出來後,將相同部分(也就是綠色部分)減去,就得到了補償數據。我們最終只需要將補償數據進行壓縮保存,以後在解碼時就可以恢復原圖了。壓縮補償後的數據只需要記錄很少的一點數據。
我們把運動矢量與補償稱為 幀間壓縮技術 ,它解決的是視頻幀在時間上的數據冗餘。除了幀間壓縮,幀內也要進行數據壓縮,幀內數據壓縮解決的是空間上的數據冗餘。
人眼對圖象都有一個識別度,對低頻的亮度很敏感,對高頻的亮度不太敏感。所以基於一些研究,可以將一幅圖像中人眼不敏感的數據去除掉。這樣就提出了幀內預測技術。
一幅圖像被劃分好宏塊後,對每個宏塊可以進行 9 種模式的預測。找出與原圖最接近的一種預測模式。然後,將原始圖像與幀內預測後的圖像相減得殘差值。再將我們之前得到的預測模式信息一起保存起來,這樣我們就可以在解碼時恢復原圖了,經過幀內與幀間的壓縮後,雖然數據有大幅減少,但還有優化的空間。
可以將殘差數據做整數離散餘弦變換,去掉數據的相關性,進一步壓縮數據。
上面的幀內壓縮是屬於有損壓縮技術。也就是說圖像被壓縮後,無法完全復原。而CABAC屬於無損壓縮技術。
無損壓縮技術大家最熟悉的可能就是哈夫曼編碼了,給高頻的詞一個短碼,給低頻詞一個長碼從而達到數據壓縮的目的。MPEG-2中使用的VLC就是這種演算法,我們以 A-Z 作為例子,A屬於高頻數據,Z屬於低頻數據。看看它是如何做的。
CABAC也是給高頻數據短碼,給低頻數據長碼。同時還會根據上下文相關性進行壓縮,這種方式又比VLC高效很多。
制定了相互傳輸的格式,將宏快 有組織,有結構,有順序的形成一系列的碼流。這種碼流既可 通過 InputStream 網路流的數據進行傳輸,也可以封裝成一個文件進行保存,主要作用是為了傳輸。
組成H264碼流的結構中 包含以下幾部分 ,從大到小排序依次是:
H264視頻序列,圖像,片組,片,NALU,宏塊 ,像素。
NAL層:(Network Abstraction Layer,視頻數據網路抽象層) : 它的作用是H264隻要在網路上傳輸,在傳輸的過程每個包乙太網是1500位元組,而H264的幀往往會大於1500位元組,所以要進行拆包,將一個幀拆成多個包進行傳輸,所有的拆包或者組包都是通過NAL層去處理的。
VCL層:(Video Coding Layer,視頻數據編碼層) : 對視頻原始數據進行壓縮
起始碼0x 00 00 00 01 或者 0x 00 00 01 作為 分隔符 。
兩個 0x 00 00 00 01之間的位元組數據 是表示一個NAL Unit。
I 幀的特點:
1.分組:把幾幀圖像分為一組(GOP,也就是一個序列),為防止運動變化,幀數不宜取多。
2.定義幀:將每組內各幀圖像定義為三種類型,即I幀、B幀和P幀;
3.預測幀:以I幀做為基礎幀,以I幀預測P幀,再由I幀和P幀預測B幀;
4.數據傳輸:最後將I幀數據與預測的差值信息進行存儲和傳輸。
1.更高的編碼效率:同H.263等標準的特率效率相比,能夠平均節省大於50%的碼率。
2.高質量的視頻畫面:H.264能夠在低碼率情況下提供高質量的視頻圖像,在較低帶寬上提供高質量的圖像傳輸是H.264的應用亮點。
3.提高網路適應能力:H.264可以工作在實時通信應用(如視頻會議)低延時模式下,也可以工作在沒有延時的視頻存儲或視頻流伺服器中。
4.採用混合編碼結構:同H.263相同,H.264也使用採用DCT變換編碼加DPCM的差分編碼的混合編碼結構,還增加了如多模式運動估計、幀內預測、多幀預測、基於內容的變長編碼、4x4二維整數變換等新的編碼方式,提高了編碼效率。
5.H.264的編碼選項較少:在H.263中編碼時往往需要設置相當多選項,增加了編碼的難度,而H.264做到了力求簡潔的「回歸基本」,降低了編碼時復雜度。
6.H.264可以應用在不同場合:H.264可以根據不同的環境使用不同的傳輸和播放速率,並且提供了豐富的錯誤處理工具,可以很好的控制或消除丟包和誤碼。
7.錯誤恢復功能:H.264提供了解決網路傳輸包丟失的問題的工具,適用於在高誤碼率傳輸的無線網路中傳輸視頻數據。
8.較高的復雜度:264性能的改進是以增加復雜性為代價而獲得的。據估計,H.264編碼的計算復雜度大約相當於H.263的3倍,解碼復雜度大約相當於H.263的2倍。
H.264的目標應用涵蓋了目前大部分的視頻服務,如有線電視遠程監控、交互媒體、數字電視、視頻會議、視頻點播、流媒體服務等。H.264為解決不同應用中的網路傳輸的差異。定義了兩層:視頻編碼層(VCL:Video Coding Layer)負責高效的視頻內容表示,網路提取層(NAL:Network Abstraction Layer)負責以網路所要求的恰當的方式對數據進行打包和傳送。