【安防知識(shí)網(wǎng)】在數(shù)字視頻監(jiān)控領(lǐng)域中,視頻的編解碼技術(shù)是其核心,正確理解數(shù)字視頻的編解碼概念有助于更好地設(shè)計(jì)數(shù)字視頻監(jiān)控系統(tǒng)與合理地選擇相關(guān)產(chǎn)品。然而長(zhǎng)久以來(lái),充斥于網(wǎng)絡(luò)上關(guān)于各種編解碼技術(shù)的描述艱澀難懂,更談不上很好地理解。本文試圖以簡(jiǎn)單明了的語(yǔ)言與圖解,敘述關(guān)于視頻編解碼的若干重要概念,以便初學(xué)者能正確理解這些概念,推動(dòng)數(shù)字視頻監(jiān)控領(lǐng)域的工作,甚至為研究具體的編解碼標(biāo)準(zhǔn)打下良好的基礎(chǔ)。
【相關(guān)閱讀】
數(shù)字視頻的編解碼技術(shù)淺析(中)
數(shù)字視頻的編解碼技術(shù)淺析(下)
模擬視頻信號(hào)的缺憾及其數(shù)字化
原始的視頻信號(hào)是模擬信號(hào),即信號(hào)的幅度、頻率或者相位是隨著時(shí)間做連續(xù)變化的。模擬視頻信號(hào)在一定條件下能保證圖像質(zhì)量的優(yōu)秀以及完全沒有延時(shí)性,因而模擬監(jiān)控仍然在目前占據(jù)主流的地位,在某些對(duì)畫面質(zhì)量和延時(shí)性要求較高的領(lǐng)域甚至是不可替代的。但是,模擬信號(hào)的傳輸和存儲(chǔ)都存在巨大的問題,模擬信號(hào)中除了有用的信號(hào)之外,還會(huì)產(chǎn)生伴生的噪聲信號(hào)以及在各種因素下侵入的干擾信號(hào)。模擬視頻信號(hào)是由一系列不同頻率的正弦信號(hào)組成的,和所有電磁波一樣,模擬視頻信號(hào)在介質(zhì)中傳遞也會(huì)損耗,在同一種介質(zhì)中,頻率越高損耗越劇烈。而對(duì)于模擬視頻信號(hào)來(lái)說(shuō),頻帶中的高頻分量決定了圖像的清晰度和色彩飽和度,這也就解釋了為什么模擬視頻信號(hào)經(jīng)過(guò)較長(zhǎng)一段同軸電纜的傳遞后變得色彩丟失圖像模糊了。為了避免在傳輸介質(zhì)中的損耗,在傳輸路徑上往往會(huì)增設(shè)一些放大器,但沒用的噪聲也被增強(qiáng)放大。同時(shí),由于目前電子產(chǎn)品制造工藝水平的局限,模擬信號(hào)傳輸路徑上的各種設(shè)備都無(wú)法做到輸入和輸出的完全線性對(duì)應(yīng),這就是說(shuō),模擬視頻信號(hào)每經(jīng)過(guò)一個(gè)設(shè)備,就不可避免地對(duì)原始信號(hào)產(chǎn)生變形和破壞,中間的環(huán)節(jié)越多,最后輸出的信號(hào)和原始信號(hào)相比就失真越厲害。并且,模擬視頻的存儲(chǔ)也是一大問題,最初,模擬視頻被存儲(chǔ)在磁帶或者磁盤上,經(jīng)過(guò)一段時(shí)間的存放,磁帶或磁盤上磁性粉末會(huì)變質(zhì)氧化,造成回放錄像資料時(shí)圖像的劣化,而且隨著時(shí)間的流逝,這種劣化是不可避免和逐漸加重的。
為解決上述模擬視頻存在的問題,有必要將模擬視頻數(shù)字化。數(shù)字化后,原始視頻信號(hào)變成由0和1構(gòu)成的數(shù)字流,復(fù)雜的信號(hào)就變成了簡(jiǎn)單的2個(gè)狀態(tài)的組合,無(wú)論是傳輸還是存儲(chǔ),維持2個(gè)狀態(tài)的準(zhǔn)確性顯然要容易的多,無(wú)論經(jīng)過(guò)多少級(jí)傳輸,無(wú)論視頻資料保存多久,只要0與1的數(shù)字流不變,輸出的視頻質(zhì)量就不會(huì)變化。
如何實(shí)現(xiàn)模擬視頻信號(hào)的數(shù)字轉(zhuǎn)化呢?眾所周知,模擬視頻信號(hào)的峰值是1V,即一個(gè)周期的視頻信號(hào),波峰到波谷的幅度是1V。在數(shù)模轉(zhuǎn)化中,通常要使用PCM編碼(又叫脈沖編碼調(diào)制——數(shù)字通信的編碼方式之一。主要過(guò)程是將話音、圖像等模擬信號(hào)每隔一定時(shí)間進(jìn)行取樣,使其離散化,同時(shí)將抽樣值按分層單位四舍五入取整量化,同時(shí)將抽樣值按一組二進(jìn)制碼來(lái)表示抽樣脈沖的幅值)技術(shù),如果這個(gè)信號(hào)以10位PCM的數(shù)字編碼表示,那么將把1V均分為1024(即2的10次方)份,因此模數(shù)轉(zhuǎn)換后的信號(hào)電壓幅度誤差為1/1024V,此電壓叫做量化電壓誤差,量化電壓誤差將隨著編碼位數(shù)的增加而下降。1024份不同的幅值從小到大排列,0V、1/1024V、2/1024V、3/1024V??1V分別對(duì)應(yīng)的數(shù)字編碼為0000000000、0000000001、0000000010??1111111111。每個(gè)這樣的0、1組合對(duì)應(yīng)一個(gè)特定的幅值,而這個(gè)幅值將對(duì)應(yīng)產(chǎn)生此幅值的時(shí)刻。這樣,每個(gè)不同的0、1組合都和一個(gè)周期內(nèi)的某個(gè)特定時(shí)刻建立了對(duì)應(yīng)關(guān)系,至此,一個(gè)周期的模擬視頻已經(jīng)完成了數(shù)字化的全過(guò)程。這樣的過(guò)程也稱模擬視頻的編碼(注意不同于后文提到的壓縮編碼),編碼設(shè)備只需在上述特定的時(shí)刻發(fā)送一個(gè)0、1組合到接受設(shè)備即可,接受設(shè)備根據(jù)接收到的0、1組合可恢復(fù)出此時(shí)刻的信號(hào)幅值,一系列恢復(fù)出的幅值連接起來(lái)就形成了一個(gè)在時(shí)間上近似連續(xù)的視頻信號(hào)。編碼位數(shù)越高,恢復(fù)出的信號(hào)在波形上就越接近于原始視頻信號(hào),這個(gè)逆過(guò)程就是視頻的解碼。這就是模擬視頻數(shù)字化的基本過(guò)程,此過(guò)程可用圖1表示。
[nextpage]
數(shù)字視頻的壓縮
模擬視頻信號(hào)數(shù)字化后就具備了在網(wǎng)絡(luò)上傳輸以及存儲(chǔ)的基本條件,然而,一路模擬視頻數(shù)字化后的數(shù)據(jù)量非常大(大概有120M左右),這樣的數(shù)據(jù)量在現(xiàn)有條件下無(wú)論是網(wǎng)絡(luò)傳輸或者是硬盤存儲(chǔ)都顯得不現(xiàn)實(shí),所以有必要對(duì)數(shù)字視頻流進(jìn)行編碼壓縮,即所謂的壓縮的算法,而壓縮算法也是數(shù)字視頻領(lǐng)域內(nèi)重要的概念。
通??梢圆捎糜袚p或者無(wú)損壓縮的方式來(lái)進(jìn)行圖像或者視頻的壓縮。在無(wú)損壓縮中,所有的像素都會(huì)被保留到解壓的同一圖像中,其原理類似于WINWAR壓縮應(yīng)用軟件。但是無(wú)損壓縮的缺點(diǎn)在于壓縮率十分有限,壓縮過(guò)的視頻數(shù)量仍然很大,不適合應(yīng)用于網(wǎng)絡(luò)視頻解決方案。
有損視頻壓縮技術(shù)用于減少和刪除多余的視頻數(shù)據(jù),以便更高效地在網(wǎng)絡(luò)上傳輸以及節(jié)省保存硬盤的容量。從理論上來(lái)說(shuō),模擬視頻經(jīng)過(guò)PCM數(shù)字化轉(zhuǎn)換后,就已經(jīng)對(duì)源視頻信號(hào)產(chǎn)生了損耗,但是只要PCM編碼位數(shù)高到一定程度,就可以認(rèn)為視頻質(zhì)量經(jīng)過(guò)數(shù)字化轉(zhuǎn)化后仍然是優(yōu)秀的(可參見數(shù)字光端機(jī))。僅僅經(jīng)過(guò)上述過(guò)程后生成的數(shù)字視頻數(shù)據(jù)量仍然非常大,必須對(duì)這些視頻流進(jìn)行某種規(guī)則下的壓縮,而這些規(guī)則必須能在保證視頻質(zhì)量或者盡量維持視頻質(zhì)量的前提下,大量刪除那些對(duì)視頻質(zhì)量影響不大且人類無(wú)法看見的數(shù)據(jù),這些數(shù)據(jù)的刪除基本不會(huì)影響視頻的觀感。理論上說(shuō),數(shù)字視頻經(jīng)過(guò)壓縮一定會(huì)損失一些細(xì)節(jié),但是卻能大大減小數(shù)字視頻的信息量,便于網(wǎng)絡(luò)傳輸以及節(jié)省存儲(chǔ)容量,所以這樣的犧牲是值得的;以下僅討論有損壓縮技術(shù)。
目前最常用的視頻壓縮標(biāo)準(zhǔn)分別是M-JEPG、MPEG-4和H.264,其中H.264是最有前途的視頻壓縮標(biāo)準(zhǔn),顯然H.264將成為市場(chǎng)的主流。
由于視頻可以看做連續(xù)的圖片,所以在介紹視頻壓縮算法之前,有必要先介紹一下圖片的壓縮。圖片的壓縮算法只處理單幅的圖片,最廣為人知的圖片壓縮方式就是JEPG,通常人們看到的圖片大都是JEPG文件格式的。JPEG的壓縮級(jí)別是可以由用戶指定的,比如,如果想把繪制好的VISIO圖片保存為JPEG文件格式,就會(huì)被要求寫入壓縮比率,壓縮比率將會(huì)決定生成JEPG圖片的文件大小,但是無(wú)論如何,生成的JEPG圖片的數(shù)據(jù)量都會(huì)小于VISIO圖片的數(shù)據(jù)量。再如,用Windows自帶的畫圖軟件畫一幅圖片,把它保存為JPEG文件格式后,可以明顯看到,同一幅圖片,JPEG文件的數(shù)據(jù)量遠(yuǎn)小于BMP文件的數(shù)據(jù)量。在把不同文件格式的圖片選擇保存為JPEG格式時(shí),其實(shí)就執(zhí)行了靜態(tài)圖片壓縮算法,只是過(guò)程極短,難以察覺。同理,在電腦上看JPEG圖片時(shí),電腦其實(shí)也執(zhí)行了相應(yīng)的解碼算法。
MJPEG-4就是M(MOTION移動(dòng))的JPEG算法,網(wǎng)絡(luò)攝像機(jī)或者編碼器和數(shù)碼照相機(jī)類似,捕捉壓縮單幅的圖片輸出,如果要看到連續(xù)的效果,那么每秒中輸出的圖片數(shù)量不能低于15幅,當(dāng)幀率達(dá)到30時(shí),看到的就是流暢的視頻了。由于輸出的每幅圖片都是JPEG的圖片,所以它們都擁有同樣的畫面質(zhì)量,最終形成的視頻質(zhì)量取決于數(shù)字?jǐn)z像機(jī)或者編碼器的內(nèi)設(shè)置的壓縮比率。
以圖2為例,對(duì)于M-JPEG算法來(lái)說(shuō),這個(gè)視頻片段由3幅靜態(tài)畫面構(gòu)成,每幅圖片單獨(dú)采集,單獨(dú)進(jìn)行壓縮然后打包傳輸,每幅圖片相對(duì)獨(dú)立,和彼此沒有關(guān)系。壓縮編碼芯片將對(duì)每幅畫面中所有對(duì)象進(jìn)行壓縮計(jì)算,生成壓縮文件,這種方式也叫幀內(nèi)壓縮。[nextpage]
MPEG-4和H.264是較好的視頻壓縮算法,均采用幀間壓縮的辦法進(jìn)一步壓縮視頻的數(shù)據(jù)量。幀間壓縮方案基于以下原理:圖像采集設(shè)備同樣先會(huì)生成一定幀率的原始幀,然后對(duì)比兩幀監(jiān)控前端采集到的圖像,第一幀圖像將作為參考幀,第二幀圖像將和第一幀圖像做對(duì)比,只有那些變化了的部分才被壓縮傳輸,換句話說(shuō),真正壓縮傳輸?shù)哪且缓罄m(xù)幀只包含變化的部分。解壓時(shí)將基于參考幀和差異部分來(lái)構(gòu)建一系列視頻。顯然,一個(gè)視頻片段中,只需要完全壓縮一幀或者個(gè)別幀畫面,而別的幀只壓縮相對(duì)于基礎(chǔ)幀變化的部分,這樣做明顯地降低了視頻的信息量,如圖3所示。
圖3中,房子的圖像在一系列畫面中不變,那么只在第一幀圖像中對(duì)房子進(jìn)行編碼壓縮,后續(xù)視頻中不再處理房子的畫面,而只壓縮發(fā)生變化的畫面,即跑動(dòng)的人,顯然,視頻的數(shù)據(jù)量會(huì)下降很多。這種辦法基于差分算法。在這種算法中,相鄰的幀存在彼此依存的關(guān)系,后續(xù)幀的壓縮編碼要基于基礎(chǔ)幀,故這種壓縮方法又叫幀間壓縮。
此外,基于“塊”的運(yùn)動(dòng)補(bǔ)償技術(shù)可以進(jìn)一步壓縮視頻數(shù)據(jù)。這種壓縮方法由上述方法演變而來(lái),其原理是:一幅畫面由不同的對(duì)象構(gòu)成,可以把圖中不同的對(duì)象定義為不同的對(duì)象“塊”。視頻序列中大量的 “塊”都可以在前面的幀中找到,不同的是,這些變化的對(duì)象“塊”可能會(huì)出現(xiàn)在不同的位置。于是,可以通過(guò)在參考幀上查找匹配塊的方式逐塊地構(gòu)建新的圖像幀,而在此過(guò)程中,只需對(duì)基礎(chǔ)幀中的各個(gè)圖像塊編碼壓縮,在后續(xù)視頻中,僅計(jì)算相關(guān)對(duì)象塊的移動(dòng)矢量(帶方向的數(shù)值)即可,通俗地講,就是計(jì)算每一個(gè)塊往某個(gè)方向移動(dòng)的距離。新生成的后續(xù)幀內(nèi)將只包含各個(gè)塊的運(yùn)動(dòng)矢量值而不含塊本身,而所有的對(duì)象塊的編碼都可以在基礎(chǔ)幀內(nèi)找到。毫無(wú)疑問,這樣會(huì)極大地壓縮視頻數(shù)據(jù)量,這種方法叫做運(yùn)動(dòng)補(bǔ)償技術(shù),如圖4所示。
在幀間壓縮的視頻編碼方式里,將把圖像序列中不同的幀分為3種類型,分別是I幀、B幀和P幀。
I幀叫幀內(nèi)編碼幀,這是一種自帶全部信息的獨(dú)立幀,在幀間壓縮編碼算法中充當(dāng)基礎(chǔ)幀的角色。后續(xù)畫面將和基礎(chǔ)幀進(jìn)行對(duì)比以找出發(fā)生變化的部分進(jìn)行壓縮編碼。由于I幀本身獨(dú)立,包含所有視頻信息,所以解碼時(shí)不需要其他圖像的參考即可獨(dú)立解碼。I幀的缺點(diǎn)在于,由于包含所有視頻信息,故壓縮率不可能太大,壓縮后的數(shù)據(jù)量不會(huì)很小,這點(diǎn)類似于前述的M-JPEG方式。
P幀也叫幀間預(yù)測(cè)編碼幀,P幀的構(gòu)建需要參考前面的I幀或者P幀的內(nèi)容。P幀內(nèi)僅僅包含相對(duì)于前幀變化的部分壓縮編碼。正因如此,P幀對(duì)前面的I幀或者P幀有著復(fù)雜的依賴性,對(duì)傳輸中的錯(cuò)誤非常敏感。P幀只需要參考前面的I或P幀。
【相關(guān)閱讀】
數(shù)字視頻的編解碼技術(shù)淺析(中)
數(shù)字視頻的編解碼技術(shù)淺析(下)