視訊編碼基礎篇——視訊格式!

來源:酷知科普網 2.49W

本教程意在講述一些視訊音訊製作的基礎知識和術語,適合不瞭解壓片原理的收片黨們自學。它可以比較詳細的回答以下常見的問題:
. MP4/MKV這些格式有什麼區別?哪個畫質好?
. 視訊的位元速率是怎麼算的?為什麼同樣是1080p的視訊,有些體積大有些體積小?
. 視訊儲存的影象資訊是什麼格式的?跟顯示器一樣的紅綠藍麼?
. 8bit/10bit到底指的什麼?為什麼說8bit顯示器還有必要看10bit視訊?
. yuv420/444這些標示到底什麼意思?哪個好?
. 線條,平面,紋理這些到底是什麼意思?視訊為啥還有高頻低頻?
. 位元速率越高的視訊畫質越好麼?
……
本教程將分以下模組詳細敘述:
1、封裝格式(MP4/MKV…)  vs 媒體格式(H.264/FLAC/AAC…)
2、視訊的基礎引數:解析度,幀率和位元速率
3、影象的表示方法:RGB模型 vs YUV模型
4、色深
5、色度半取樣
6、空間上的低頻與高頻:平面,紋理和線條
7、時間上的低頻與高頻:動態
8、清晰度與畫質簡述

1、封裝格式(MP4/MKV…) vs 媒體格式(H.264/FLAC/AAC…)

(01)MP4+MKV是你下載的視訊檔案最常見的種類。這些檔案其實類似一個包裹,它的字尾則是包裹的包裝方式。這些包裹裡面,包含了視訊(只有影象),音訊(只有聲音),字幕等。當播放器在播放的時候,首先對這個包裹進行拆包(專業術語叫做分離/splitting),把其中的視訊、音訊等拿出來,再進行播放。既然它們只是一個包裹,就意味著這個字尾不能保證裡面的東西是啥,也不能保證到底有多少東西。包裹裡面的每一件物品,我們稱之為軌道(track),一般有這麼些:視訊(Video): 一般來說肯定都有,但是也有例外,比如mka格式的外掛音軌,其實就是沒視訊的mkv。注意我們說到視訊的時候,是不包括聲音的。音訊(audio):一般來說也肯定有,但是有些情況是靜音的,就沒必要帶了。章節(Chapter): 藍光原盤中自帶的分段資訊。如果檔案帶上了,那麼你可以在播放器中看到帶章節的效果:.potplayer右鍵畫面,選項-播放-在進度條上顯示書籤/章節標記.mpc-hc 右鍵畫面,選項-調節-在進度條顯示章節標記字幕(Subtitles):有些時候檔案自帶字幕,並且字幕並非是直接整合於視訊的硬字幕,那麼就是一起被打包在封裝容器中。其他可能還有附件等,不一一列舉。每個型別也不一定只有一條軌道,比如經常見到帶多音軌的MKV。每個軌道,都有自己的格式。比如大家常說的,視訊是H.264,音訊是AAC,這些就是每個軌道的格式。視訊的格式,常見的有H.264(可以細分為8bit/10bit),H.265(當前也有8bit/10bit之分),RealVideo(常見於早期rm/rmvb),VC-1(微軟主導的,常見於wmv)。基本上,H.264=AVC=AVC1, H.265=HEVC。音訊的格式,常見的有 FLAC/ALAC/TrueHD/DTS-HD MA這四種無損,和AAC/MP3/AC3/DTS(Core)這四種有損。MKV vs MP4,主要的區別在於:MKV支援封裝FLAC作為音訊,MP4則不支援。但是MP4也可以封裝無損音軌(比如說ALAC,雖然普遍認為ALAC的效率不如FLAC優秀)MKV支援封裝ASS/SSA格式的字幕,MP4則不支援。一般字幕組製作的字幕是ASS格式,所以內封字幕多見於MKV格式MP4作為工業標準,在視訊編輯軟體和播放裝置上的相容性一般好於MKV。這也是vcb-s那些為移動裝置優化的視訊基本上選擇MP4封裝的原因。除此之外,這兩個格式很大程度上可以互相代替。比如它們都支援封裝AVC和HEVC,包括8bit/10bit的精度。所以MP4畫質不如MKV好,這種論斷是非常無知的——它們完全可以封裝一樣的視訊。為什麼會有這樣的分歧,就是歷史原因了。MKV是民間研發,為了代替古老的AVI,從而更好地支援H264,它開發和修改的靈活度使得它可以相容flac/ass這類非工業標準的格式;而MP4則是出生豪門,作為工業標準,替代更古老的MPG,作為新一代視訊/音訊封裝服務的。

(02)2、視訊的基礎引數:解析度,幀率和位元速率。視訊是由連續的影象構成的。每一張影象,我們稱為一幀(frame)。影象則是由畫素(pixel)構成的。一張影象有多少畫素,稱為這個影象的解析度。比如說1920×1080的影象,說明它是由橫縱1920×1080個畫素點構成。視訊的解析度就是每一幀影象的解析度。一個視訊,每一秒由多少影象構成,稱為這個視訊的幀率(frame-rate)。常見的幀率有24000/1001=23.976, 30000/1001=29.970, 60000/1001=59.940, 25.000, 50.000等等。這個數字是一秒鐘內閃過的影象的數量。比如23.976,就是1001秒內,有24000張影象。視訊的幀率是可以是恆定的(cfr, Const Frame-Rate),也可以是變化的(vfr, Variable Frame-Rate)位元速率的定義是視訊檔案體積除以時間。單位一般是Kbps(Kbit/s)或者Mbps(Mbit/s)。注意1B(Byte)=8b(bit)。所以一個24分鐘,900MB的視訊:體積:900MB = 900MByte = 7200Mbit時間:24min = 1440s位元速率:7200/1440  = 5000 Kbps = 5Mbps當視訊檔案的時間基本相同的時候(比如現在一集番大概是24分鐘),位元速率和體積基本上是等價的,都是用來描述視訊大小的引數。長度解析度都相同的檔案,體積不同,實際上就是位元速率不同。位元速率也可以解讀為單位時間內,用來記錄視訊的資料總量。位元速率越高的視訊,意味著用來記錄視訊的資料量越多,潛在的解讀就是視訊可以擁有更好的質量。(注意,僅僅是潛在,後文我們會分析為什麼高位元速率不一定等於高畫質)

(03)3、影象的表示方法:RGB模型 vs YUV模型光的三原色是紅(Red)、綠(Green)、藍(Blue)。現代的顯示器技術就是通過組合不同強度的三原色,來達成幾乎任何一種可見光的顏色。影象儲存中,通過記錄每個畫素紅綠藍強度,來記錄影象的方法,稱為RGB模型 (RGB Model)常見的圖片格式中,PNG和BMP這兩種就是基於RGB模型的。比如說原圖:

視訊編碼基礎篇——視訊格式!

(04)分別只顯示R G B通道的強度,效果如下:(紅綠藍,RGB)圖片順序可能有誤

視訊編碼基礎篇——視訊格式! 第2張
視訊編碼基礎篇——視訊格式! 第3張
視訊編碼基礎篇——視訊格式! 第4張

(05)三個通道下,資訊量和細節程度不一定是均勻分佈的。比如說可以注意南小鳥臉上的紅暈,在3個平面上的區分程度就不同——紅色平面下幾乎無從區分,造成區別的主要是綠色和藍色的平面。外圍白色的臉頰,三色都近乎飽和;但是紅暈部分,只有紅色飽和,綠色和藍色不飽和。這是造成紅色凸顯的原因。除了RGB模型,還有一種廣泛採用的模型,稱為YUV模型,又被稱為亮度-色度模型(Luma-Chroma)。它是通過數學轉換,將RGB三個通道,轉換為一個代表亮度的通道(Y,又稱為Luma),和兩個代表色度的通道(UV,併成為Chroma)。舉個形象點的例子:一家養殖場飼養豬和牛,一種記數方式是:(豬的數量,牛的數量)但是也可以這麼記錄:(總數量=豬的數量+牛的數量,相差=豬的數量-牛的數量)。兩種方法之間有數學公式可以互轉。6YUV模型乾的是類似的事。通過對RGB資料的合理轉換,得到另一種表示方式。YUV模型下,還有不同的實現方式。舉個用的比較多的YCbCr模型:它把RGB轉換成一個亮度(Y),和 藍色色度(Cb) 以及 紅色色度(Cr)。轉換背後複雜的公式大家不需要了解,只需要看看效果:只有亮度通道:

視訊編碼基礎篇——視訊格式! 第5張

(06)只有藍色色度:

視訊編碼基礎篇——視訊格式! 第6張

(07)只有紅色色度:在影象視訊的加工與儲存中,YUV格式一般更受歡迎,理由如下:1、人眼對亮度的敏感度遠高於色度,因此人眼看到的有效資訊主要來自於亮度。YUV模型可以將絕大多數的有效資訊分配到Y通道。UV通道相對記錄的資訊少的多。相對於RGB模型較為平均的分配,YUV模型將多數有效資訊集中在Y通道,不但減少了冗餘資訊量,還為壓縮提供了便利2、保持了對黑白顯示裝置的向下相容3、影象編輯中,調節亮度和顏色飽和度,在YUV模型下更方便。幾乎所有的視訊格式,以及廣泛使用的JPEG影象格式,都是基於YCbCr模型的。播放的時候,播放器需要將YCbCr的資訊,通過計算,轉換為RGB。這個步驟稱為渲染(Rendering)每個通道的記錄,通常是用整數來表示。比如RGB24,就是RGB各8個bit,用0~255 (8bit的二進位制數範圍)來表示某個顏色的強弱。YUV模型也不例外,也是用整數來表示每個通道的高低。

視訊編碼基礎篇——視訊格式! 第7張

(08)4、色深色深(bit-depth),就是我們通常說的8bit和10bit,是指每個通道的精度。8bit就是每個通道用一個8bit整數(0~255)代表,10bit就是用10bit整數(0~1023)來顯示。16bit則是0~65535(注意,上文的表述是不嚴謹的,視訊在編碼的時候,並非一定能用到0~255的所有範圍,而是可能有所保留,只用到一部分,比如16~235。這我們就不詳細展開了)你的顯示器是8bit的,代表它能顯示RGB每個通道0~255所有強度。但是視訊的色深是YUV的色深,播放的時候,YUV需要通過計算轉換到RGB。因此,10bit的高精度是間接的,它使得運算過程中精度增加,以讓最後的顏色更細膩。如何理解8bit顯示器,播放10bit是有必要的呢:一個圓的半徑是12.33m, 求它的面積,保留兩位小數。半徑的精度給定兩位小數,結果也要求兩位小數,那麼圓周率精度需要給多高呢?也只要兩位小數麼?取pi=3.14, 面積算出來是477.37平方米取pi=3.1416,面積算出來是477.61平方米取pi精度足夠高,面積算出來是477.61平方米。所以取pi=3.1416是足夠的,但是3.14就不夠了。換言之,即便最終輸出的精度要求較低,也不意味著參與運算的數字,以及運算過程,可以保持較低的精度。在最終輸出是8bit RGB的前提下,10bit YUV比起8bit YUV依舊具有精度優勢的原因就在這裡。事實上,8bit YUV轉換後,覆蓋的精度大概相當於8bit RGB的26%,而10bit轉換後的精度大約可以覆蓋97%——你想讓你家8bit顯示器發揮97%的細膩度麼?看10bit吧。8bit精度不足,主要表現在亮度較低的區域,容易形成色帶:注意這圖右邊那一圈圈跟波浪一樣的效果。這就是顏色精度不足的表現。10bit的優勢不只在於顯示精度的提高,在提高視訊壓縮率,減少失真方面,相對8bit也有優勢。這方面就不展開了。

視訊編碼基礎篇——視訊格式! 第8張

(09)5、色度半取樣在YUV模型的應用中,Y和UV的重要性是不等同的。影象視訊的實際儲存和傳輸中,通常將Y以全解析度記錄,UV以減半甚至1/4的解析度記錄。這個手段被稱為色度半取樣(Chroma Sub-Sampling)。色度半取樣可以有效減少傳輸頻寬,和加大UV平面的壓縮率,但是不可避免的會損失UV平面的有效資訊。我們平常的視訊,最常見的是420取樣。配合YUV格式,常常被寫作yuv420。這種取樣是Y保留全部,UV只以(1/2) x (1/2)的解析度記錄。比如說1920×1080的視訊,其實只有亮度平面是1920×1080。兩個色度平面都只有960×540的解析度。當然了,你也可以選擇不做縮減。這種稱為444取樣,或者yuv444。YUV三個平面全是滿解析度。在做YUV->RGB的時候,首先需要將縮水的UV解析度拉昇到Y的解析度(madVR中允許自定義演算法,在Chroma Upscaling當中),然後再轉換到RGB。做RGB->YUV的轉換,也是先轉換到444(YUV的解析度相同),再將UV解析度降低。一般能拿到的片源,包括所有藍光原盤,都是420取樣的。所以成品一般也保留420取樣。所以yuv420就表示這個視訊是420取樣的yuv格式。將420做成444格式,需要自己手動將UV解析度拉昇2×2倍。在今天madVR等渲染器可以很好地拉昇UV平面的情況下,這種做法無異於毫無必要的拉昇DVD做成偽高清。當然了,有時候也需要在444/RGB平面下做處理和修復,常見的比如視訊本身RGB平面不重疊(比如摩卡少女櫻),這種修復過程首先要將UV解析度拉昇,然後轉RGB,做完修復再轉回YUV。修復後的結果相當於全新構圖,這種情況下保留444格式就是有理由,有必要的。H264格式編碼444格式,需要High 4:4:4 Predictive Profile(簡稱Hi444pp)。所以看到Hi444pp/yuv444 之類的標示,你就需要去找壓制者的陳述,為什麼他要做這麼個拉昇。如果找不到有效的理由,你應該預設作者是在瞎做。6、空間上的低頻與高頻:平面,紋理和線條在視訊處理中,空間(spatial)的概念指的是一幀圖片以內(你可以認為就是一張圖所呈現的二維空間/平面)。跟時間(temporal)相對;時間的概念就強調幀與幀之間的變換。於是我們重新來看這張亮度的圖:亮度變化較快,變動幅度大的區域,我們稱之為高頻區域。否則,亮度變化緩慢且不明顯的區域,我們稱為低頻區域。圖中的藍圈就是一塊典型的低頻區域,或者就叫做平面(平坦的部分)。亮度幾乎沒有變化綠圈中,亮度呈現跳躍式的突變,這種高頻區域我們稱之為線條。紅圈中,亮度頻繁變化,幅度有高有低,這種高頻區域我們稱為紋理。有時候,線條和紋理(高頻區域)統稱為線條,平面(低頻區域)又叫做非線條。這是亮度平面。色度平面,高頻低頻,線條等概念也同樣適用,就是描述色度變化的快慢輕重。一般我們所謂的“細節”,就是指影象中的高頻資訊。一般來說,一張圖的高頻資訊越多,意味著這張圖資訊量越大,所需要記錄的資料量就越多,編碼所需要的運算量也越大。如果一個視訊包含的空間性高頻資訊很多(通俗點說就是每一幀內細節很多),意味著這個視訊的空間複雜度很高。記錄一張圖片,編碼器需要決定給怎樣的部分多少位元速率。位元速率在一張圖內不同部分的分配,叫做位元速率的空間分配。分配較好的時候,往往整幅圖目視觀感比較統一;分配不好常見的後果,就是線條紋理尚可,背景平面區域出現大量色帶色塊(位元速率被過分的分配給線條);或者背景顏色過渡自然,紋理模糊,線條爛掉(位元速率被過分的分配給非線條)。

視訊編碼基礎篇——視訊格式! 第9張

(10)7、時間上的低頻與高頻:動態在視訊處理中,時間(temporal)的概念強調幀與幀之間的變換。跟空間(spatial)相對。動態的概念無需多解釋;就是幀與幀之間影象變化的強弱,變化頻率的高低。一段視訊如果動態很高,變化劇烈,我們稱為時間複雜度較高,時域上的高頻資訊多。否則如果視訊本身舒緩多靜態,我們稱為時間複雜度低,時域上的低頻資訊多。一般來說,一段視訊的時域高頻資訊多,動態的資訊量就大,所需要記錄的資料量就越多,編碼所需要的運算量也越大。但是另一方面,人眼對高速變化的場景,敏感度不如靜態的圖片來的高(你沒有時間去仔細觀察細節),所以動態場景的優先度可以低於靜態場景。如何權衡以上兩點去分配位元速率,被稱為位元速率的時間分配。分配較好的時候,看視訊無論動態還是靜態效果都較好;分配不好的時候往往是靜態部分看著還行,動態部分糊爛掉;或者動態部分效果過分的好,浪費了大量位元速率,造成靜態部分欠碼,瑕疵明顯。很多人喜歡看靜止的截圖對比,來判斷視訊的畫質。從觀看的角度,這種做法其實並不完全科學——如果你覺得比較爛的一幀其實是取自高動態場景,那麼這一幀稍微爛點無可厚非,反正觀看的時候你注意不到,將位元速率省下來給靜態部分會更好。8、清晰度與畫質簡述我們經常討論,一個視訊清晰度如何,畫質好不好。但是如何給這兩個術語做定義呢?經常看到的說法:“這個視訊清晰度是1080p的”。其實看過上文你就應該知道,1080p只是視訊的解析度,它不能直接代表清晰度——比如說,我可以把一個480p的dvd視訊拉昇到1080p,那又怎樣呢?它的清晰度難道就提高了麼?一個比較接近清晰度的概念,是上文所講述的,空間高頻資訊量,就是一幀內的細節。一張圖,一個視訊的細節多,它的清晰度就高。解析度決定了高頻資訊量的上限;就是它最清晰能到什麼地步。1080p之所以比480p好,是因為它可以允許影象記錄的高頻資訊多。這個說法看樣子很靠譜,但是,有反例:右圖的高頻資訊遠比左圖多——它的線條很銳利,有大量緻密的噪點(注意噪點完全符合高頻資訊的定義;它使得影象變化的非常快)但是你真的覺得右圖清晰度高麼?事實上,右圖完全是通過左圖加工而來。通過過度銳化+強噪點,人為的增加無效的高頻資訊。

視訊編碼基礎篇——視訊格式! 第10張

(11)值得一提的是,人為增加的高頻資訊不見得完全沒有幫助。有的時候適度銳化的確能夠起到不錯的目視效果:這是一幅適度銳化後的效果。如果有人覺得右圖更好,至少某些部分更好,相信我,你不是一個人。所以適度銳化依舊是視訊和影象處理中,可以接受的一種主觀調整的手段,一定的場合下,它確實有助於提高目視效果。以上是清晰度的概述。注意,清晰度只是空間方面(就是一幀以內)。如果再考慮到動態效果的優秀與否(視訊是不是那種一動起來就糊成一團的,或者動起來感覺卡頓明顯的,常見於早起RMVB),空間和時間上優秀的觀看效果共同定義了畫質。所以我們說madVR/svp那些倍幀效果有助於提高畫質,實際上它們增強了時間上的觀看效果。好的畫質,是製作者和觀眾共同追求的。怎麼樣的視訊會有好的畫質呢?是不是位元速率越高的視訊畫質越好呢?真不見得。視訊的畫質,是由以下幾點共同決定的:1、源的畫質。俗話說的好,上樑不正下樑歪。如果源的畫質本身很差,那麼再如何折騰都別指望畫質好到哪去。所以壓制者往往會選擇更好的源進行壓制——舉個栗子,BDRip一般都比TVRip來的好,哪怕是720p。藍光也分銷售地區,一般日本銷售的日版,畫質上比美版、臺版、港版啥的都來得好,所以同樣是BDRip,選取更好的源,就能做到畫質上優先一步。2、播放條件。觀眾是否用了足矣支援高畫質播放的硬體和軟體。這就是為啥我們在釋出Rip的同時大力普及好的播放器;有時候一個好的播放器勝過多少在製作方面的精力投入。3、位元速率投入vs編碼複雜度。視訊的時間和空間複雜度,並稱為編碼複雜度。編碼複雜度高的視訊,往往細節多,動態高(比如《魔法少女小圓劇場版 叛逆的物語》),這樣的視訊天生需要較高的位元速率去維持一個優秀的觀看效果。相反,有些視訊編碼複雜度低(比如《請問今天要來點兔子麼》,動態少,線條細節柔和),這種視訊就是比較節省位元速率的。4、位元速率分配的效率和合理度。同樣多的位元速率,能起到怎樣好的效果,被稱為效率。比如H264就比之前的RealVideo效率高;10bit比8bit效率高;編碼器先進,引數設定的比較合理,編碼器各種高階引數全開(通常以編碼時間作為代價),位元速率效率就高。合理度就是位元速率在時空分配方面合理與否,合理的分配,給觀眾的觀看效果就比較統一協調。 位元速率分配的效率和合理度,是對製作者的要求,要求製作者對片源分析,引數設定有比較到位的理解。位元速率分配和合理度做的好,就常常能做出低位元速率高畫質的良心作品。這裡再多提一句,至少在這個時間點,也就是此文釋出的2014年年底,HEVC相對於AVC可以提高50%的效率,依舊是一個紙面上的理論值。實際操作中,因為HEVC編碼器的成熟度遠不及經過了十幾年發展的AVC編碼器,導致現在HEVC的潛力遠沒有能發揮出來,特別是高畫質下甚至不如。對於目前主流的,定位收藏畫質的BDRip,同樣位元速率下x265的畫質相對於x264沒有優勢;所以在近期,大家不用優先的去下載HEVC版作為收藏目的,更不必迷信什麼“位元速率降低一半”。再強調一次,這個時間點;如果一年後以上陳述被不斷進步的HEVC編碼器推翻,我毫不驚訝。5、編碼前的預處理。預處理分三種:①,客觀修復。強調修復片源固有的瑕疵,比如鋸齒,色帶,暈輪等等。②,主觀調整,強調將片源調整的更適合人眼觀看,比如適度的銳化,調色(有時候你是可以通過科學方法判定片源的顏色有問題,然後針對的做修復的)。③,移除無效高頻資訊,比如降噪,避免位元速率浪費在無效的噪點上預處理做的好,往往能達到畫質上超越片源,或是在幾乎不犧牲清晰度的前提下,節省位元速率開銷。但是預處理是一把雙刃劍,優化的同時,可能引入副效果。降噪、抗鋸齒、去暈輪等操作會不可避免的損失一些有效細節(或多或少,取決於製作者水準);主觀調整很可能會引入副效果(比如過度銳化會導致鋸齒和暈輪),或是變成了作者的自我滿足,形成對觀眾的欺騙。綜上,一個優秀的畫質,是由片源、製作者、觀看者共同決定的;位元速率高低也只是部分因素,並非決定性的效果。

視訊編碼基礎篇——視訊格式! 第11張

特別提示

注意播放器不要用各種XX影音 事先安裝好解碼器

熱門標籤