百度媒体云智能编码技术实践
隨著視頻行業的蓬勃發展,提升視頻質量,降低帶寬成本成為各平臺的首要挑戰目標。本文來自百度云資深工程師邢懷飛在LiveVideoStackCon 2018大會的精彩分享。在分享中其對百度云智能編碼技術進行了深入介紹,并結合具體實踐進一步介紹AI技術在云轉碼中的應用探索。
文 / 邢懷飛
整理 / LiveVideoStack
大家好,我是來自百度云的邢懷飛。畢業后一直在從事多媒體方面的工作,從最初的網絡音樂播放器設計與實現到視頻編碼相關的技術研發工作,目前主要負責百度媒體云的編碼、轉碼算法方面的優化工作。
本次為大家帶來的分享是百度媒體云智能編碼的技術實踐,其主要內容分為以下幾個方面,首先簡單介紹下云轉碼技術及其優化,接下來重點介紹智能轉碼技術能夠給公有云服務帶來怎樣的提升,最后介紹我們的下一步云技術探索工作。
1.?云轉碼技術簡介
1.1概述
云轉碼是一個比較基礎、成熟的服務,它包括格式的轉碼,協議的轉碼和封裝的轉碼。各種各樣的視頻源轉碼成不同格式、不同協議、不同分辨率的碼流后在不同網絡中分發到不同終端用戶上,從而使得每個終端上的用戶都能有更好的體驗。我總結了移動端云轉碼的一些特點,首先互聯網視頻的內容量非常大,海量視頻需要轉碼;第二點就是視頻格式多種多樣,需要對其進行規一化;最后非常重要的一個特點是分布式的并行轉碼,即利用計算資源換取計算的轉碼時間和質量。轉碼服務通常具有一定的服務目標,比如高可靠性、高速的轉碼和高容錯性。轉碼最終的目標是在相同的帶寬條件下,或者相同的碼率條件下,能夠最大程度上提升視頻的質量和用戶體驗。
1.2百度FEED應用案例
百度在視頻方面的投入也非常大,在這里列出了當前百度在視頻FEED流里上線的三款產品。百度APP,與之前版本最大的不同之處在于其首頁中存在一個短視頻的入口。另外兩個APP是好看視頻和全民小視頻。
1.3百度媒體云支持視頻FEED
接下來了解一下云服務在整個視頻FEED流端到端的解決方案中處于什么位置。首先我們內容主要來自于UGC或PGC,比如PGC方面有百家號平臺,UGC則是每個端上都會有用戶自己上傳到云平臺的內容,流媒體部分包括視頻的存儲,轉碼,處理以及視頻水印、黑邊處理等。其中比較有意思的是黑邊處理,比如在PC上播放視頻通常為橫向,由于目前大多數人選擇用手機看視頻,而手機界面呈現的視頻是豎直形式的,如果把手機上的視頻傳到PC上觀看時會產生黑邊,這是非常影響用戶體驗的,有些作者會選擇加一些特效、黑邊的處理。其中包括了智能檢測黑邊,裁剪黑邊等一些技術。在整體piepline中我重點列出了兩部分內容,一部分是VOD平臺對整體視頻的處理,另外一部分是視頻內容的理解,其中包括視頻標簽,視頻質量,視頻審核等,經過審核之后視頻會統一錄入到視頻物料庫,進一步加工,接著會進入視頻推薦系統根據用戶的興趣與關注點進行視頻FEED流的推薦。
1.4技術挑戰
客戶提出的要求也可以看做是我們做云轉碼技術所面臨的挑戰。首先需要有一個完善的功能,用四個字概括就是”多、快、好、省”。”多”,即功能多;”快”,即轉碼的速度快,保證視頻服務的時效性;另外就是在功能上要集成更多的AI能力,以應對客戶其它定制化的需求,而且我們可以用工作流的方式來滿足不同客戶的要求。”好”,即實現好的用戶體驗,或者是在壓縮之后有好的質量。”省”,即要節省用戶的運營費用。接下來就了解一下如何實現這些需求。
1.5技術架構
這里介紹下我們云轉碼技術的技術架構,首先用戶會發送一個轉碼的請求,這個請求通過API后會有各種各樣的參數和模板的設置。然后把用戶請求放在一個負載均衡和任務調度的隊列里進行智能的調度。這里最根本的一個特點就是我們的轉碼實例(Worker實例)也都是通過分布式的計算資源處理的。我們將Worker類型分為三種,首先要實現海量的轉碼需要進行視頻檢測,檢測原視頻是否有問題以及預期的轉碼效果是怎樣的,接著制訂一些轉碼策略。第二個Work實例就是分片轉碼。轉碼實例就是整個真正執行轉碼操作的運算單元,在所有的分布式的機型中完成轉碼后還有一個視頻合并的環節。另外視頻AI的計算也放到了整個分布式的計算單元里。在分布式轉碼里會因為中間存儲的一些結果,比如分片的每個中間結果都會存到分布式的文件系統上。介紹這個技術架構是為了后面介紹如何將智能轉碼融合到我們現在的云轉碼的基礎設施里。
2.?視頻轉碼優化
2.1資源管理&任務調度
前面介紹了基本的架構,接下來會重點介紹我們的資源管理和調度的情況。我們現在用的計算資源大部分是CPU利用率不是很高的機器,把它進行虛擬化之后可以供轉碼的服務進行調度,但問題是無法保證服務質量。因為有的機器的計算資源是不均衡的,這時我們就需要對計算資源進行一個比較智能的調度。本質上來說,一個轉碼的任務如何給它更合理的,或者更智能的實現資源的分配呢?這時候我們就提出了基于復雜度預測的調度算法。一個轉碼任務的復雜度與很多的因素有關系,其中包括時長,分辨率,Codec類型,質量要求以及實效性要求。于是我們通過設置一個海量的視頻模型,根據原視頻的信息訓練出一個大的模型,根據這些參數就可以預測復雜度。我們就通過這個模塊調度到相應的計算資源,包括CPU、GPU集群和FPGA的集群。
2.2工程優化之分片策略
接下來我會介紹如何對視頻進行分割,首先給大家介紹一下分片策略。一個視頻是隨著時間的不斷變化的場景,這是最簡單的一個策略,也就是按照時間的均勻分片。但是這種策略會遇到各種各樣的問題,有可能你按照時間進行分片了,然后經過視頻轉碼之后發現時長多了或者有其它的問題。后面我們針對一些場景包括智能轉碼的場景對分片的策略進行了一些優化,比如分片的精度到達了浮點數的精度。然后我們會根據視頻的場景進行分類,同時保證每一個分片的邊界是在一個GOP的邊界上。基于場景的分片的好處將在下面的智能編碼環節做進一步的介紹。
2.3視頻容錯
在整個轉碼的工程里也會遇到各種各樣的問題。由于原視頻是多種多樣的,所以會存在各種各樣的語法問題,用戶視頻上傳不完整,視頻質量問題以及時間戳問題。這些是在轉碼里非常需要解決的問題,但是卻并沒有特別好的方法去解決,只能當遇到問題時,用戶反饋的問題,或者我們自身發現有問題,然后逐一分析解決。我們能做的事情是在轉碼后進行一個完整性的檢查,比如在時長上是否和預期的一致,在質量上我們還會加入質量后檢測這個環節,當然用什么樣的指標去檢測,這在后面還會有介紹,到底用PSNR,SSIM或者是VMAF都是可以。
2.4 Codec參數調優
在視頻編解碼參數Codec調優方面,我們目前采用的是一些比較常規的開源技術方案,當然最重要的目標是實現編碼復雜度與質量的折中。視頻的預處理就是優化的一個方向,也就是在視頻的序列送到編碼器之前,如何讓人眼看到的效果更好,這樣就能使得編碼后的效果更好。其中就包括運用AI技術實現視頻增強的效果,實現超分辨率技術。在人眼主觀質量優化方面也是一個優化的方向,比如基于人眼感興趣的一些區域可以多分配一些比特,同時在服務器選擇,或者是在其它的的模塊中可以用一些HVS相關的指標進行歷史數據優化。
2.5碼率控制方法
接下來再介紹一下碼率控制方法。實際上視頻內容類型非常多,圖中列出了四種不同的場景,一個是非常簡單的PPT場景;比較復雜的如NBA等體育比賽場景;室內訪談場景或者是室內電視劇場景。場景不同,那么在相同質量下碼率也是不同的。在這里列出了幾種碼率控制的方式,但是如何去選擇它呢?不同碼率對帶寬和質量的要求是不一樣的, CBR碼率非常恒定,但是它的質量波動比較大;VBR的碼率有波動,但是它的質量相對來說要好一些。這時我們就會區分是帶寬方面,還是質量方面的要求。
3.?智能編碼技術
3.1內容自適應編碼
下面主要介紹我們的最重要的目標,比如我們做內容自適應編碼時目標是在人眼主觀上實現一個恒定質量的用戶體驗。那么接下來引入我們的智能編碼技術。上面的第一張圖是對傳統的ABR的介紹,這種傳統的方法首先在同一時間要編出幾種不同碼率的流出來,然后根據終端用戶網絡帶寬情況的探測推薦一條最合適的碼流。但是它的缺點是,比如上圖中Apple TN 2224推薦的一個標準,它認為在一定的分辨率條件下就應該采用對應的碼率。2015年Netflix提出內容自適應編碼,名為Per-Title的技術。在上圖中,橫坐標表示碼率,縱坐標表示質量,可以看到越往上質量越高,越往下質量越低。圖中的線證明每一個視頻都有自己唯一的一條曲線的特性,從編碼角度來說這是一條RD(率失真)曲線。如何在這些曲線上找到針對于Title本身的一條最優的曲線,這就是我們要解決的問題。
3.2內容自適應編碼CAE
我們在做CAE的時候可以在不同的粒度上做,從上圖可以看到最初的一個粒度是視頻類別,它的做法是用AI的一些方法或者是通過圖像里的內容本身或者其他方式分析出視頻內容是PPT還是球賽等。第二個級別是實現一個Title級別,它的做法是對一個片子進行分析,但是這個片子有長有短,即便是同一視頻類型,比如一個動畫片,它可能有運動劇烈的動畫片,有運動緩慢的動畫片,這都是有很多區別的。再更精細一點就到了分片場景,這個就跟云轉碼結合起來。我們可以在Chunk 級別上做內容自適應,但是在Chunk階段也可能做得不會那么好。那么接下來就是場景級別,我們認為在一個場景里的視頻的復雜度變化不是特別快。因為我們做場景檢測的時候就會區分出不同場景之間的邊界。大家做的最深入的就是幀級別,它牽扯到對Codec本身的一些優化,也就是需要根據內容本身的程度做碼率的分配。而我們的方案還是選擇場景級別,也就是做與Codec無關的方案,但是也不是絕對的無關,因為每個Codec都有自己的特性。?
3.3視頻源特性分析
那么我們就要對內容特性進行分析,我們做Codec時候,視頻序列是多種多樣的,視頻源的復雜度也是不一樣的,傳統的都是基于分辨率@碼率的配置。上圖中的四幅圖是比較典型的,在測試序列里假設分為ABCD四類,A類是幾乎靜態的;B類是一些室內的場景;C類是一些比較動態的,比如足球比賽;D類的在測試序列里是非常難的一種,這種場景是非常難編的。介紹這個的原因是在我們的服務里,比如現在最熱的短視頻,小視頻,甚至長視頻等等,給我們提供一些思路來在這里面進行應用。?
3.4視頻源復雜度的表征
內容的復雜度在ITU的建議書里很早就給出了一個公式。右邊這張圖是我從最新的MSU的Codec對比里摘出來的,這幅圖在選擇測試序列的時候會對測試序列進行一些分類,獲取時間復雜度信息,空間復雜度信息,然后再評判Codec好壞。做這個分析是為了智能編碼做一些準備。我們所要解決的最根本的問題是如何從視頻內容的復雜度,視頻質量,還有視頻碼率中找到他們之間的關系,或者是從曲線上選擇一個最優的參數。當然這里的視頻質量也有專題介紹,它相關的因素也很多。
3.5復雜度、碼率與質量的關系
視頻質量相關的因素有很多,首先是視頻分辨率,現在到了4K,8K,大家也是在無止境的往高處追求。第二個就是視頻幀率,幀率就是每秒24幀以上,那是對人眼的最基本的應用,也是越高越好。視頻碼率,在本質上來說,在相同的條件下視頻碼率是決定視頻質量最關鍵的一個因素。第四個因素就是我們今天講的視頻內容本身,因為內容不一樣復雜度也不一樣。另外不同Codec類型也是視頻質量相關的。但是如何進行評價呢?可能這個話題比較大了,但是我們在具體做自適應的時候會選擇適應自己的一個指標,比如我們現在選擇的還是比較傳統的方法,即PSNR。至于主觀的指標上的要求,我認為得看優化方向是什么,并不是一定要根據潮流選擇最新的評價指標。但是我們最重要的目的是要在曲線上能夠針對內容找到最優的一個點出來。如何找到這個點呢?這里有兩種方法,第一種是我們可以基于參數模型的方法,就是無參考的質量評估的一個問題。第二種就是基于機器學習的方法,因為現在是一個海量視頻的時代,如何從一個海量視頻里利用海量視頻的特性,再結合現在最潮流的AI的技術從而找到一些關系。
3.6無參考質量評估方法
這里對無參考的質量評估進行簡單介紹。在國際標準里有很多不同的模型,這些模型也是有好有壞的,但是一直在不斷的進行優化。下面我舉一個例子,這個工作是由國內上海交通大學宋利老師的團隊來做的。也算其中的一個模型之一,上圖的公式中顯示,在給出一定預期的視頻質量的條件下,跟TI,SI,之間的找到一個關系。那么就可以采用模型的方法預測出預期使用的碼流大小。接下來介紹一下實踐,因為我們最大的服務是百度的短視頻和小視頻,所以我首先對線上視頻的特性進行分析。
3.7 CAE 1.0百家號線上視頻特性分析
這里簡單介紹一下短視頻和小視頻的特性,短視頻是橫屏的視頻,它可以在PC上觀看也可以在手機上觀看,并且它的長度不等。小視頻是一個豎型視頻,同樣視頻長度不等。我們對線上的視頻復雜度進行了一個統計,大約40%的視頻是中等復雜度的。短視頻作為內容運營來講,它有些自己的特點,就比如有可能看上去很簡單的一個場景,用一些語言描述就會導致它的點擊率很高,所以這里還是有非常大的帶寬節省空間的。從內容分析,我們也有多種類型的視頻,下面舉一些例子。
上圖中顯示的幾種場景是復雜度逐漸上升的場景,最后一個場景比較復雜,其復雜度為1.3,這種在視頻編碼中是非常難的,因為它的細節非常豐富。下面是小視頻的場景。
我們針對于小視頻也進行了復雜度的分類,第一幅圖是小百科的這種場景,還有一些監控的場景,接著復雜度為1.0的是一個表演場景,最后一個復雜度為1.2的是一個戶外的場景。在短視頻里,包括快手,有很多是戶外的這種場景,它的復雜度相對來說是比較高的。
3.8 CAE1.0技術方案
在智能編碼技術方案1.0版本的實現過程中,我們選擇了基于場景的分割。我認為基于場景的分割與云轉碼配合起來是比較好的一個方案。進行場景分割之后也會出現一個問題,比如分割后的場景有的在15秒以內,有的只有一兩秒,這也會導致在轉碼的時候出現問題。我們會有一個從Short到Chunk的轉換或者合并。我們能保證的是Chunk的邊界肯定也是在之前檢測的場景的邊界上。視頻復雜度的計算使用的是CRF 編碼,我認為用CRF 23編碼評估它的復雜度是比較合理的。為了歸一化,我們還計算了BPP,把視頻編出來的碼率再規劃到每個像素上去。然后我們為了計算方便,為了后面的策略,還會使用一個函數對BPP進行壓擴到一個區間上,這樣就方便我們產生一些策略。我們最終的策略是在視頻碼率上進行一次Scale,當然這里有兩種方法,一種是可變的CRF,另一種是可變的視頻碼率。
1)線上帶寬節省情況
我們上線了1.0版本后,根據不同的復雜度,再結合云轉碼計算線上收益。在一般場景的例子中,碼率節省21%的情況下,PSNR有略微降低,對人眼是沒有任何損失的,這是很重要的一點。在線上我們會做一個對比測試,分為實驗組和對照組。依據用戶的點擊量,最后折算出帶寬的情況。CAE1.0相對CRF節省了11%的帶寬。但是這個帶寬的節省不一定有太多的參考價值,因為每家公司不一樣。不過我們在視頻的碼率上平均節省了20%到30%。
2)效果對比CAE1.0 VS VBR
接下來舉一個在效果上對比CAE和VBR的例子。我們預期是要實現在整個視頻上進行比較理想的恒定質量的碼率的分配。在局部細節上,比如草的這種細節,可以看到CAE的效果上明顯保留了更多的細節,當然這是在相同的碼率的條件下對比的。
3)CAE1.0的缺點
接下來介紹一下CAE的缺點。我們確實實現了CAE,但是卻需要消耗計算資源兩到三倍,時效性得不到滿足。第二個是用3 pass 編碼解決一些碼率控制不準確問題,比如有些場景非常小,可能一兩秒,或者兩三秒,但是如果直接用VBR分配碼率就可能導致碼率不準確,所以我們就必須再用一個2 pass的方式實現理想的碼率分配。后面我們會有一些探索,利用機器學習的方法,或者深度學習的方法替代CRF編碼的復雜度評估。
4.?下一步技術探索
4.1基于ML的復雜度評估
首先我們可以采用機器學習的方法,即依據TI,SI進行復雜度分級。我們在做評估的時候,已經采用了五類分級,從非常簡單,簡單,一般,復雜,到非常復雜。分級之后,我們可以用一些參數的方法,參考一下國內老師的工作或者國外的那些質量模型的工作在一定質量的要求上進行一些預測,給出部分最優的編碼參數,然后還可以提取其它更多的特征。
4.2基于深度學習的最優編碼參數預測
雖然基于傳統的機器學習方法可以實現編碼的復雜度評估,但是目前深度學習非常火熱。而每天的視頻內容量非常大,那么我們可以用深度學習的方法來進行最優編碼參數的預測。此時就會涉及到視頻特征數據庫的建立,這里需要提取TI,SI相關特征信息,利用 CRF進行編碼,得到質量,碼率,內容復雜度指標。但是僅僅這些指標可能是不夠的,因為AI的能力目前并沒有那么強大,所以還需要借助于視頻本身的一些東西,比如提取一些語法信息。由于沒有數據,因此我們目前還沒有具體實現的過程,但是目前已經進行了一些工作,比如利用一些現有的模型,CNN模型,它本身有提取特征的一種能力,然后可以用一些其他TI,SI的特征,加上語法里的特征,能夠預測出碼率,這是目前正在探索的部分工作。
4.3AI智能編碼框架
那么將所有的工作集成起來,在整體調度中進行的改造是什么呢?我們會對視頻內容進行分析,首先進行場景分割,接著視頻分片,然后是基于深度學習的編碼參數的生成器,有了生成器之后,就可以對每個場景進行最優的編碼分片。同時我們還會進行VMAF質量監測,視頻合并,到最后的分發,這也我們正在探索的方案。
精品文章推薦
技術干貨:
Per-Title編碼優化
基于鏡頭的編碼
編碼服務正在步入云端
2018:視頻標準混戰的元年序幕
使用級聯SFU改善媒體質量和規模
利用JPEG制作更快,更準確的神經網絡
Netflix:我們是如何評估Codec性能的?
編碼壓縮新思路:面向QoE的感知視頻編碼
編解碼器之戰:AV1、HEVC、VP9和VVC
總結
以上是生活随笔為你收集整理的百度媒体云智能编码技术实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 音视频技术开发周刊 81期
- 下一篇: 基于Licode的WebRTC全球分布式