Per-Title(按主題)編碼并不是很新的技術,本文是Netflix于2015年發布的。但直到今天,Per-Title編碼的思想仍在發揮著重要作用,通過Per-Frame甚至Per-Block
更細粒度的切分,能夠實現更高的編碼效率。LiveVideoStack對文章進行摘譯。
文 / Anne Aaron, Zhi Li, Megha Manohara, Jan De Cock and David Ronca
譯 / 金歌
我們花了數年時間開發出這種名為“Per-Title”的編碼方法,其核心是對每一主題(的視頻)進行獨立分析,根據其復雜度選擇最佳編碼方式。設想一下,針對一個非常復雜的動作場景,我們將更多比特位用來封裝動作信息,而只用較少的比特位封裝固定不變的風景及動畫部分。這種方法使我們能夠在降低帶寬占用的情況下,為用戶提供同樣優質的視頻觀看體驗。對于帶寬較低的國家,以及用戶經常在移動網絡上觀看視頻的地區,這一特質尤為重要。
相關背景
在地面無線電視、有線電視或衛星電視這些傳統電視傳媒方式下,廣播公司會擁有自己固定可用的帶寬。他們提供的節目(或同時提供的多個節目)在編碼后得到的視頻流需要合理地占用這部分帶寬。廣播公司通常會利用統計復用的方法,將比特率高效地分配給同時播放的多個節目,但其使用的總比特率仍然受制于有限的帶寬總量。在多數情況下,廣播公司甚至會通過填充空(視頻)包的方式來確保某一固定頻道的對應比特率嚴格不變,因此浪費了寶貴的數據傳輸速率。此外,通過預先設定好的頻道分配,收視率較低的電視節目或電影劇集會被分配到較低的比特率(因此視頻流質量較差),而高收視率的節目則會在比特率較高的頻道中進行傳輸。
憑借著互聯網流媒體的優勢,Netflix不受預先分配頻道的限制。相反,我們可以向會員提供質量最佳的視頻流,無論是哪種節目都可以根據會員的可用帶寬和觀看設備進行量身定制。我們使用優化后的編碼方式,以多種比特率對視頻流進行預編碼??蛻舳四軌蚧谧赃m應流媒體算法即時選擇最佳分辨率的視頻流,最大限度地提高視頻質量,同時避免因視頻加載而造成的播放中斷。
如何才能選擇最佳的編碼方式呢?這個問題可并不簡單。例如,假設用戶的可用帶寬為1Mbps,我們應該以哪種分辨率來傳輸H.264/AVC視頻呢?480p、720p還是1080p呢?
如果使用480p,1Mbps帶寬條件下視頻可能不會出現塊失真或環失真等現象。但如果該會員正在使用高清設備觀看視頻,那么經過超采樣的視頻清晰度會較低。相反,如果我們以1080p編碼,傳輸的視頻分辨率會更高,但同時傳輸比特率可能會過低,以至于大多數畫面都會出現令人厭煩的編碼失真。
普適的最佳編碼方式
我們于2010年末首次部署H.264/AVC編碼,那時我們的視頻工程師針對我們提供的所有視頻類別,選擇了(當時)最佳的編碼方式。他們測試了多種編碼器配置,通過實際觀看比較的方法對編碼器的各項參數進行了設定,從而讓不同類型的視頻都達到最佳質量。最終我們選擇了下表中所列出的這組比特率-分辨率階梯對視頻進行編碼,以確保視頻不會出現嚴重的失真。
對于大多數內容來說,這種“一刀切”的方式在給定比特率限制的情況下確實實現了高質量的編碼。然而,在一些特殊情況下,例如攝像機噪點或膠片顆粒噪點較多的場景,以最高比特率5800kbps傳輸的視頻流仍會在噪點多的區域出現塊失真。而對于動畫片這類簡單內容,以5800kbps傳輸1080p的視頻流又是非常浪費的。此外,網絡帶寬限制為1750kbps的用戶也許能夠在高清分辨率下觀看動畫片,而不該受限于比特率階梯所指定的標清分辨率。
Netflix視頻集中的眾多主題(的視頻)具有很高的信號特征多樣性。下圖中我們展示了100個隨機抽樣的主題的多樣性。我們使用x264編碼器在恒定量化參數(QP)比率控制的條件下,以1080p分辨率編碼了100個源。在每一個量化參數下,我們將計算出的每類主題對應的比特率(以kbps為單位)作為x軸數值,以衡量視頻質量的PSNR(峰值信噪比,以dB為單位)作為y軸數值,從而得到這些數據點。
從這些曲線可以看出,某些主題在2500kbps或更低的比特率下即可達到非常高的PSNR(45dB或更高)。而與此同時,另一些主題需要以8000kbps或更高的比特率傳輸,才能使PSNR達到38dB這一可接受的最低限度。
鑒于不同主題的信號特征多樣性及用戶限定帶寬情況各異,顯然我們很難找到一個普適的方案使每種主題的視頻都能達到最佳觀看質量。在某些情況下,(使用普適方案)還會造成分配的比特率過高,大大超出提升視頻質量所需要的比特率,從而導致存儲空間與傳輸比特位的浪費。
關于視頻質量度量的附注:在上圖與后文中的諸多圖表里,我們以PSNR作為視頻質量的度量。 PSNR是視頻壓縮中最常用的度量。 盡管PSNR并不總能反映出人眼所感知的視頻質量,但它是衡量視頻保真度的一種簡單指標(即45dB表示視頻保真,35dB表示視頻失真),同時它也很好地表示出了每個主題內視頻質量的(分布)趨勢。我們還可以利用其他質量度量進行分析,如VMAF感知度量。VMAF是由Netflix與南加州大學研究人員合作開發的一種新的感知質量度量。
適合視頻內容的最佳編碼方案
Why Per-Title?
對于一個內容”簡單”的動畫主題來說,視頻的每一幀主要由平坦區域組成,不含攝像機或膠片顆粒噪點,幀間運動也非常小。下面我們來比較一下利用固定比特率階梯與利用針對主題優化后的比特率階梯分別得到的質量曲線:
如上圖所示,以不同比特率編碼分辨率為1920×1080的視頻片段,比特率為2350kbps時(A,按主題比特率階梯)視頻質量較高(PSNR約為45dB),當比特率增加到4300kbps(B,固定比特率階梯)甚至5800kbps(C,固定比特率階梯)時,視頻的視覺質量并不會有明顯的提升(PSNR大于等于45dB時,人眼不能感受到明顯失真)。 利用固定比特率階梯,在2350kbps比特率(D)下我們只能編碼分辨率為1280×720的視頻片段。 因此,那些可用帶寬約為2350kbps的用戶就只能觀看720p的視頻,而不是質量更好的1080p的視頻了。
另一方面,對于動作片來說,其幀間運動信息和空間紋理信息都要多于動畫片。 動作片中具有快速移動的物體,頻繁變化的場景,爆炸和水花四濺等鏡頭。下圖顯示了我們基于某一動作片而獲得的質量曲線。
如果在1920×1080分辨率下,以4300kbps(A)比特率對這些高復雜度的場景進行編碼,則會導致編碼失真,例如塊失真、環失真和輪廓失真。另一種質量折衷的方法是以較低的分辨率1280x720(B)進行編碼,以增加縮放比例為代價消除編碼失真。編碼失真通常比降采樣(編碼前)和超采樣(解碼后)導致的模糊現象更加令人厭煩也更容易被發現。對于這一具有高度復雜場景的動作片來說,可能最好的方式是在1920×1080分辨率下以超過5800kbps的比特率進行編碼,例如7500kbps,從而完全消除編碼失真現象。
為了向我們的會員提供最佳質量的視頻,每個主題的視頻都應當對應一個針對其復雜特性而特別設計的比特率階梯。為了回答以下這幾個問題,Netflix的編碼團隊在過去這幾年中投入了大量精力進行研究和開發:
-
給定一個主題,應該設定多少個質量等級,使得相鄰等級之間的編碼結果剛好存在最小可覺差(JND)?
-
給定一個主題,每個質量等級對應的最佳分辨率 - 比特率對是多少?
-
給定一個主題,達到最佳可感知質量所需的最高比特率是多少?
-
給定一個視頻編碼結果,怎樣獲得人眼感知質量?
-
如何設計一個健壯并可擴展的生產系統來解決以上問題?
算法
為了設計最優的按主題比特率階梯,我們在確定質量等級的總數,以及每個質量等級對應的比特率 - 分辨率對時,受到了一些實際條件的限制。 例如,我們需要確保反向兼容性(視頻流需要支持所有以前認證過的Netflix設備),因此可選擇的分辨率被限制在 - 1920×1080,1280×720,720×480,512×384,384×288和320×240這些選項中。而可選擇的比特率也是有限的,其中相鄰比特率的增量大約為5%。
此外,我們還考慮到了其他一些優化標準。
- 選擇的比特率 - 分辨率對應該是有效的,即給定比特率下得到的編碼結果應具有盡可能高的質量。
- 相鄰比特率(對應編碼結果)之間應有視覺上的感知差異。 理想情況下,兩個相鄰比特率之間的感知差異應該恰好低于一個最小可覺差。這確保了在比特率之間進行切換時視頻質量轉換的平穩性。鑒于比特率梯需要覆蓋的感知質量范圍很廣,我們還應確保質量等級的數量不要太多。
為了更加直觀地解釋這個問題,我們在下面這個例子中用三種不同的分辨率搭配各種比特率對視頻源進行了編碼。
以三種分辨率搭配各種比特率進行編碼。 藍色標記表示編碼點,紅色曲線表示PSNR - 比特率凸包
在每種分辨率下,編碼質量隨比特率增加而單調遞增,但當比特率超過某一閾值后,曲線開始趨于平坦(A和B),其原因是每個分辨率都對應一個感知質量的上限。 當視頻被降采樣到低分辨率進行編碼,而后超采樣到全分辨率進行播放時,其高頻成分將會丟失。
另一方面,在比特率相同的條件下,以高分辨率編碼的視頻質量可能反而低于以較低分辨率編碼的視頻質量(請參見C和D)。這是因為以較低的精度編碼更多的像素,和以較高的精度結合升采樣和插值來編碼更少的像素,前者所得到的圖像質量更低。此外,在比特率非常低的情況下,與每個固定尺寸編碼塊相關的編碼消耗開始在比特率消耗中占領主導地位,余下能夠用于編碼實際信號的比特位非常少。在比特率不足的情況下進行高分辨率編碼將會造成編碼失真,如塊失真、環失真和輪廓失真。
我們可以發現,每個分辨率都對應一段優于其他分辨率的比特率區域。如果我們匯集所有可用分辨率所對應的這些區域,它們會共同形成一個稱為凸包的邊界。從經濟意義的角度來看,凸包是編碼點達到帕累托(最優)效率的區域。理想情況下,我們希望能夠精確地在凸包上進行操作,但由于實際條件的限制(例如能夠選擇的分辨率有限),我們將會選擇與凸包盡可能接近的比特率 - 分辨率對。
為我們視頻庫中的每類視頻構建覆蓋整個質量區域的完整比特率 - 質量圖是不切實際的。 為了尋找更加實用的解決方案,我們在一組有限的分辨率下對不同的量化參數(QP)進行了試驗編碼。量化參數的選擇依據是“相鄰量化參數之間存在一個最小可覺差”。我們測量記錄了每個試驗編碼的比特率和質量。在根據采樣點對曲線進行插值后,我們得到了每個候選分辨率對應的比特率 - 質量曲線。通過選擇最接近凸包的點,我們最終得到了按主題比特率階梯。
成果
以動畫片BoJack Horseman例,它的幀主要由平坦區域構成,幀間運動也很低。 在固定比特率階梯方案中,我們使用1750kbps比特率在480p下進行編碼和傳輸。而在按主題比特率階梯方案中,我們首先以1540kbps的比特率傳輸1080p的視頻。下面我們來比較一下這兩個版本的截圖(上圖:1750kbps,下圖:新的1540kbps)(假設顯示器為1080p)。 不難看出,利用新編碼方法得到的結果更加清晰,視覺質量更好。
美劇Orange is the New Black的視頻特性平均復雜度更高。 在低比特率區域,新的按主題編碼方案并沒有顯著改善編碼質量。而在高比特率區域,新方案為最高分辨率1080p配置了4640kbps的比特率。相比于固定階梯方案中所使用的5800kbps,新方案節省了20%的比特率。對于這一主題的視頻,我們在避免浪費比特數的同時,為會員保證了極佳的視覺質量。下面是比特率分別為5800kbps(上圖)與4640kbps(下圖)時的截圖。
適合您設備的最佳編碼方案
在上文描述中,我們選擇了優化后的按主題比特率階梯,這其中存在一個假設前提,即觀看設備可以接收和播放(支持)任何分辨率的編碼視頻。然而,由于硬件限制,某些設備可能會將分辨率限制在低于視頻源原始分辨率的數值。如果我們將最高凸包分辨率設定為1080p,則可能導致用戶在僅限720p解碼的平板電腦上觀看體驗欠佳。例如,對于一個動畫主題的視頻,如果用戶可用帶寬為2000kbps,我們可能會將視頻流的分辨率切換到1080p,因為它的質量會比2000kbps下720p的視頻流更好。然而用戶的平板電腦并不支持1080p編碼,即使可用帶寬支持更高質量(更高比特率)720p編碼,用戶最終接收到的視頻流的比特率也會受限于2000kbps。
為了解決上述這一問題,我們針對設備最高可播放分辨率設計了另外一種按主題比特率階梯。 更確切地說,我們是為480p和720p的設備設計了最佳按主題比特率階梯。雖然這些額外的編碼會降低每個主題視頻庫的整體存儲效率,但這一舉措為我們的客戶獲得最佳觀看體驗提供了保障。
對于Netflix的用戶這意味著什么?
按主題編碼方案使我們能夠通過以下兩種方式提供更高質量的視頻:在低帶寬條件下,按主題編碼能為您提供質量更好的“簡單”主題視頻,因為該類視頻(如BoJack Horseman)現在將會在相同比特率下以更高分辨率呈現。而當可用帶寬適合高比特率編碼時,按主題編碼能為您提供質量更優的復雜主題視頻,例如Marvel的Daredevil,因為該類視頻將會以更高的最大比特率進行編碼。在降低帶寬占用的同時為會員提供最佳的觀看體驗,成為更好的互聯網管家,這始終引領著我們不斷進行創新。
-
編碼器
+關注
關注
45文章
3601瀏覽量
134205
原文標題:Per-Title編碼優化
文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論