需要的前置知識不多,一般計算機(jī)大學(xué)本科會學(xué)過的,信息論相關(guān),離散數(shù)學(xué)相關(guān)。
但實(shí)際了解編碼時,反而是比較復(fù)雜的,目前視頻編碼的常用的是H264,H265,H266(原型中)。
視頻編碼其實(shí)一幀幀的圖像編碼,因此也可以學(xué)習(xí)一下靜態(tài)圖像編碼的一些相關(guān)知識,也會有幫助。
視頻編碼是連續(xù)的圖像編碼,因此會可以應(yīng)用到前后幀圖像的參考,比如一個視頻一直對著一個不太變化的物體,則后續(xù)幀只要簡單記錄變化即可。主要用到了離散變化,宏塊這些東西。
現(xiàn)在新的一些方法是基于人工智能學(xué)習(xí)后的結(jié)果,用這個方法來解決一個視頻,那些區(qū)塊壓縮多一些,那些區(qū)塊壓縮少一些,說白了,就是更符合人的視覺效果。
大家好,我是小棗君。
作為一名屌絲創(chuàng)業(yè)者,前幾天我追了一部美劇。劇名大家可能都聽過,就是「硅谷」。
劇里主要講述的,是一群美國硅谷年輕人的創(chuàng)業(yè)故事。我覺得挺好看的,一口氣追完了(貌似后面還會更新)。同為創(chuàng)業(yè)者,對里面的劇情非常有感觸。
今天這篇文章,并不是打算寫劇評,而是和劇中男豬腳的創(chuàng)業(yè)項目有密切的關(guān)系。
男豬腳理查德是一個技術(shù)宅,他發(fā)明了一個很強(qiáng)的算法,可以將視頻文件的體積大大壓縮,并且并不損失視頻質(zhì)量。這個算法受到了所有投資人的關(guān)注和追捧,大家都爭相給他投資。
中間的狗血故事略過不表,到這部劇的后期,理查德的壓縮算法,甚至延伸到“分布式計算”領(lǐng)域,要構(gòu)建一個“New Internet”。
更甚至,他們還利用自己的壓縮算法,搞起了區(qū)塊鏈,發(fā)行了自己的虛擬貨幣(魔笛手幣)。
為什么一個壓縮編碼算法,能有這么強(qiáng)大的能量?為什么視頻壓縮技術(shù)這么受追捧?圖像視頻壓縮到底是什么工作原理?
這,就是我們今天要討論的話題。
如今我們所處的時代,是移動互聯(lián)網(wǎng)時代,也可以說是視頻(多媒體)的時代。
從快播到抖音,從“三生三世”到“延禧攻略”,再從微信視頻通話,到支付寶人臉識別,我們的生活,被越來越多的視頻元素所影響。
而這一切,離不開視頻拍攝和制作技術(shù)的日益強(qiáng)大,更離不開通信技術(shù)的飛速進(jìn)步。
試想一下,如果還是當(dāng)年的56K Modem撥號,或者是2G手機(jī),你還能享受到現(xiàn)在動輒1080P甚至4K的視頻體驗(yàn)嗎?顯然是不可能的嘛。
除了視頻拍攝技術(shù)和網(wǎng)絡(luò)通信技術(shù)之外,我們能享受到視頻帶來的便利和樂趣,還有一個重要因素,就是視頻編碼技術(shù)的突飛猛進(jìn)。
說視頻之前,先要說說圖像。
圖像,大家都知道,是由很多“帶有顏色的點(diǎn)”組成的。這個點(diǎn),就是“像素點(diǎn)”。
像素點(diǎn)的英文叫Pixel(縮寫為PX)。這個單詞是由 Picture(圖像) 和 Element(元素)這兩個單詞的字母所組成的。
電影《像素大戰(zhàn)(Pixels)》,2015年
像素是圖像顯示的基本單位。我們通常說一幅圖片的大小,例如是1920×1080,就是長度為1920個像素點(diǎn),寬度為1080個像素點(diǎn)。乘積是2,073,600,也就是說,這個圖片是兩百萬像素的。
1920×1080,這個也被稱為這幅圖片的分辨率。
分辨率也是顯示器的重要指標(biāo)
那么,我們經(jīng)常所說的PPI又是什么東西呢?
PPI,就是“Pixels Per Inch”,每英寸像素數(shù)。也就是,手機(jī)(或顯示器)屏幕上每英寸面積,到底能放下多少個“像素點(diǎn)”。
這個值當(dāng)然是越高越好啦!PPI越高,圖像就越清晰細(xì)膩。
以前的功能機(jī),例如諾基亞,屏幕PPI都很低,有很強(qiáng)烈的顆粒感。
后來,蘋果開創(chuàng)了史無前例的“視網(wǎng)膜”(Retina)屏幕,PPI值高達(dá)326(每英寸屏幕有326像素),畫質(zhì)清晰,再也沒有了顆粒感。
像素點(diǎn)必須要有顏色,才能組成繽紛絢麗的圖片。那么,這個顏色,又該如何表示呢?
妹紙們都知道,顏色擁有無數(shù)種類,光是你們的口紅色號,就足以讓我們這些屌絲瞠目結(jié)舌。。。
在計算機(jī)系統(tǒng)里,我們不可能用文字來表述顏色。不然就算我們不瘋,計算機(jī)也會瘋掉的。在數(shù)字時代,當(dāng)然是用數(shù)字來表述顏色。
這就牽出了“彩色分量數(shù)字化”的概念。
懂繪畫的童鞋一定知道,任何顏色,都可以通過紅色(Red)、綠色(Green)、藍(lán)色(Blue)按照一定比例調(diào)制出來。這三種顏色,被稱為“三原色”。
在計算機(jī)里,R、G、B也被稱為“基色分量”。它們的取值,分別從0到255,一共256個等級(256是2的8次方)。
所以,任何顏色,都可以用R、G、B三個值的組合表示。
RGB=[183,67,21]
通過這種方式,一共能表達(dá)多少種顏色呢?256×256×256=16,777,216種,因此也簡稱為1600萬色。而3個8次方,等于24,因此,這種方式表達(dá)出來的顏色,也被稱為24位色。
這個顏色范圍已經(jīng)超過了人眼可見的全部色彩,所以又叫真彩色。再高的話,對于我們?nèi)搜蹃碚f,已經(jīng)沒有意義了,完全識別不出來。
那么,如果是RGB方式,一個像素點(diǎn)需要占用多少bit?3個2的8次方,一共是24bit。請記住哈,下面會用到。
好了,剛才說了圖像,現(xiàn)在,我們開始說視頻。
所謂視頻,大家從小就看動畫,都知道視頻是怎么來的吧?沒錯,大量的圖片連續(xù)起來,就是視頻。
衡量視頻,又是用的什么指標(biāo)參數(shù)呢?
最主要的一個,就是幀率(Frame Rate)。
在視頻中,一個幀(Frame)就是指一幅靜止的畫面。幀率,就是指視頻每秒鐘包括的畫面數(shù)量(FPS,F(xiàn)rame per second)。
幀率越高,視頻就越逼真、越流暢。
有了視頻之后,就涉及到兩個問題,一個是存儲,二個是傳輸。
而之所以會有視頻編碼,關(guān)鍵就在于此:一個視頻,如果未經(jīng)編碼,它的體積是非常龐大的。
以一個分辨率1920×1280,幀率30的視頻為例。
1920×1280=2,073,600(Pixels 像素)
每個像素點(diǎn)是24bit(前面算過的哦)
也就是每幅圖片2073600×24=49766400bit
8 bit(位)=1 byte(字節(jié)),所以,49766400bit=6220800byte≈6.22MB。
這是一幅1920×1280圖片的原始大小,再乘以幀率30,也就是說,每秒視頻的大小是186.6MB,每分鐘大約是11GB,一部90分鐘的電影,約是1000GB。。。
嚇尿了吧?就算你現(xiàn)在電腦硬盤是4TB的(實(shí)際也就3600GB),也放不下幾部大姐姐啊!
不僅要存儲,還要傳輸,不然視頻從哪來呢?
如果按照100M的網(wǎng)速(12.5MB/s),下剛才那部電影,需要22個小時。。。再次崩潰。。。
正因?yàn)槿绱耍瑢沤z工程師們就提出了,必須對視頻進(jìn)行編碼。
什么是編碼?
編碼,就是按指定的方法,將信息從一種形式(格式),轉(zhuǎn)換成另一種形式(格式)。
視頻編碼,就是將一種視頻格式,轉(zhuǎn)換成另一種視頻格式。
編碼的終極目的,說白了,就是為了壓縮。
各種五花八門的視頻編碼方式,都是為了讓視頻變得體積更小,有利于存儲和傳輸。
我們先來看看,視頻從錄制到播放的整個過程,如下:
首先是視頻采集。通常我們會使用攝像機(jī)、攝像頭進(jìn)行視頻采集。限于篇幅,我就不打算和大家解釋CCD成像原理了。
采集了視頻數(shù)據(jù)之后,就要進(jìn)行模數(shù)轉(zhuǎn)換,將模擬信號變成數(shù)字信號。其實(shí)現(xiàn)在很多都是攝像機(jī)(攝像頭)直接輸出數(shù)字信號。
信號輸出之后,還要進(jìn)行預(yù)處理,將RGB信號變成YUV信號。
前面我們介紹了RGB信號,那什么是YUV信號呢?
簡單來說,YUV就是另外一種顏色數(shù)字化表示方式。
視頻通信系統(tǒng)之所以要采用YUV,而不是RGB,主要是因?yàn)镽GB信號不利于壓縮。
在YUV這種方式里面,加入了亮度這一概念。
在最近十年中,視頻工程師發(fā)現(xiàn),眼睛對于亮和暗的分辨要比對顏色的分辨更精細(xì)一些,也就是說,人眼對色度的敏感程度要低于對亮度的敏感程度。
所以,工程師認(rèn)為,在我們的視頻存儲中,沒有必要存儲全部顏色信號。我們可以把更多帶寬留給黑—白信號(被稱作“亮度”),將稍少的帶寬留給彩色信號(被稱作“色度”)。于是,就有了YUV。
YUV里面的“Y”,就是亮度(Luma),“U”和“V”則是色度(Chroma)。
大家偶爾會見到的Y'CbCr,也稱為YUV,是YUV的壓縮版本,不同之處在于Y'CbCr用于數(shù)字圖像領(lǐng)域,YUV用于模擬信號領(lǐng)域,MPEG、DVD、攝像機(jī)中常說的YUV其實(shí)就是Y'CbCr。
YUV(Y'CbCr)是如何形成圖像的
YUV碼流的存儲格式其實(shí)與其采樣的方式密切相關(guān)。(采樣,就是捕捉數(shù)據(jù)。)
主流的采樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0。
具體解釋起來有點(diǎn)繁瑣,大家只需記住,通常用的是YUV4:2:0的采樣方式,能獲得1/2的壓縮率。
這些預(yù)處理做完之后,就是正式的編碼了。
前面我們說了,編碼就是為了壓縮。要實(shí)現(xiàn)壓縮,就要設(shè)計各種算法,將視頻數(shù)據(jù)中的冗余信息去除。
當(dāng)你面對一張圖片,或者一段視頻的時候,你想一想,如果是你,你會如何進(jìn)行壓縮呢?
對于新垣女神,我一bit也不舍得壓縮…
我覺得,首先你想到的,應(yīng)該是找規(guī)律。
是的,尋找像素之間的相關(guān)性,還有不同時間的圖像幀之間,它們的相關(guān)性。
舉個例子,如果一幅圖(1920×1080分辨率),全是紅色的,我有沒有必要說2073600次[255,0,0]?我只要說一次[255,0,0],然后再說2073599次“同上”。
如果一段1分鐘的視頻,有十幾秒畫面是不動的,或者,有80%的圖像面積,整個過程都是不變(不動)的。那么,是不是這塊存儲開銷,就可以節(jié)約掉了?
是的,所謂編碼算法,就是尋找規(guī)律,構(gòu)建模型。誰能找到更精準(zhǔn)的規(guī)律,建立更高效的模型,誰就是厲害的算法。
通常來說,視頻里面的冗余信息包括:
視頻編碼技術(shù)優(yōu)先消除目標(biāo),就是空間冗余和時間冗余。
接下來,小棗君就和大家介紹一下,究竟是采用什么樣的辦法,才能干掉它們。
以下內(nèi)容稍微有點(diǎn)高能,不過我相信大家耐心一些還是可以看懂的。
視頻是由不同的幀畫面連續(xù)播放形成的。
這些幀,主要分為三類,分別是I幀,B幀,P幀。
I幀,是自帶全部信息的獨(dú)立幀,是最完整的畫面(占用的空間最大),無需參考其它圖像便可獨(dú)立進(jìn)行解碼。視頻序列中的第一個幀,始終都是I幀。
P幀,“幀間預(yù)測編碼幀”,需要參考前面的I幀和/或P幀的不同部分,才能進(jìn)行編碼。P幀對前面的P和I參考幀有依賴性。但是,P幀壓縮率比較高,占用的空間較小。
P幀
B幀,“雙向預(yù)測編碼幀”,以前幀后幀作為參考幀。不僅參考前面,還參考后面的幀,所以,它的壓縮率最高,可以達(dá)到200:1。不過,因?yàn)橐蕾嚭竺娴膸圆贿m合實(shí)時傳輸(例如視頻會議)。
B幀
通過對幀的分類處理,可以大幅壓縮視頻的大小。畢竟,要處理的對象,大幅減少了(從整個圖像,變成圖像中的一個區(qū)域)。
如果從視頻碼流中抓一個包,也可以看到I幀的信息,如下:
我們來通過一個例子看一下。
這有兩個幀:
好像是一樣的?
不對,我做個GIF動圖,就能看出來,是不一樣的:
人在動,背景是沒有在動的。
第一幀是I幀,第二幀是P幀。兩個幀之間的差值,就是如下:
也就是說,圖中的部分像素,進(jìn)行了移動。移動軌跡如下:
這個,就是運(yùn)動估計和補(bǔ)償。
當(dāng)然了,如果總是按照像素來算,數(shù)據(jù)量會比較大,所以,一般都是把圖像切割為不同的“塊(Block)”或“宏塊(MacroBlock)”,對它們進(jìn)行計算。一個宏塊一般為16像素×16像素。
將圖片切割為宏塊
好了,我來梳理一下。
對I幀的處理,是采用幀內(nèi)編碼方式,只利用本幀圖像內(nèi)的空間相關(guān)性。
對P幀的處理,采用幀間編碼(前向運(yùn)動估計),同時利用空間和時間上的相關(guān)性。簡單來說,采用運(yùn)動補(bǔ)償(motion compensation)算法來去掉冗余信息。
需要特別注意,I幀(幀內(nèi)編碼),雖然只有空間相關(guān)性,但整個編碼過程也不簡單。
如上圖所示,整個幀內(nèi)編碼,還要經(jīng)過DCT(離散余弦變換)、量化、編碼等多個過程。限于篇幅,加之較為復(fù)雜,今天就放棄解釋了。
那么,視頻經(jīng)過編碼解碼之后,如何衡量和評價編解碼的效果呢?
一般來說,分為客觀評價和主觀評價。
客觀評價,就是拿數(shù)字來說話。例如計算“信噪比/峰值信噪比”。
搞通信的童鞋應(yīng)該對這個概念不會陌生吧?
信噪比的計算,我就不介紹了,丟個公式,有空可以自己慢慢研究...
除了客觀評價,就是主觀評價了。
主觀評價,就是用人的主觀感知直接測量,額,說人話就是——“好不好看我說了算”。
接下來,我們再說說標(biāo)準(zhǔn)(Standard)。
任何技術(shù),都有標(biāo)準(zhǔn)。自從有視頻編碼以來,就誕生過很多的視頻編碼標(biāo)準(zhǔn)。
提到視頻編碼標(biāo)準(zhǔn),先介紹幾個制定標(biāo)準(zhǔn)的組織。
首先,就是大名鼎鼎的ITU(國際電信聯(lián)盟)。
1865年5月17日,為了順利實(shí)現(xiàn)國際電報通信,法、德、俄、意、奧等20個歐洲國家的代表在巴黎簽訂了《國際電報公約》,國際電報聯(lián)盟(International Telegraph Union ,ITU)也宣告成立。
隨著電話與無線電的應(yīng)用與發(fā)展,ITU的職權(quán)不斷擴(kuò)大。
1906年,德、英、法、美、日等27個國家的代表在柏林簽訂了《國際無線電報公約》。
1932年,70多個國家的代表在西班牙馬德里召開會議,將《國際電報公約》與《國際無線電報公約》合并, 制定《國際電信公約》,并決定自1934年1月1日起正式改稱為“國際電信聯(lián)盟” ,也就是現(xiàn)在的ITU。
ITU是聯(lián)合國下屬的一個專門機(jī)構(gòu),其總部在瑞士的日內(nèi)瓦。
ITU下屬有三個部門,分別是ITU-R(前身是國際無線電咨詢委員會CCIR)、ITU-T(前身是國際電報電話咨詢委員會CCITT)、ITU-D。
除了ITU之外,另外兩個和視頻編碼關(guān)系密切的組織,是ISO/IEC。
ISO大家都知道,就是推出ISO9001質(zhì)量認(rèn)證的那個“國際標(biāo)準(zhǔn)化組織”。IEC,是“國際電工委員會”。
1988年,ISO和IEC聯(lián)合成立了一個專家組,負(fù)責(zé)開發(fā)電視圖像數(shù)據(jù)和聲音數(shù)據(jù)的編碼、解碼和它們的同步等標(biāo)準(zhǔn)。這個專家組,就是大名鼎鼎的MPEG,Moving Picture Expert Group(動態(tài)圖像專家組)。
三十多年以來,世界上主流的視頻編碼標(biāo)準(zhǔn),基本上都是它們提出來的。
ITU提出了H.261、H.262、H.263、H.263+、H.263++,這些統(tǒng)稱為H.26X系列,主要應(yīng)用于實(shí)時視頻通信領(lǐng)域,如會議電視、可視電話等。
ISO/IEC提出了MPEG1、MPEG2、MPEG4、MPEG7、MPEG21,統(tǒng)稱為MPEG系列。
ITU和ISO/IEC一開始是各自搗鼓,后來,兩邊成立了一個聯(lián)合小組,名叫JVT(Joint Video Team,視頻聯(lián)合工作組)。
JVT致力于新一代視頻編碼標(biāo)準(zhǔn)的制定,后來推出了包括H.264在內(nèi)的一系列標(biāo)準(zhǔn)。
壓縮率對比
視頻編碼標(biāo)準(zhǔn)的發(fā)展關(guān)系
大家特別注意一下上圖里面的HEVC,也就是現(xiàn)在風(fēng)頭正盛的H.265。
作為一種新編碼標(biāo)準(zhǔn),相比H.264有極大的性能提升,目前已經(jīng)成為最新視頻編碼系統(tǒng)的標(biāo)配。
最后,我再說說封裝。
對于任何一部視頻來說,只有圖像,沒有聲音,肯定是不行的。所以,視頻編碼后,加上音頻編碼,要一起進(jìn)行封裝。
封裝,就是封裝格式,簡單來說,就是將已經(jīng)編碼壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中。再通俗點(diǎn),視頻軌相當(dāng)于飯,而音頻軌相當(dāng)于菜,封裝格式就是一個飯盒,用來盛放飯菜的容器。
目前主要的視頻容器有如下:MPG、VOB、MP4、3GP、ASF、RMVB、WMV、MOV、Divx、MKV、FLV、TS/PS等。
封裝之后的視頻,就可以傳輸了,你也可以通過視頻播放器進(jìn)行解碼觀看。
好啦!額滴神啊,終于介紹完了。。。
其實(shí),小棗君之所以要做視頻編碼這么一個看似和通信無關(guān)的“跨界”專題,是有原因的。
以前我上大學(xué)的時候,就有一門專業(yè)課程,叫圖像識別,當(dāng)時是我們學(xué)校的王牌專業(yè),屬于計算機(jī)系。那個時候我并不明白,圖像識別到底是什么,為什么“畫畫”這種事情,會歸為“計算機(jī)類”。
后來,我才明白,所謂的“圖像識別”,就是讓計算機(jī)看懂圖像。怎么樣才能看懂呢?就是把圖像數(shù)字化。
圖像變成了數(shù)字,計算機(jī)就能從中找到規(guī)律,也能對它進(jìn)行分析。
這么多年過去了,圖像識別取得了非常大的發(fā)展。我們漸漸發(fā)現(xiàn),攝像頭開始“認(rèn)臉”了,停車場開始“看懂”車牌了,生活開始變得不一樣了。
更沒有想到的是,機(jī)器學(xué)習(xí)和AI人工智能也因此迅速崛起,開始對傳統(tǒng)技術(shù)發(fā)起挑戰(zhàn)。
前段時間很火的谷歌“你畫我猜”程序,就是AI結(jié)合圖像識別技術(shù)的一個“人機(jī)交互”經(jīng)典案例。
運(yùn)算速度足夠快,存儲空間足夠大,學(xué)習(xí)數(shù)據(jù)足夠多,計算機(jī)可以海量分析圖像和視頻數(shù)據(jù),尋找其中的規(guī)律,構(gòu)建模型。如果這個AI足夠強(qiáng)大,就能做出反應(yīng)和處理。
在電影《鷹眼》里,也描繪到這樣的一個場景:強(qiáng)大的AI大腦,控制全球的視頻攝像頭,還有所有的計算機(jī)系統(tǒng)、武器系統(tǒng),可以隨時在全球范圍內(nèi),找到想找到的人,并且干掉他。電影《速度與激情6》里,也有類似的場景。
電影《鷹眼》,2008年
除此之外,還有3D視頻、VR/AR等,也都是和圖像視頻密切相關(guān)的應(yīng)用。
總而言之,這是一個非常有前途的技術(shù)領(lǐng)域,值得深入進(jìn)行研究。也許,我們一直在尋找的5G爆款應(yīng)用,就和視頻有關(guān)呢!
好啦,今天的內(nèi)容就到這里,感謝大家的耐心觀看!
嘿嘿,大家看到那么優(yōu)質(zhì)的答案,不點(diǎn)下贊嘛?再來波關(guān)注更是極好的啊!