翻譯 | Alex
技術審校 | 袁榮喜
本文來自OTTVerse,作者為Krishna Rao Vijayanagar。
視頻編碼是一門在減少視頻數據體積大小或碼率的同時而不對其質量產生不良影響(在人類的視覺感知下)的科學。對視頻進行編碼從而減少其數據體積同時保持視頻質量是一項綜合了藝術和科學的技術。在本篇文章中,我們將介紹這個復雜且神奇的領域對視頻流和視頻傳輸產生的巨大影響。
視頻編碼Easy Tech
#003#
本文我們將會學習:
- 什么是視頻編碼
- 什么是視頻轉碼以及視頻轉碼與視頻編碼的區別
- 視頻質量VS碼率
- 視頻編碼中的關鍵概念:編解碼器、碼率、分辨率、時間、GOP和幀類型
- 視頻編碼是藝術還是科學?
什么是視頻編碼?
視頻編碼是一門在減少視頻數據體積或碼率的同時而不對其質量產生不良影響(在人類的視覺感知下)的科學。
減小文件體積被稱為壓縮,視頻壓縮通過一系列定義明確且記錄在案的數學工具和算法(被稱為視頻編解碼器)來完成。當對某個視頻數據進行壓縮,一般來說,壓縮后的格式(被稱為比特流)只能被可以解碼這種格式的相應的軟件所理解。比如,一個使用H.264/AVC視頻編碼器編碼的視頻是無法被HEVC解碼器解碼的。
當一個視頻被壓縮,那么就可以從主觀和客觀上來判斷視頻質量:
客觀方法包括PSNR、SSIM、VMAF。這些軟件使用數學方法來判斷視頻質量。
主觀方法如MOS(Mean Opinion Score, 平均主觀意見分),這種方法包含強烈的個人主觀色彩,通過一群人為視頻打分(0~5分)來確定視頻質量。這種方法也被稱為“黃金眼觀測(Golden-eye viewing)”。
什么是視頻轉碼以及視頻轉碼與視頻編碼的區別
你可能經常聽到人們交替使用視頻編碼和視頻轉碼這兩個術語。這種做法有失偏頗,因為兩者之間還存在細微的差別。
視頻編碼通常指將原始視頻數據壓縮成編碼數據的整個過程。而視頻轉碼是指重新編碼壓縮文件,但它多了一個編碼之前對傳入視頻解碼的步驟。
但不要搞混了,這兩個過程都需要在最后階段編碼視頻。
通常轉碼器有很多功能,比如:
- 解碼不同的容器格式(mp4,ts等)。
- 使用不同的視頻編解碼器解碼比特流,如H.264/AVC、HEVC、AV1和VP9等。
- 改變視頻的分辨率,從而可以輸出不同的分辨率(對ABR流制作至關重要)。
除了轉碼,還有兩個術語不常在行業中使用:
- Transrate是指改變視頻碼率。
- Transmux是指改變容器格式,如將mp4更改為avi或者ts。
在介紹了視頻編碼和轉碼之后,現在讓我們學習下一部分中最重要的率失真折衷(Rate-distortion Trade-off)。
視頻質量VS視頻編碼/轉碼中的碼率
想要理解碼率和視頻質量之間的平衡關系,就要先理解視頻壓縮是如何操作的。你不必深入探究質量與碼率的折衷,但你需要明白幾件事:
視頻壓縮算法要做兩件重要的事(如在H.264/AVC、HEVC、VP9和AV1等編解碼器中):
- 使用DCT(Discrete Cosine Transform,離散余弦變換)將“像素域”轉換為“頻域”。如果你還不了解什么是DCT,可以看下這篇文章(如何給5歲孩子解釋DCT?)。
- 通過一種被稱為量化的技術舍棄一些頻域數據(被稱為系數),同時確保人眼無法感知這種數據丟失。
本質上,當你壓縮視頻時,你需要丟掉一些信息,但同時要保證視頻質量沒有被破壞。
- 如果你使用過高的壓縮率來壓縮視頻數據,那么將丟掉大量信息,壓縮的效果顯而易見——糟糕的視頻質量。
- 如果你使用較低的壓縮率來壓縮視頻,那么壓縮后文件就會很大,但會得到很棒的視頻質量。
- 上面所述被稱為視頻壓縮中的率失真折衷。碼率越小,視頻質量越差(假設分辨率、比特位深、色度二次采樣、編碼時間和硬件等都是固定的。)
下面兩張CrowdRun的屏幕截圖說明了這一點,它們分別使用 H.264/AVC 以兩種不同碼率編碼,其他參數在編碼過程中保持不變。
1080P,低碼率
1080P,高碼率
低碼率流的視頻質量要比高碼率流的視頻質量差,這正說明了我們之前對于率失真折衷的論述。
然而,不要誤以為較低的碼率就意味著較差的視頻質量,要依據視頻內容的性質而定,降低碼率但并不影響視頻質量是非常有可能的。
在編碼和轉碼之前,讓我們來學習一些影響視頻編碼的重要因素。
影響視頻編碼的重要因素
有很多重要因素影響視頻編碼和轉碼,并且大部分因素之間也相互影響。比如,在轉碼時,你不能隨便改變視頻的分辨率而不去調整碼率,對吧?
在本節中,讓我們來看看一些能夠產生壓縮充分且高質量的比特流的最重要的因素。
內容性質
并不是所有創造出來的視頻都一樣!每個視頻都獨一無二,都有自己的風格,這就使得視頻壓縮成為了一門藝術。充滿各種動作的職業橄欖球比賽視頻背后的各種設置和調整肯定不同于壓縮《辛普森的一家》那樣的卡通視頻,對吧?
非常容易壓縮!
沒那么容易壓縮!
影響視頻分類的因素有很多,比如:
- 視頻里有充滿各種動作的體育運動嗎?
- 有大量的草地或者水(二者都很難壓縮)嗎?
- 充滿各種動作的電影(戰爭或者高速追車)
- 露出頭部和肩部的內容,比如新聞或者脫口秀
- 卡通、日本動畫?
- 內容中是否有提示文字(Ticker text)向一側移動,而電影向著另一側移動?
電影中存在許多不同的場景,這些場景使得每部影片都與眾不同,了解了這些,工程師就能更好地壓縮視頻。如果你知道視頻中含有諸如卡通這樣的平場區域(Flat region),如上所示,你就可以給它分配一個更低的碼率,而不必像處理體育運動視頻那樣用高碼率。
視頻編解碼器
我是這樣定義視頻編解碼器的:它們是一組用來壓縮視頻以達到預定率失真折衷的工具和算法。視頻編解碼器通常由工程師、學術界和工業界(軟件和硬件公司)的科學家組成的委員會來協商創建。
現在市面上流行的視頻編解碼器包括H.264/AVC、HEVC、AV1、VP9、EVC、VVC和LCEVC。
每一個編碼器在設計時都有一個特定的目標。它們有可能比上一代具有更高的性能,或者免版稅,或者推出一種新的壓縮方法(像LCEVE那樣)。
因為每一種編碼器都擁有不同的設計和優化方法,它們的性能也必然有所不同。比如,AV1在壓縮效率上就比H.264/AVC高出很多,但卻比AVC要消耗更多時間和資源。但這些都沒有關系,重要的是是否能滿足你自己的需求和資源。
碼率控制模式(CBR、VBR和有上限的VBR)
每個編碼器都擁有碼率控制算法,該算法用于確定在一段時間(或者GOP)內如何消耗碼率預算。編解碼器中的碼率控制技術極大地影響了壓縮效率、視頻質量和速度。
下面是三種常用的碼率控制算法。
1.CBR(Constant Bitrate,固定碼率):在犧牲視頻質量的同時,平均碼率保持不變。
2.VBR(Variable Bitrate,可變碼率):在碼率出現波動的同時,視頻質量保持不變。
3.CApped VBR(Capped Variable Bitrate,有上限的VBR):視頻質量保持不變的同時,允許碼率在一定限制或者上限之內波動。
根據你為視頻編碼/轉碼選擇的模式,編碼器將在視頻質量和碼率(或者文件尺寸)之間折衷優化。
碼率
視頻碼率是指每秒傳送信息的比特數。碼率單位通常為:
- kbps(千比特每秒)
- mbps(兆比特每秒)
當你開始編碼時,你通常需要設置編碼器的碼率,根據編碼模式(CBR、VBR、2-pass VBR和Capped VBR),編碼器將使用設置的碼率值作為壓縮視頻的指南。
根據經驗,碼率越大,視頻質量越好。但是也有例外,如果調整了視頻分辨率和內容(動作快慢,頭肩是否出鏡),增加碼率也有可能不會提高視頻質量。
分辨率
視頻分辨率是指視頻圖像的寬度乘以高度,其中衡量分辨率的單位是像素。視頻分辨率通常有以下兩種表現形式:
1.使用視頻圖像高度描述分辨率:1080p或720p
2.或者使用圖像寬乘高描述分辨率:1920×1080或者1280×720
視頻分辨率在編碼過程中能夠發揮重要作用的原因如下:
- 高分辨率的視頻(如4K)需要更多內存空間和時間來壓縮。
- 低分辨率的視頻(如360p)需要較少內存空間,并且能夠很快被壓縮。
所以,當選擇編碼碼率時,視頻分辨率是一個重要的決策因素。
編碼時間
壓縮、編碼以及轉碼視頻時所需的時間也是一個關鍵因素。不同環境下有不同的解決方案,對吧?
- 如果你正在視頻直播,那么你肯定不能每分鐘只編碼1幀,那么做將是大災難!你需要以接近24fps、50fps或者60fps的刷新率來實時壓縮視頻。在這樣的情況下,編碼器通常會為了提升速度而犧牲視頻質量。
- 然而,當你在點播視頻時,你可以花幾個小時的時間來壓縮視頻。在這樣的情況下,編碼器被調整為緩慢壓縮,并使用復雜的工具來獲得更高的壓縮效率及更好的視頻質量。
比如,在FFmpeg這種編碼器中,你已經預定義了Slow、Slower,、VerySlow、Fast、Faster和Fastest的設置,而這些設置表明了編碼器中速度、質量和壓縮效率之間的權衡。
所以應該依據視頻應用場景(直播還是點播)來選擇你的編碼設置(和速度)。
GOP(一組圖像,Group of Pictures)和GOP長度
一組圖像(GOP)是指一批按照事先定義好的順序被編碼、解碼和播放的視頻幀。GOP長度對視頻壓縮效率、視頻流恢復能力和視頻質量影響深遠。
簡而言之,GOP尺寸越大,視頻壓縮效率越高,但視頻質量和視頻流恢復能力也越差,反之亦然。
Closed GOP和Open GOP
Closed GOP和Open GOP常見于視頻流中,并影響壓縮效率、視頻容錯能力以及ABR流的切換能力。
- 顧名思義,Closed GOP對GOP外部的幀是封閉的。一個屬于Closed GOP的幀只能參考這個GOP之內的幀。
- Open GOP與Closed GOP相反,Open GOP內部的幀可以參考其他GOP中的幀。
幀的類型 (I幀、P幀和B幀)
I幀、P幀和B幀是視頻壓縮領域中的基礎概念,用于提升視頻壓縮效率、視頻質量和視頻恢復能力。
- I幀(關鍵幀或幀內幀)僅由幀內預測的宏塊組成。
- P幀代表預測幀,除了空域預測以外,它還可以通過時域預測來進行壓縮。P幀通過使用已經編碼的幀進行運動估計。
- B幀可以參考在其前后出現的幀,B幀中的B代表雙向(Bi-Directional)。
升頻、降采樣的工具和算法
本篇文章中,我們不會深入講解升頻和降頻算法。但是需要注意的是這些工具會對視頻質量產生很大的影響。假如輸入的視頻分辨率為540p,你想輸出720p的視頻,那你就需要一個可以升頻的工具,對吧?通過降低視頻采樣率,該工具又深深影響了視頻質量——如果它出色地完成了任務,那么輸出視頻也會很清晰。否則,你就陷入了大麻煩。
通常來說,升采樣和降采樣工具使用經過充分研究的圖像處理過濾器(如 Lanczos 或 Bicubic 過濾器)來創建具有新分辨率的視頻。在選擇購買或使用編碼器/轉碼器之前,最好先對這些工具進行詳細的測試。
現在,我們對于影響視頻編碼的重要因素的學習已經將近尾聲,雖然沒有那么詳盡,但也為音視頻技術的學習提供了一個指南。下面我們將通過視頻編碼一覽表來總結我們所學過的知識。
視頻編碼一覽表
在編碼視頻之前,有幾點要銘記于心。這雖然不是一個詳盡無遺的表單,但卻能幫助你縮小視頻壓縮中使用到的正確參數范圍。
1.理解你的觀眾:你的觀眾平時常用的帶寬是多少?你是為擁有高速互聯網的城市居民提供視頻服務,還是為低網速的鄉村人口提供服務?他們是使用固定連接的網線,還是使用移動互聯網?
2.你的終端用戶使用什么設備?他們平時會看大屏幕的智能電視嗎?還是使用智能手機看視頻?
3.你所提供的視頻服務的內容性質是什么?是充滿各種動作的電影、體育賽事,還是沒有那么多動作的新聞,亦或是很容易壓縮的卡通片?
4.你擁有多少時間壓縮視頻?你所提供的服務是直播還是點播?
5.你使用哪種視頻編解碼器?你的目標觀眾的設備能否解碼H.264/AVC、 HEVC、AV1或者VP9?
以上這些只是部分(在編碼、轉碼視頻前)影響因素,我相信還有更多,但我希望這個一覽表對你來說是個好的開始。
現在,讓我們來看下視頻編碼和轉碼中用到的工具和服務。
視頻編碼和轉碼工具
在這一部分,我們將了解視頻壓縮、編碼和轉碼中的常用工具和服務。其中一些是付費的,一些是開源的。每種工具或服務都擁有不同的功能和特性。
我們先來看開源的工具。
FFmpeg (開源)
FFmpeg是目前為止最流行的視頻編解碼工具。它支持視頻解碼、大部分容器格式的多路分離和多路復用、改變視頻分辨率、能夠在最常用的視頻編解碼器(如H.264/AVC、HEVC、AV1和VP9等)中編碼,這些功能使FFmpeg成為不可或缺的視頻壓縮工具。
Handbrake(開源)
作為開源視頻轉碼器,Handbrake被認為是基于GUI的最佳視頻編碼和轉碼工具。操作簡單、可基于多平臺、并涵蓋廣泛的預設和設備。這意味著你無需花錢購買轉換或轉碼工具,更無需花費數小時制作命令行參數,就能夠前所未有地輕松、快速壓縮視頻。
視頻編碼的付費工具和服務
基于云的視頻壓縮付費服務有好幾百個,這些服務通常支持多種類型的容器、編解碼器、ingest/egress格式,如RTMP、HLS、DASH等。
下面簡略地列出了一些比較常用的服務:
- Mux.com
- Encoding.com
- Wowza.com
- Harmonic 360
- AWS Elemental
- QEncode
- Coconut.co
- Bitmovin.com
所以,視頻編碼究竟是藝術還是科學?
學習了這么多視頻編碼和壓縮的知識,這里有一個有趣的哲學問題:視頻編碼/轉碼究竟是藝術,還是科學?你認為呢?
老實講,如果你問我,我只能回答,各有千秋。
說視頻編碼是科學,是因為它需要精確的公式和算法,而這些公式和算法都是在世界各地的實驗室中被發明出來的,并需要接受不斷的測試和改進。
另一方面,說視頻編碼是藝術,是因為對視頻編碼質量的感知是主觀的,不同的人對視頻質量好壞的判斷不同。所以,當你在設置某個編碼器或者編碼器的壓縮工具時,你不能只是按照發給你的表格中的質量措施和碼率值來設置編碼器。
一位態度認真的工程師在進行視頻編碼設計時,一定會嘗試在不同的參數設置下觀察編碼效果,并最后決定哪種設置才能最大程度上滿足他的觀眾。你看,取悅他人是一門藝術
你是怎么想的?編碼是藝術,還是科學?在評論區告訴我你的想法!
結束語
我希望本篇關于視頻編碼和解碼的文章能夠對你有所幫助,并讓你領略視頻壓縮中藝術和科學的魅力。
我們下次再見,祝直播愉快!
本文已獲得作者Krishna Rao Vijayanagar授權翻譯和發布,特此感謝。
原文鏈接:https://ottverse.com/what-is-video-encoding-transcoding-codecs-compression/