主頁 > 後端開發 > h.264視頻編碼器

h.264視頻編碼器

2020-09-24 21:55:47 後端開發

隨著時代的發展、Internet的普及,以及對視頻傳輸需求不斷提高,現有的這些視頻壓縮標準明顯存在著一些缺陷和局限性,為了克服這些缺點, ITU-T在繼H.261,H.263等視頻壓縮標準之后,制定了新一代視頻壓縮標準,并正式命名為H.264,新一代標準H.264可以得到更好的壓縮影像效果、擁有更多的功能和更大的靈活性,

本文首先介紹了多媒體技術發展的狀況以及視頻壓縮的基本概念和方法,然后分析了H.264編解碼器的基本結構和實作流程,本文在細致的分析了其編解碼器后,對于解碼器,編碼器都采用了多種方式進行優化,本文最后還將H.264做和MPEG4編碼進行對比做性能分析,本系統開發的視頻編碼器具有高效,穩定,在保證其優良性能的前提下,達到了縮短運行時間的目的,

H.264是一種視頻高壓縮技術,全稱是MPEG-4 AVC,用中文說是“活動影像專家組-4的高等視頻編碼”,或稱為MPEG-4 Part10,它是由國際電信標準化部門ITU-T和規定MPEG的國際標準化組織ISO/國際電工協會IEC共同制訂的一種活動影像編碼方式的國際標準格式,原來國際電信標準化部門從1998年就H.26L的H.26S兩個分組,前者研制節目時間較長的高壓縮編碼技術,后者則指短節目標準制訂部門,H.26S 的標準化技術的名稱為H.263,聽起來很耳生,但實質上卻早在用了,還被罵得很激烈,因為,H.263先入為大,一直以MPEG-4大內涵的名字在用, H.263的全稱為MPEG-4 Visual或MPEG-4 Pall Ⅱ,即MPEG-4視頻簡單層面的基礎編碼方式,2001年后,國際電信標準化部門ITU-T和MPEG的上級組織國際標準化組織ISO/國際電氣標準會議IEC成立了聯合視頻組JVT,在H.26L基礎進行H.264的標準化,

1.1視頻編碼標準的發展狀況

MPEG是活動影像專家組Moving Pictures Expert Group的簡稱,它制定了MPEG-1/2/4/7等視頻標準,MPEG-1適用于碼率為1.5Mbps的活動影像及其伴音的編碼,它主要應用于多媒體計算機、教育與訓練等領域,特別是基于CD的數字視聽系統,如VCD,它還可以應用于VOD和互動式電視等更廣闊的應用領域,MPEG-2是活動影像及其伴音資訊的通用編碼標準,用于對標準清晰度電視(SDTV)和高清晰度電視(HDTV)的編碼,碼率可達到100Mbps,它主要應用于數字視頻存盤、視頻廣播和通信,是對MPEG-1的重大改進和發展,并且從技術上促進了計算機、廣播電視、數字通信三大領域的交匯融合,發揮出巨大作用,這兩個協議使得多媒體視頻編碼技術邁上了一個新的臺階,

MPEG-4的初衷是針對視頻會議、視頻電話的甚低位元率編碼,但在制定程序中,隨著多媒體技術的發展和應用需求的變化,引入了視頻物件(VO)的概念,和傳統的基于影像幀的壓縮方法相比,基于視頻物件的策略更易于操作和控制編碼,并能更靈活的適應在基于內容的多種應用中,

MPEG-7全稱是多媒體內容描述介面,它對各種不同型別的多媒體資訊進行標準化描述,并將該描述與所描述的內容相聯系,力求能夠更快速并且有效的搜索出用戶所需的不同型別的多媒體資料,MPEG-7重點在于影音內容的描述和定義,以明確的資料結構和語法來定義影音資料的內容,與此同時,ITU-T為滿足可視電話和視頻會議等方面的應用,指定了H.261,H.263等標準,

1990年制定完成的H.261標準(ITU-T Recommendation H.261,Video codec for audiovisual services at p×64kbps)簡稱為p×64,當p=1或2時,碼率最大為128kbps,由于該碼率太低,能傳輸影像的清晰度不太高,所以只能適用于面對面的可視電話,當p≥6時,碼率為384kbps,可以傳輸清晰度尚好的影像,適用于會議電視,

ITU-T的H.263標準(ITU-T Recommendation H.263,Video Coding for LowBit rate Communication)是ITU-T于1996年制定的用于低碼率聲像服務的壓縮標準,它是ITU-T H.324系列標準所規定的多媒體通信終端的視頻編解碼標準,H.263實作了碼率在64kbps以下的視頻壓縮,由于要在低碼率下實作多媒體通信,技術上實作就更為困難和復雜,因此,H.263采用了多種先進技術以降低碼率,

在H.263以后還有一些改進的版本,如H.263+,是對H.263的進一步完善和發展,使得H.263在靈活性和編碼效率等方面有了很大的提高,能適應更加廣泛的應用要求,隨著在低碼率,網路應用,可擴展性等方面的一致性,ITU-T的VCEG(視頻編碼專家組)和ISO/IEC的MPEG(運動影像編碼專家組)成立了一個聯合視頻小組(JVT:joint video team),共同開發一個新的視頻編碼標準,它既是ITU-T的H.264,又是MPEG-4的第10部分,

第三章 視頻編碼原理

3.1 H.264的發展

  隨著HDTV的興起,H.264這個規范頻頻出現在我們眼前,HD-DVD和藍光DVD均計劃采用這一標準進行節目制作,而且自2005年下半年以來,無論是NVIDIA還是ATI都把支持H.264硬體解碼加速作為自己最值得夸耀的視頻技術,H.264到底是何方“神圣”呢?

  H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態影像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標準,

  H.264是一種高性能的視頻編解碼技術,目前國際上制定視頻編解碼技術的組織有兩個,一個是“國際電聯(ITU-T)“,它制定的標準有H.261、H.263、H.263+等,另一個是“國際標準化組織(ISO)”它制定的標準有MPEG-1、MPEG-2、MPEG-4等,而H.264則是由兩個組織聯合組建的聯合視頻組(JVT)共同制定的新數字視頻編碼標準,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高級視頻編碼(Advanced Video Coding,AVC),而且它將成為MPEG-4標準的第10部分,因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264,

  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!H.264為什么有那么高的壓縮比?低碼率(Low Bit Rate)起了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和資料流量收費,尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的影像,

  H.264演算法的優勢

  H.264是在MPEG-4技術的基礎之上建立起來的,其編解碼流程主要包括5個部分:幀間和幀內預測(Estimation)、變換(Transform)和反變換、量化(Quantization)和反量化、環路濾波(Loop Filter)、熵編碼(Entropy Coding),

  H.264/MPEG-4 AVC(H.264)是1995年自MPEG-2視頻壓縮標準發布以后的最新、最有前途的視頻壓縮標準,H.264是由ITU-T和ISO/IEC的聯合開發組共同開發的最新國際視頻編碼標準,通過該標準,在同等圖象質量下的壓縮效率比以前的標準提高了2倍以上,因此,H.264被普遍認為是最有影響力的行業標準,

3.2 H.264標準概述

  H.264和以前的標準一樣,也是DPCM加變換編碼的混合編碼模式,但它采用“回歸基本”的簡潔設計,不用眾多的選項,獲得比H.263++好得多的壓縮性能;加強了對各種信道的適應能力,采用“網路友好”的結構和語法,有利于對誤碼和丟包的處理;應用目標范圍較寬,以滿足不同速率、不同決議度以及不同傳輸(存盤)場合的需求,

  技術上,它集中了以往標準的優點,并吸收了標準制定中積累的經驗,與H.263 v2(H.263+)或MPEG-4簡單類(Simple Profile)相比,H.264在使用與上述編碼方法類似的最佳編碼器時,在大多數碼率下最多可節省50%的碼率,H.264在所有碼率下都能持續提供較高的視頻質量,H.264能作業在低延時模式以適應實時通信的應用(如視頻會議),同時又能很好地作業在沒有延時限制的應用,如視頻存盤和以服務器為基礎的視頻流式應用,H.264提供包傳輸網中處理包丟失所需的工具,以及在易誤碼的無線網中處理位元誤碼的工具,

  在系統層面上,H.264提出了一個新的概念,在視頻編碼層(Video Coding Layer, VCL)和網路提取層(Network Abstraction Layer, NAL)之間進行概念性分割,前者是視頻內容的核心壓縮內容之表述,后者是通過特定型別網路進行遞送的表述,這樣的結構便于資訊的封裝和對資訊進行更好的優先級控制,

3.3 H.264標準的關鍵技術

·幀內預測編碼

  幀內編碼用來縮減影像的空間冗余,為了提高H.264幀內編碼的效率,在給定幀中充分利用相鄰宏塊的空間相關性,相鄰的宏塊通常含有相似的屬性,因此,在對一給定宏塊編碼時,首先可以根據周圍的宏塊預測(典型的是根據左上角的宏塊,因為此宏塊已經被編碼處理),然后對預測值與實際值的差值進行編碼,這樣,相對于直接對該幀編碼而言,可以大大減小碼率,

  H.264提供6種模式進行4×4像素宏塊預測,包括1種直流預測和5種方向預測,如圖2所示,在圖中,相鄰塊的A到I共9個像素均已經被編碼,可以被用以預測,如果我們選擇模式4,那么,a、b、c、d4個像素被預測為與E相等的值,e、f、g、h4個像素被預測為與F相等的值,對于影像中含有很少空間資訊的平坦區,H.264也支持16×16的幀內編碼,

·幀間預測編碼

  幀間預測編碼利用連續幀中的時間冗余來進行運動估計和補償,H.264的運動補償支持以往的視頻編碼標準中的大部分關鍵特性,而且靈活地添加了更多的功能,除了支持P幀、B幀外,H.264還支持一種新的流間傳送幀——SP幀,碼流中包含SP幀后,能在有類似內容但有不同碼率的碼流之間快速切換,同時支持隨機接入和快速回放模式,圖3 SP-幀示意圖H.264的運動估計有以下4個特性,

  (1)不同大小和形狀的宏塊分割

  對每一個16×16像素宏塊的運動補償可以采用不同的大小和形狀,H.264支持7種模式,如圖4所示,小塊模式的運動補償為運動詳細資訊的處理提高了性能,減少了方塊效應,提高了影像的質量,

  (2)高精度的亞像素運動補償

  在H.263中采用的是半像素精度的運動估計,而在H.264中可以采用1/4或者1/8像素精度的運動估值,在要求相同精度的情況下,H.264使用1/4或者1/8像素精度的運動估計后的殘差要比H.263采用半像素精度運動估計后的殘差來得小,這樣在相同精度下,H.264在幀間編碼中所需的碼率更小,

  (3)多幀預測

  H.264提供可選的多幀預測功能,在幀間編碼時,可選5個不同的參考幀,提供了更好的糾錯性能,這樣更可以改善視頻影像質量,這一特性主要應用于以下場合:周期性的運動、平移運動、在兩個不同的場景之間來回變換攝像機的鏡頭,

  (4)去塊濾波器

  H.264定義了自適應去除塊效應的濾波器,這可以處理預測環路中的水平和垂直塊邊緣,大大減少了方塊效應,

·整數變換

  在變換方面,H.264使用了基于4×4像素塊的類似于DCT的變換,但使用的是以整數為基礎的空間變換,不存在反變換,因為取舍而存在誤差的問題,與浮點運算相比,整數DCT變換會引起一些額外的誤差,但因為DCT變換后的量化也存在量化誤差,與之相比,整數DCT變換引起的量化誤差影響并不大,此外,整數DCT變換還具有減少運算量和復雜度,有利于向定點DSP移植的優點,

·量化

  H.264中可選32種不同的量化步長,這與H.263中有31個量化步長很相似,但是在H.264中,步長是以12.5%的復合率遞進的,而不是一個固定常數,在H.264中,變換系數的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描,大多數情況下使用簡單的之字形掃描;雙掃描僅用于使用較小量化級的塊內,有助于提高編碼效率,

·.熵編碼

  視頻編碼處理的最后一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基于文本的自適應二進制算術編碼(CABAC),

  在H.263等標準中,根據要編碼的資料型別如變換系數、運動矢量等,采用不同的VLC碼表,H.264中的UVLC碼表提供了一個簡單的方法,不管符號表述什么型別的資料,都使用統一變字長編碼表,其優點是簡單;缺點是單一的碼表是從概率統計分布模型得出的,沒有考慮編碼符號間的相關性,在中高碼率時效果不是很好,

  因此,H.264中還提供了可選的CABAC方法,算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動矢量)的概率模型,為了提高算術編碼的效率,通過內容建模的程序,使基本概率模型能適應隨視頻幀而改變的統計特性,內容建模提供了編碼符號的條件概率估計,利用合適的內容模型,存在于符號間的相關性可以通過選擇目前要編碼符號鄰近的已編碼符號的相應概率模型來去除,不同的句法元素通常保持不同的模型,

·基本結構

H.264的編碼器如圖3-1所示,包含兩條資料流路徑,一條“前向”路徑(從左到右,藍色表示)和一條“重建”路徑(從右到左,紫色表示),

圖3-1 H.264編碼器模型

·前向路徑:

Fn為當前輸入幀,它以宏塊為單元進行處理(對應原來影像的16×16個像素),每個宏塊按照幀內或者幀間模式被編碼,無論那種模式,都會由重建幀形成一個預測塊P,如果是幀內模式,P由當前已經被編碼,解碼并且重建的幀n的采樣值來預測,如果是幀間模式,P從以前的一個或者多個運動參考幀的運動補償中獲得,即圖中的F’n-1,每個宏塊的預測可由以前的一幀或者幾幀已經編碼,重建的影像得到,

當前宏塊減去預測值得到差值宏塊Dn,Dn經過變換和量化后得到X(經過量化的變換系數),這些系數被掃描后進行熵編碼,然后和其他一些資訊(比如宏塊預測型別,量化步長以及運動矢量資訊)形成壓縮后的碼流,最后送到NAL傳輸,重建路徑:

量化好的宏塊系數X將被解碼以形成重建幀以供繼續編碼,X經過反量化,反變換后得到差值宏塊D’n,因為量化產生誤差,所以和原差值Dn不一樣,預測宏塊P加上D’n生成重建宏塊uF’n,uF’n經過一個濾波器來減少塊失真,得到F’n,由一系列的F’n得到重建幀,

·JM模型采用的搜索方法

在JM中運動搜索采用了一種更先進的快速搜索方法叫做非對稱十字型多層次六邊形格點搜索演算法Search),這是一項有中國專利的演算法,由于它在低碼率大運動的影像序列編碼時,在保持較好率失真性能的條件下,運算量十分低,相對于H.264中原有的快速全搜索演算法可節約90%以上的計算,現已被H.264標準正式采納,

它的搜索程序也比較復雜,采用了非對稱交叉搜索,不均勻多六邊形格點搜索,擴展六邊形搜索等多種先進的方法,是一種混合的搜索方式,

它主要有以下的四個步驟如下圖所示:

圖3-2 搜索步驟

其搜索方法主要有:1-根據預測資訊初始化搜索中心;2-非對稱交叉搜索;3-不均勻多六邊形網格搜索;3-擴展六邊形搜索;

3.5 H.264解碼器的分析

解碼器模型如圖3-3所示:解碼器從網路適配層接收碼流,經過熵解碼和重新排序后得到量化系數X,然后,再經過反量化,反變換后得到D`n,從碼流的頭資訊,解碼器建立一個預測宏塊P,它和編碼器中原來的P是一樣的,P加上D`n得到Uf`n,濾波后得到解碼宏塊F`n,其基本結構如下所示:

圖3-3 解碼器結構

H.264所采用的一些先進技術在解碼器的各個部分中得到了相應的體現,在解碼器的反變換中采用了由DCT變換改進而來的整數變換,它的預測不但有幀間預測模式還有幀內預測模式,解碼后使用了去塊效應的濾波器,

·變換和量化

無論是經過幀內預測還是幀間預測,殘差宏塊都需要進行變換和量化,以前的標準一般采用8×8的DCT變換,H.264根據殘差資料的型別采用三種不同的方式:幀內編碼宏塊的亮度DC系數采用4×4的矩陣(僅對于16×16的預測模式);色度DC系數使用2×2的矩陣;其他的都采用4×4的塊變換,宏塊里資料塊按圖3-4所示的順序傳輸,如果是16×16的幀內預測宏塊,首先傳輸編號-1的亮度DC系數,然后是編號0-15的亮度殘差資料,最后是編號16-25的色度DC和色度殘差資料,

圖3-4 宏塊中殘差塊的掃描順序

·幀間編碼宏塊的預測

幀間預測是從已經編碼過的一幀或者幾幀得到的,它是在參考幀采樣點平面上進行平移(運動補償預測),相對于以前的視頻標準,H.264支持更多種的塊的劃分(到4×4大小)和亞像素精度的運動矢量(到1/4像素精度),幀內編碼的每個塊都是由參考幀中相同大小的的區域預測得到的,它們間的偏移量就是運動矢量,因為參考幀本身不可能有亞像素采樣點,所以需要利用附近的像素內插產生亞像素的采樣點,圖3-5解釋了它的內插程序,

圖3-5 亞像素點產生示意圖

半像素點的插值分別由水平和垂直方向的6階的FIR濾波器產生,1/4像素點在整數像素點和半像素點上進行插值,

3.6 H.264的變換演算法

H.264中的整型變換方式主要有3種:4*4殘差變換,4*4亮度DC系數變換(16*16幀內模式下),2*2色度DC系數變換,H.264協議中的量化采用分級量化原理,H.264的變換和量化如圖3.6所示,

圖3-6 H.264變換與量化

·H.264的4*4殘留變換

4*4殘留變換及圖3-7所示的4*4變換1,它是以下式為變換核的整形變換,二維整型變換通常可以分解為一維的形式,先進行4行一維整數變換,再進行4列一維整數變換,一維整數變換公式為:

一維反變換公式:

式中A,B,C,D表示變換系數;a,b,e,d表示輸入象素;al,bl,cl,dl表示恢復系數,對上式分析可知,變換的系數均為整數,這樣通過移位,加減就可以實作其演算法,

圖3-7 整型正變換蝶形圖

·H.264亮度直流系數變換

當宏塊的編碼在16*6l幀內模式下,此時整個16*16塊的亮度分量是由相鄰象素點預測得到,宏塊的16個4*4塊的直流分量組成一個4X4直流系數矩陣Xl,這個矩陣的變換采用離散哈達馬變換(DiscretelldamaardTransform,DHT),如圖所示4*4變換2,

正向變換公式:

反變換公式:

式中ZD是幾量化后的矩陣,XQD經反量化可以得到.在幀內編碼的宏塊里,大多數的能量都集中在直流系數上,這種變換有利于進一步壓縮4*4的亮度直流信號的相關性,

本課題,我們除錯的JM7.3版本,首先下載并解壓JM測驗模型,在子目錄在新建一個mybin的檔案夾,把bin的檔案拷入mybin的檔案里:

圖4-1 JM檔案夾中所包含的檔案

打開工程檔案jm.dsw.進入VC界面,

在file選擇new,新建一個myencoder.cfg(在lend工程下)在路徑下選擇mybin檔案路徑.確定,

圖4-2 打開工程

這時在lendcod files下的Header Files下多了一個myencoder.cfg..電擊encoder.cfg在右邊出現的批配置,

.

圖4-3 引陣列態檔

在lendcod files下的Header Files下的configfile.h檔案的

#define DEFAULTCONFIGFILENAME “encoder.cfg”

改為

#define DEFAULTCONFIGFILENAME “myencoder.cfg”

然后在選中lencod files 在工程的選單下setting的DEBUG設定如圖引數設定:

圖4-4 設定界面

然后編譯,若要修改某個引數,可直接在myencoder.cfg中修改,比如YUV檔案,設定檔案的安放路徑為E:\視頻編碼的其他版本\JM路徑下的dancer_cif_ori90.yuv,我們在myencoder.cfg中InputFile = “E:\視頻編碼的其他版本\JM\dancer_cif_ori90.yuv”

4.2 H.264解碼器庫檔案的使用方法

·介面函式資訊

1.void JVT_init(struct inp_par*input,struct img_par*img,

StorablePicture*dec_picture,char*filename);

功能:解碼器的初始化,

引數資訊:struct inp_par*input――――配置資訊引數

struct img_par*img――――影像資訊引數

StorablePicture*dec_picture――――解碼后的影像序列

Char*filename――――輸入的H.264檔案的檔案名

2.void JVT_dec(struct inp_par*input,struct img_par*img,

NALU_t*nalu,int*current_header);

功能:解碼第i幀,

引數資訊:struct inp_par*input――――配置資訊引數

struct img_par*img――――影像資訊引數

NALU_t*nalu――――指向nalu單元的指標

int*current_header――――幀頭資訊

3.void JVT_free(struct inp_par*input,struct img_par*img,

ColocatedParams*Co_located);

功能:銷毀解碼器,釋放資源,

引數資訊:struct inp_par*input――――配置資訊引數

struct img_par*img――――影像資訊引數

ColocatedParams*Co_located――――存盤單元分配引數

4.NALU_t*AllocNALU(int buffersize);

功能:分配NALU單元,

引數資訊:int buffersize――――單元大小

5.void FreeNALU(NALU_t*n);

功能:釋放NALU單元,

引數資訊:NALU_t*n――――NALU單元地址

6.void CloseBitstreamFile();

功能:關閉檔案,

由于jm進行編碼的是都是YUV檔案,所以我們首先下載一個YUV播放器,

圖4-5 YUV播放器

該播放器是由VC開發的,是一個WINDOWS下的播放器,它可以播放YUV,m4u和264多種格式的視頻檔案,可以同時打開多個視窗,可以單幀和連續播放視頻,為了便于對不同格式影像的主觀質量進行比較還加入了影像放大功能,

其具有VideoPlayer的播放部分和解碼部分分開處理,解碼部分采用單獨的解碼庫delib.lib和libxvidcore.lib分別解碼MPEG-4和H.264格式的視頻檔案等功能,

4.3 JM程式除錯

我們首先運行JM程式,得到如下的結果,

圖4-6 JM運行結果

由此可知,輸入的視頻檔案為foreman_part_qcif.yuv,輸出檔案有四個,且其中輸出的播放檔案是test_rec.yuv,我們首先來波形兩個檔案,來主管的對比效果,

圖4-7 H.264壓縮前后效果對比

下面我們對進行H.264壓縮前后其信噪比進行分析,

圖4-8 H.264信噪比分析

通過仿真,我們可以發現,當位元率越大的時候,信噪比就越大,

以前av資訊被看作純粹的資料,編碼時沒有結合自身包含的內容,例如視頻序列被認為是象素的組合,MPEG4采用了物件的概念,不同的資料源被視作不同的物件,分別編碼,資料的接收者不再是被動的,他可以對不同的物件進行自己的操作:洗掉、添加、移動等,語音、影像、視頻等可以作為單獨存在的物件,也可以集合成一個更高層的物件,我們稱之為場景,MPEG4在編碼前首先要對視頻序列進行分析和理解以提取目標,

一幅復雜的畫面就由這些可操作的原始目標組成,如果對這些目標分別進行編碼 ,最終用戶便可以自由地操縱這些原始目標 (如目標的坐標 ,視點 ,影片等 ),還可得到一些原始目標的資訊,

優點:

不同物件的獨立編碼可以取得較高的壓縮性能,如背景采用壓縮比較高、損失較大的辦法編碼,運動物體采用壓縮比較低、損失較小的辦法,在壓縮效率與解碼質量間得到較好的平衡,同時也帶來在終端處可以操縱內容的能力,而傳統的壓縮方法是基于幀、基于塊的 ,壓縮性能不高且無法對物件進行操作,MPEG4中的物件操作使得用戶可以在用戶端直接將不同物件進行拼接 ,得到用戶自己合成的影像,這在傳統方法中是無法直接實作的,

對比MPEG4和H.264其信號噪比如下所示:

圖4-9 H.264和MPEG4信噪比分析

從上圖分析,H.264的編碼性能由于MPEG4新能,且當位元率越大的時候,性能優勢更大,

  TML-8為H.264的測驗模式,用它來對H.264的視頻編碼效率進行比較和測驗,測驗結果所提供的PSNR已清楚地表明,相對于MPEG-4(ASP:Advanced Simple Profile)和H.263++(HLP:High Latency Profile)的性能,H.264的結果具有明顯的優越性,

  H.264的PSNR比MPEG-4(ASP)和H.263++(HLP)明顯要好,在6種速率的對比測驗中,H.264的PSNR比MPEG-4(ASP)平均要高2dB,比H.263(HLP)平均要高3dB,6個測驗速率及其相關的條件分別為:32 kbit/s速率、10f/s幀率和QCIF格式;64 kbit/s速率、15f/s幀率和QCIF格式;128kbit/s速率、15f/s幀率和CIF格式;256kbit/s速率、15f/s幀率和QCIF格式;512 kbit/s速率、30f/s幀率和CIF格式;1024 kbit/s速率、30f/s幀率和CIF格式,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121532.html

標籤:python

上一篇:小白求助,這個0x00007FFC618DC4D8 (ucrtbase.dll) (test2.exe 中)處有未經處理的例外: 將一個無效引數傳遞給了將無效參

下一篇:【Microstation】第一章:Microstation三維模型構建概述

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more