當在線觀看視頻越來越火爆、越來越普及的時候,人們會下意識覺得「一個視頻應用系統應該也不怎麼複雜,不就是點開網頁(APP),定位想看的視頻,點擊播放按鈕嘛」。
是這樣嗎?
不全是!!!
一個視頻應用系統涉及源視頻的上傳、轉碼、存儲、分發、播放五個過程,而每一個過程又需要不同的模塊去保證其按需、高效、穩定地運行。如果把一個視頻應用系統比作一個大連環,那麼本文將要介紹的轉碼部分絕對是其中的「鉑金」一環,其太重要了。
接下來就依次按為什麼轉碼(Why)、什麼是視頻轉碼(What)、怎麼優化視頻轉碼(How)進行介紹。
對一個視頻服務平臺,通過上傳獲得的視頻源千差萬別,有高清的影視片源、UGC視頻以及推拉過來的直播流等。平臺直接將這些視頻分發出去可能存在諸多問題,例如視頻源碼率過高、視頻質量差、視頻參數不合理、視頻格式不被播放器支持等等,此時就會啟動轉碼為用戶提供優化的、規範化的視頻流。
轉碼目的即是以更低的傳輸帶寬來提供高質量、規範化的音視頻內容,此可以總結為如下幾點:低碼率、高質量、規範化。
低碼率。
首先視頻的高碼率不都是必須的,例如一個影視片源的碼率動輒10多Mbps甚至更高,但由於人眼的視覺冗餘,即便將碼率大幅降低,丟失了一些「細節」,也不會影響視頻的觀看體驗,如圖1所示。
這是因為視頻的碼率和質量之間大致符合如圖2所示的關係,即當碼率比較高時,適當調低碼率對質量的影響並不大。另外每一代視頻壓縮標準都比上一代有更高的壓縮性能,因此可用更低的碼率達到相同甚至更高的視頻質量,這也為用戶節省了存儲、帶寬成本。
圖1:碼率可適當調低示例圖
(左圖13Mbps,右圖4Mbps,觀看體驗極相近)
圖2:視頻質量和碼率之間的關係趨勢
高質量。
隨著網絡傳輸能力和終端性能的提升,用戶對視頻質量有了更高的期待。4K、VR等視頻提供給用戶的時候,平臺可通過轉碼可獲得更高的「碼率—質量」性價比。另一方面,低碼率範疇中的一些UGC視頻畫質較差,平臺可在轉碼中結合視頻增強手段達到優化視頻客觀質量和主觀體驗的目的。
規範化。
首先規範化視頻解析度、碼率等參數的配置。不同觀看者的網絡環境不盡相同,能接受的保證流暢播放的碼率也就不同,因此對同一片源提供不同檔次的視頻供觀看者選擇(或自適應選擇)就特別重要,也被廣泛使用。
規範化不同檔次的解析度、碼率配置的目標應該是多個檔次能將常用碼率範圍覆蓋,如100kbps~5Mbps;同時各個檔次的質量之間應該呈現出均勻的差異,如示意圖3所示。
另外根據客戶需求或終端支持情況進行編碼格式的調整。如果終端播放器不支持H.265的編碼格式,則需要將H.265格式的視頻源轉碼到支持的編碼格式,如H.264;或者客戶明確選擇將非H.265格式的視頻轉碼到H.265格式,也會觸發轉碼的需求。
圖3:各檔次的質量分布趨勢
視頻轉碼的流程如圖4中所示,即輸入視頻先進行解封裝,然後對解封裝後的音視頻數據解碼再編碼,並再次封裝後輸出。
一段視頻中的音頻部分和視頻部分對用戶的觀看體驗同等重要,當出現有雜音、音視頻不同步等現象時,整段視頻的觀看體驗就會很差。但鑑於音頻和視頻的處理有流程上的相似性,且音頻所佔數據量相對較小,因此本文後續主要關注視頻數據的轉碼。
圖4:視頻轉碼流程
視頻轉碼的封裝層包括解封裝和再封裝,如圖4中外層紅框所示。而封裝格式指將視頻數據、音頻數據、字幕數據等按一定的規則組織到一起。
平時生活中看到的視頻後綴種類各種各樣,例如有MP4、FLV、TS、MKV、AVI、MOV等,這些即是視頻的封裝格式。
MP4是被廣泛應用的封裝格式,對各種設備的兼容性較好;FLV體積輕巧、封裝簡單,可以容易地通過瀏覽器上的Flash Player進行播放;MKV是一種能封裝多個視頻軌、多個音頻軌,以及多個字幕軌的封裝格式,便於網絡傳播。各種封裝格式特點不同,根據實際場景選擇使用。
視頻轉碼的編碼層包括視頻數據的解碼,以及根據需要再編碼,如圖4中內層紅框所示。再編碼是一個數據壓縮的過程,即編碼中通過減少原視頻中的時間冗餘、空間冗餘、視覺冗餘以及信息冗餘達到壓縮視頻數據量的目的。這些冗餘的示意如圖5所示。
圖5:視頻中的冗餘示意圖
至於這些冗餘的削減過程,可以結合圖6中所示的簡化版編碼框架進行理解。時間冗餘削減過程:輸入視頻和幀間預測量相減得空域的殘差,後續只需要處理這些殘差和其他一些信息數據即可;該過程只發生在P幀或B幀中。空間冗餘削減過程:輸入視頻和幀內預測量相減得空域的殘差,其是利用了空間鄰域的相似性;I幀中都採用的幀內預測,但幀內預測也可發生在P或B幀中。
除此之外,得到空域殘差後的下一步的DCT變換也是一個削減空間冗餘的過程,即會將能量主要集中在矩陣的左上角。
視覺冗餘削減過程:DCT變換後的係數會經過量化過程,量化會將視頻的一些高頻細節損失掉,損失的細節如果不被察覺就達到了理想的削減視覺冗餘的效果;而量化本身是有損的,量化程度較大時也必然會被察覺到。
信息冗餘削減過程:量化後的矩陣中非零係數更少,且集中在左上角,熵編碼會進一步利用係數的出現頻率的不同進一步壓縮數據量,並最終寫入碼流完成編碼。
圖6:編碼框架圖
視頻解碼和編碼遵從各自採用的標準,可以相同也可以不同。關於視頻編碼標準,從上世紀80年代開始,不同的標準化組織或獨立、或合作的方式積極推進了一系列視頻編碼標準,極大地推動了視頻技術的發展,如圖7所示。
目前H.264/AVC因其技術的成熟仍是業界應用最為廣泛的標準。新一代的H.265/HEVC和同階段的AVS2相對於H.264有一倍的性能提升,但因HEVC的專利費等問題仍使其處於過渡階段。
ISO/IEC的MPEG和ITU-T的VCEG專家共同組成的JVET也早已開始探索下一代視頻編碼標準H.266/VVC,今年四月份已開始標準化工作,預計2020年完成定標,其瞄準在HEVC的基礎上再提升一倍的性能,且目前已能提升40%以上。
有多家視頻相關行業的企業在2015年發起的AOM組織,力求制定高效且開源的視頻標準,且在年初發布了AV1,比HEVC提升30%左右的性能,當前的編碼速度仍十分緩慢,但隨著眾多企業和開發者的積極參與,其前景還是很值得期待。
圖7:視頻編碼標準演進圖
轉碼輸入端獲取流式視頻,以及輸出後被用戶在線觀看都會涉及流媒體傳輸協議,它是指音視頻封裝成被流式傳輸所支持的格式(如TS封裝格式),然後通過流媒體傳輸協議(如HLS)進行傳輸。
常見的流媒體傳輸協議有RTP、RTCP、RTSP、HTTP-FLV、RTMP、HLS、DASH等。不同協議各有優劣勢,如HLS將數據切割成一些小的TS片,通過持續的下載實現連續播放,其可用於點播和直播,但HLS的特點也決定了其延時會大一些,而RTMP主要用在直播中,延時也會好一些。
除此之外的WebRTC的發展為那些延時更敏感的視頻應用提供了解決思路,因此對協議的選擇還要根據具體場景的特徵。
視頻轉碼的優化主要針對圖4中的編碼層,視頻的解碼和再編碼都是循著所採用的標準進行,採用更高性能、支持更多特徵的標準本身也是一種優化。標準確定後並不意味對轉碼沒有了優化的空間,只要碼流符合標準規範,構建碼流過程的非標準環節有大片的優化空間供發揮。
一般情況下更高的視頻質量意味著更高的轉碼複雜度,因此如何以更快的轉碼速度實現更高的視頻質量是目前轉碼優化的一個主要內容,除此之外轉碼優化的目標還包括更低的時延、可控的碼率。
(1)更快的轉碼速度、更高的視頻質量
解碼再編碼這個鏈條中涉及的中間節點眾多,優化轉碼的速度和視頻質量可以考慮以下一些方面:快速解碼、模式決策、視頻增強、評價方法、智能轉碼、線程並行、分片並行,以及可以對解碼信息復用以進行優化。
快速解碼。
解碼是轉碼的第一步,其雖然相對編碼複雜度會小一些,但仍是耗時的重要一環,並且在從大尺寸視頻轉轉碼到小尺寸時仍有可能形成性能瓶頸,因此更有提速的必要性。
快速解碼可以考慮並行的解碼結構,即當一個塊依賴的塊可用時即可開始解碼,這類似於HEVC中的WPP方式。
另一方面,解碼就是一個標準解讀的過程,在有條件的情況下將實現彙編化有助於提升速度。當然了,彙編優化方式的採用也遍布於轉碼流程的各個環節。
模式決策。
模式決策一直是編碼中比較耗時的一環,如H.264/AVC中的INTRA編碼有9種預測模式,HEVC中增加到35種,在塊單元變大的情況下劃分方式也大幅增加,即便在後續的編碼標準中模式決策也是較為耗時的模塊。
一方面可以通過傳統方式進行優化,如圖8所示;CTB的SIZE決策(深度決策)可以從大到小、從小到達相結合,決策某一CTB是否繼續劃分可以參看周邊塊信息等。
另一方面可以結合機器學習的方式進行探索,即周邊塊各種信息(如劃分深度、預測方向、MV、QP)的運用上,可以與當前塊的模式找出更好的匹配,並能通過持續學習在不同視頻片段、視頻類型中更新。
圖8:模式決策優化示意圖
視頻增強。
某些視頻源本身就存在瑕疵,比如當前流行的手持設備拍攝的視頻,可能存在模糊、噪聲、振鈴效應、塊效應等問題。以這些視頻作為源,無論給予其多高的碼率,都不可能轉碼出滿意的視頻,而此時視頻增強就顯得特別重要。
可以簡單地進行濾波、銳化、對比度調整等,也可以有針對性的美膚、美顏,甚至可以利用超分重建的方式提升視頻源的質量。如圖9中所示,左邊是有增強的效果圖,右側是無增強的效果圖,實際播放時增強版的優越性會更加明顯,這使得在不增加碼率的情況下優化了觀看體驗。
圖9:視頻增強效果對比示例
評價方法。
最常用的視頻客觀質量評價指標是PSNR,但視頻客觀質量不總能準確表徵用戶觀看體驗;後續又相繼提出能反應主觀質量的一些指標,如SSIM、VQM、MOSp等,但性能表現一般,更多地是作為輔助指標使用。
近來,Netflix提出的VMAF(VideoMultimethod Assessment Fusion)是結合了視覺信息保真度、細節損失、運動信息後的一個回歸指標。雖然其有一些瑕疵,如其以單幀為基礎進行計算、不具有絕對意義只具有相對意義,但仍得到了業界的認可,並十分值得期待。
以能更準確反映主觀體驗的評價指標指導編碼,也能提升編碼性能,如圖10所示,左側是800Kbps,右側是650Kbps,但右側的VMAF值高出1個dB,也符合實際觀看的效果。
圖10:利用VMAF主觀指標優化轉碼示例
智能轉碼。
視頻源的類型多種多樣,如影視、動漫、遊戲、體育等類型,更普遍意義上來說,一個視頻中不同片段上的類型也可能存在差異。
不同類別的視頻在編碼時的最優編碼配置是可能有明顯差異的,例如卡通類型與PPT類型在各個檔次的「解析度—碼率」配置分布就可能相差甚大。
因此應用中可以根據需要選擇分類的精度(如序列級精度、片段級精度),智能分析後對不同的類型採取不同的轉碼配置以優化編碼性能,如圖11中所示。
圖11:智能轉碼示意圖
線程並行。
轉碼過程中某個節點一旦形成速度瓶頸,造成其後面節點或前面節點的處理等待,則往往會對整體的速度產生影響。不同視頻類型、不同轉碼檔次時各個環節的計算量分布又會產生差異,因此自適應安排各個節點上的線程,以及配合好各個節點之間的銜接也十分必要。
分片並行。
每一代視頻編碼標準性能的提高也都伴隨著複雜度的提高,因此幀級並行、Slice並行、Tile並行、塊級並行都已並不得不被採用。
在此之上,視頻編碼可以通過分片並行進一步提速,即一個視頻可根據實際需要(如轉碼時限)劃分成N段,N段並行完成編碼後再進行聚合,如圖12所示。分片並行編碼不但為極速編碼提供了方案,也為分布式編碼提供了可能。
圖12:分片轉碼基本流程
解碼信息復用。
轉碼是先解碼再進行編碼,解碼部分天然地為編碼環節提供了一些可用信息,如劃分方式、預測方向、MV等,合理利用可以使轉碼速度和視頻質量的性價比大幅提速。簡略的流程如圖13所示。
圖13:解碼信息復用示意圖
(2)更低的時延
在實時視頻應用中,端到端時延直接影響著用戶體驗,其構成因素可能涉及到諸多方面,如在直播中時延會涉及視頻採集、傳輸、轉碼、關鍵幀間隔配置、流媒體服務環節、CDN分發環節以及播放等。本文中關注的轉碼部分對時延的影響主要來自於解碼輸入緩衝時延、解碼時延、編碼時延和編碼後的輸出緩衝時延,如圖14所示。
轉碼時延中的編碼時延主要來源是預處理緩衝區時延,該緩衝區緩衝的幀用於輔助碼率分配分析、編碼分析等,更多的緩衝幀意味著更好的預測和分析,進而影響得到的編碼視頻質量。在實際使用中,緩衝區的設置還需要根據場景的時延需求、質量等級需求等自適應選擇。
圖14:轉碼時延位置和構成示意圖
(3)可控的碼率
視頻不同片段的複雜度不同,理想情況應為其分配不同的碼率以平滑視頻質量,但是碼率較大的波動不適用於要求碼率恆定的網絡,而為了使碼率穩定又可能增大轉碼時延或降低視頻質量。
可以看出視頻轉碼中的碼率控制至關重要,卻又涉及多個因素,故應根據具體場景進行選擇,比如網絡視頻一般採用ABR(Average Bitrate),而廣電系統視頻採用CBR(Constant Bitrate)的碼率控制。
無論ABR還是CBR,其實現都需要可靠性較高的碼率預估方式,或者說需要更為準確的先驗信息和碼率之間的映射關係。先驗信息可以是簡化的殘差信息(SAD、SATD)、多pass編碼中已有的碼率分布信息等。另外,不同時段的視頻內容也一直變化,因此先驗信息與碼率的映射關係也需要持續更新。
本文介紹了關於視頻轉碼的目的、轉碼的端到端組成以及視頻轉碼中比較典型問題的優化方向。隨著人工智慧的快速發展,其在視頻技術中應用也越來越多、越成熟,轉碼的智能化也已成為研究的熱點並在逐步落地。