在前兩期的文件格式系列科普中,IT之家已經(jīng)以JPG為典型,為大家講解了圖片格式,又以MP3為典型,為大家講解了音頻格式,今天,IT之家將為大家講解視頻的編碼原理。
視覺暫留現(xiàn)象
人的眼睛是一個非常巧妙的成像系統(tǒng),來自自然界的光經(jīng)由晶狀體,投射到感光細(xì)胞上,感光細(xì)胞將光轉(zhuǎn)化為神經(jīng)電流,通過視神經(jīng)傳到大腦,引起人體視覺。受制于視覺神經(jīng)的反應(yīng)速度,當(dāng)光停止作用后,在一段時間內(nèi),圖像仍將短暫地停留,稱為“后像“,這便是視覺暫留現(xiàn)象。
正因?yàn)槿说囊曈X系統(tǒng)有著這樣的特性,當(dāng)我們將一組動作連續(xù)的靜態(tài)圖片放在眼前快速切換時,人眼會感覺它“動起來了“。事實(shí)上,我們看到的視頻,就是由一張又一張的靜態(tài)圖像組成的。
有損圖像壓縮
前面我們已經(jīng)提到,視頻是由一張又一張的靜態(tài)圖片組成的,要壓縮視頻,首先就要壓縮這些組成視頻的靜態(tài)圖像,在關(guān)于JPEG圖片格式的科普中,我們已經(jīng)講解了JPEG的壓縮原理,事實(shí)上,視頻中的靜態(tài)圖片,它的壓縮原理和JPEG頗為相似。
首先,就是將色彩空間由RGB轉(zhuǎn)化為YCbCr,和RGB色彩空間通過紅綠藍(lán)三種顏色來組成大千世界不同,YCbCr將畫面分解成明度(亮度信息)和色度(色彩信息),在YCbCr的色彩空間下,把Cb(藍(lán))和Cr(紅)去掉,只留Y(亮度),那么圖像依然可以正常顯示,只是此時顯示的圖像是黑白的,把亮度信息和色彩信息分離所帶來的好處,就是解決了彩色顯示器和黑白顯示器的兼容問題。
色彩空間轉(zhuǎn)換完成后,就要對圖像進(jìn)行離散余弦變換(DCT)了,在DCT時,圖像將被分割成一個個8*8的像素塊,每個8*8的像素塊都將通過復(fù)雜的公式轉(zhuǎn)換為數(shù)字編碼,隨后,這些數(shù)字編碼將通過一系列的處理進(jìn)一步丟掉對人眼來講并不重要的數(shù)據(jù)(人眼對高頻區(qū)的辨識能力較差,這部分的數(shù)據(jù)可以酌情丟掉),經(jīng)過這番折騰,原始的8*8像素塊將被轉(zhuǎn)化為結(jié)尾有很多連續(xù)的0的一串?dāng)?shù)字編碼。這串編碼經(jīng)過冗余數(shù)據(jù)精簡后,再進(jìn)行一些處理,將生成一張經(jīng)過壓縮的圖片。這張圖片就是視頻中的I幀。
運(yùn)動預(yù)測
I幀,又稱幀內(nèi)編碼幀,這是個獨(dú)立幀,自帶全部信息;P幀,又稱幀間預(yù)測編碼幀,它里面包含的是當(dāng)前幀與前一幀之間的差別,在解碼時,需要以之前的畫面為基礎(chǔ),疊加上兩幅畫面之間的差異部分,才能生成最終的畫面。B幀,又稱雙向預(yù)測編碼幀,它不僅記錄了當(dāng)前幀與前一幀之間的差別,還記錄了當(dāng)前幀與下一幀之間的差別,B幀的壓縮率通常更高,不過對解碼性能的要求也更高。
P幀的生成過程,實(shí)際上就是運(yùn)動預(yù)測的過程,在這個過程中,圖像將被分割成一個個16*16的像素塊,然后,我們將計(jì)算當(dāng)前幀的這個16*16像素塊的信息與下一幀中哪個16*16像素塊中的信息最為相似,然后記錄下它們之間的位置差別(運(yùn)動預(yù)測矢量),簡單地說,運(yùn)動預(yù)測的過程,就是使用當(dāng)前幀位于不同起始位置的16*16像素塊,拼湊出下一幀的圖像來。B幀的生成原理和P幀大致相同,只不過B幀是同時結(jié)合前后兩幀來實(shí)現(xiàn)運(yùn)動預(yù)測的。
圖像組和視頻文件
所謂的圖像組,就是由I幀打頭,后面跟了一系列的P幀或者B幀的圖像的編組,看起來差不多是這個樣子的:I,P,P,P,P,P,P,P,P,P,P,如果有B幀,則是這個樣子的:I,P,B,B,P,B,B,P,B,B,P。
視頻文件是由一個接著一個的圖像組構(gòu)成的。在播放視頻時,每個圖像組的第一幀必須是I幀,若第一幀不是I幀,后面的P幀或者B幀將無法被還原成正常的圖像,視頻也就無法正常播放了。
如果一個P幀是由某幀通過運(yùn)動預(yù)測來生成的,那么這里的“某幀”就是該P(yáng)幀的參考幀,關(guān)于參考幀的選擇,也是有講究的。
這里有一個圖像組,I1,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,我們參考I1生成了P1,又參考了P1生成了P2,緊接著參考P2生成了P3,以此類推,最后生成了P10,由于運(yùn)動預(yù)測本身就是有誤差的,如果我們每一幀都參考前一幀進(jìn)行運(yùn)動預(yù)測,那么從P1到P10,誤差會越來越大,最后生成的P10可能就面目全非了。為了避免這個問題,在選擇參考幀時,我們可以這樣做,P1~P10,全部參考I1來生成,或者P1~P5參考I1來生成,然后P6~P10參考P5來生成,步子邁得小一點(diǎn),扯到蛋的風(fēng)險(xiǎn)自然就會降低。
到這里,視頻編碼基本原理的介紹就告一段落了,不同的編碼標(biāo)準(zhǔn),它具體的編碼方式也不盡相同,這個需要具體標(biāo)準(zhǔn)具體分析。常見的視頻編碼標(biāo)準(zhǔn)有MPEG-1、MPEG-2、MPEG-3、MPEG-4、H.264等。
視頻容器
如果說視頻是個圖書館,那么一幀一幀的圖像就是書的一頁一頁,一個一個的圖像組,就是一本又一本的書,我們還缺少什么東西?。繒?。圖書館里沒有書架怎么行?
所謂視頻容器,就是將圖像組,聲音以及視頻的附屬信息(比如字幕、分辨率、作者、加密信息等)封裝在一起的標(biāo)準(zhǔn),這就正是我們要找的書架。
視頻容器,又叫封裝格式,提到封裝格式(對應(yīng)相應(yīng)的文件擴(kuò)展名),相信大家一定非常眼熟,舉幾個例子,大家感受一下:avi、rmvb、mp4、flv、mkv……
封裝格式對視頻質(zhì)量的影響不大,決定視頻質(zhì)量的還是它的編碼數(shù)據(jù),就像前面舉的圖書館的例子,書架不管是豪華還是簡陋,只要它上面擺放的書是好書,那這個圖書館就是個好圖書館。
IT之家的用戶是多層次的,這篇文章的受眾是零基礎(chǔ)的讀者,本著淺顯易懂的原則,在一些方面我們并沒有深入討論和展開討論。如果你是相關(guān)行業(yè)的工作者,或者你是相關(guān)專業(yè)的高校學(xué)生,那么這篇文章可能不適合你。
好的,今天關(guān)于視頻壓縮原理的文章就到這里,文件格式系列科普至此完結(jié),想了解更多的常識科普和實(shí)用教程,請關(guān)注IT之家學(xué)院。
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。