抖音大型直播的畫質最佳化實踐
面臨挑戰
隨著抖音內容生態的不斷豐富,越來越多的大型賽事在抖音平臺進行直播,世界盃/春晚/亞運會等各項賽事節目引來大量使用者觀看。卡達世界盃期間,抖音提供的穩定高質直播畫面為觀眾帶來了完美的觀賽體驗,決賽的 PCU 高達 3700W+。不同賽事節目涉及鏈路眾多,且不同賽事之間存在差異,如何保障各鏈路的畫質穩定並進一步提升畫質,是一個巨大的挑戰。
如何應對挑戰?
畫質最佳化鏈路
大型賽事直播涉及鏈路較長,不同賽事鏈路存在一些差異,整體可簡化為下圖流程,現場訊號經過演播室的製作傳輸給 CDN 再進一步分發到使用者側。從畫質角度來看整個鏈路可分為畫質檢測與畫質最佳化兩個部分,對於 CDN 之前的鏈路以畫質監測為主,以發現問題/定位問題/推動對應鏈路人員解決問題為目的。畫質最佳化在 CDN 和客戶端兩側進行,下面的內容主要介紹畫質最佳化部分。
隨著賽事錄製技術的提升,越來越多的大型賽事都用上了4K HDR錄製標準,畫質清晰度也不斷提升,隨之而來的是更大的頻寬壓力。同時為了相容消費端不同的看播裝置和不同的頻寬條件,服務端需要轉出多種不同解析度不同位元速率的版本供看播端選擇,為了保障使用者在不同頻寬與裝置下都能取得更優的畫質體驗,我們做了大量的最佳化工作。團隊透過自研的自適應 ToneMapping,影片降噪,ROI編碼,影片插幀,BAS取樣,端上超分等演算法有效地提升了賽事畫質。
自適應ToneMapping: 目前大型賽事大都使用HDR(高動態範圍)裝置錄製,團隊對支援 HDR 看播的裝置增加了 HDR 檔位,同時提供了多種不同解析度/幀率的檔位。HDR 拍攝的片源擁有更廣的色域,更大的動態範圍。但對很多終端顯示裝置而言,並不支援 HDR 訊號播放,所以透過 ToneMapping 演算法將 HDR 訊號轉換為 SDR(標準動態範圍)訊號是十分必要的。
相比 SDR 訊號,HDR 訊號擁有更廣的色域和更大的動態範圍,在轉換到 SDR 訊號的過程中不可避免會產生一些資訊損失。常用的一些 ToneMapping 方法,不論是 Reinhard,Filmic 或者 Hable,其本質都是設計固定的對映曲線實現從 HDR訊號 到 SDR訊號的轉換,同時儘量保持對 HDR 效果的還原。但直播賽事場景多變,且現場動態範圍跨度極大,如世界盃比賽中場館的燈光/草地/球員亮度差異明顯,不同鏡頭跨度極大,而在亞運會遊戲類比賽中的CG畫面較為穩定,現有的ToneMaping演算法無法在多變的場景中取得優秀穩定的效果,而手動調節每場比賽的轉換引數也不現實。為了解決這一問題,團隊提出了內容自適應 ToneMapping 演算法,透過統計影片內容的實際光照情況動態地進行 ToneMapping,從而得到更優效果。
左: 內容自適應 ToneMapping,右: Hable 演算法
在主觀眾測中最佳化之後的內容自適應 ToneMapping 演算法遙遙領先於現有的TonaMpaping演算法結果(對照任務為團隊自研結果)
BAS 取樣: BAS(Byte AI Scaling)演算法是位元組自研的一種基於深度學習的圖片/影片下采樣演算法,近些年來,深度學習驅動的影片處理演算法已經廣泛應用於各類點播、直播服務中,涵蓋抖音、西瓜影片等諸多業務線。在實際的流媒體傳輸鏈路中,依據使用者實際網路延遲、終端效能等因素,源流將透過自適應位元速率(Adaptive Bit-Rate)策略傳輸到終端裝置,最佳化使用者實際體驗。其中,影片流往往會被取樣到多個標準解析度,例如藍光(1080p)、高畫質(720p)、標清(480p)等。隨著音影片行業和攝影裝置的發展,高解析度的影片源佔比日益增多,大部分影片需要在服務端進行降取樣來配合自適應位元速率策略,因此降取樣演算法的最佳化也是提升QoE的關鍵。在過去的業界實踐中,影片處理演算法往往專注於提高解析度(如超分演算法)或者保持解析度(如降噪演算法)的處理正規化,而幾乎忽視了對降低解析度方法的研究。不同於固定運算元的bicubic等降取樣演算法,BAS演算法基於深度學習使用高精度資料訓練模型,緩解傳統方法帶來的頻域混疊與頻域截斷問題,降低鋸齒感、減少細節丟失。如下圖所示,對於4K的超高畫質圖源降取樣到480p解析度的任務,左圖為BAS演算法處理結果,右圖為傳統bicubic演算法處理結果。可以明顯看到,BAS演算法處理結果中緩解了邊緣鋸齒(左下),消除了摩爾紋(右下),並且燈牌、觀眾席等方面的細節紋理更加清晰,視覺觀感更好。
左圖為BAS取樣結果,右圖為Bicubic取樣結果
在與bicubic演算法的定量對比中,BAS基於PSNR指標取得了-20.32%的BD-Rate收益,意味著相同重建誤差水平下可以節省20%以上位元速率,而同等位元速率下則可以提升畫質水平。而對於更符合人眼感知特性的VMAF指標,BAS同樣取得了-20.89%的BD-Rate收益。
在常用的編碼條件下,BAS演算法在UGC影片上能做到在降低6.12%平均位元速率的同時,提升多項關鍵主客觀畫質指標,既可以降低一部分傳輸頻寬,也可以帶來畫質上的提升,取得成本和體驗上的雙贏。
影片插幀: 抖音大型賽事實踐中會遇到各種不同的錄製標準,其中也存在1080P 25fps的錄製標準,現在消費者已經習慣高幀率的流暢影片體驗,對於低幀率的影片會明顯感受到畫面的流暢度降低,影響使用者觀看體驗。針對低幀率場景,我們使用了智慧插幀技術,透過對前後幀的內容進行光流估計,根據光流資訊將前後幀畫素都轉換到中間幀,然後進行整合,生成中間幀,提升影片幀率,減少觀看時的卡頓感。而針對電競類對幀率要求較高的場景,我們做了以下的額外最佳化。
faster光流模組和faster修正模組使用partial conv代替普通卷積,能在保持效果的同時減少卷積運算;在計算光流時,採用內容自適應下采樣去對輸入進行下采樣,用於計算光流、殘差和遮擋掩碼, 再將其上採回原解析度,用於原始輸入的warp和整合 ,由於光流模組和修正模組這兩個運算較多的模組接收的是較小的解析度,從而達到進一步減少計算量的效果;工程上,團隊透過運算元融合、半精度的方式,減少IO和浮點運算,相比工程化前加速1倍多。同時,透過多GPU部署的方式擴充了智慧插幀的能力,使得在更高解析度(4k)的場景下能實施部署。另一方面,電競場景中,比如王者榮耀,每個英雄上面都會有選手的名字,而這些文字較小,文字會隨著英雄的複雜運動而運動,也就是會導致出現小文字的複雜運動,智慧插幀通常會在這些複雜運動的小文字上因為光流估計不夠準確而導致插出來的幀文字的位置不夠準確,導致偽像出現,我們在訓練過程中加入更多的隨意移動或者靜止的較小文字,使得模型能夠在訓練過程中更多地注意處理小文字的複雜運動,從而達到更好的插幀效果,如下圖所示,左邊為最佳化後的插幀結果。
左邊為最佳化後結果,右邊為最佳化前結果
ROI 編碼: 為了兼顧影片位元速率和主觀畫質,團隊使用了基於 LSTM(長短期記憶網路)的時域 ROI 技術,透過人眼顯著性區域檢測和編碼相結合的方式,讓位元速率在畫面上的分配更加合理。除了模型設計之外,ROI演算法中另一大難點是saliency(顯著性物體檢測)資料的獲取,通用的saliency資料集在大型賽事中的表現並不理想。針對這一問題,團隊收集製作了自己的專用資料集,並且對一些大型賽事做了專用資料集,例如針對世界盃賽事,團隊專門製作了足球場景的 saliency 資料集,透過眼動儀追蹤球迷觀看球賽時的關注區域得到足球比賽的專用 saliency 資料集,從而極大增加了模型的準確性。針對足球場景中顯著性物體較多,顯著性區域分散的特點,團隊對檢測模型進行了專門的最佳化,在保證檢測速度的前提下,提高了模型的召回率和不同場景的魯棒性,從而實現更優的主觀質量。
注:紅色框內表示 ROI 區域,左邊為通用方案結果,右邊為最佳化結果
同時團隊使用影片降噪演算法,根據影片資訊對其進行空域、時域噪聲的去除,將帶有噪聲的影片處理成乾淨、沒有噪聲的影片。由於去除了影片的噪聲,在提升影片質量的基礎上同時降低了傳輸的位元速率。由於使用者側網速的限制,端上存在多個檔位,當看播端網速較慢時,可能會切換到 480P/720P 等低分辨檔位,此時會觸發端上超分演算法提升畫面清晰度。超解析度技術指的是,基於機器學習/深度學習方法,根據影片資訊對其進行空域、時域建模重構出缺失的細節,將低解析度的影片重建出高解析度影片的技術。這樣即使是在低分辨檔位也能體驗到更清晰的畫質。
左:影片降噪前,右:影片降噪後
除此之外團隊還提供大解析度、高幀率、廣色域,並使用色彩增強、自適應銳化等多種畫質增強技術,呈現更加沉浸感的超高畫質畫面。
左:未過端上超分,右:經過端上超分
來自 “ 位元組跳動技術團隊 ”, 原文作者:多媒體實驗室;原文連結:https://server.it168.com/a2023/1103/6827/000006827916.shtml,如有侵權,請聯絡管理員刪除。
相關文章
- 抖音世界盃的畫質最佳化實踐
- 大型直播活動保障S13的實踐和思考
- 畫面好的大型手遊 十大畫質超高的手機單機遊戲排行榜遊戲
- 最佳化音質是直播電商原始碼不能忽略的原始碼
- Flink CEP 在抖音電商的業務實踐
- 抖音直播資料2
- 抖音直播資料1
- 大型網站的 HTTPS 實踐(四):協議層以外的實踐網站HTTP協議
- 大型網站的 HTTPS 實踐(四)——協議層以外的實踐網站HTTP協議
- 文生圖大型實踐:揭秘百度搜尋AIGC繪畫工具的背後故事!AIGC
- 直播轉點播實踐
- 敏捷實踐中的好品質敏捷
- 用mobx構建大型專案的最佳實踐
- 使用React構建大型應用的最佳實踐React
- win10畫面怎麼最佳化_win10如何提高電腦畫質Win10
- 大型DCI網路智慧運營實踐
- Golang效能最佳化實踐Golang
- 抖音直播彈幕抓取PHP版本PHP
- AI質檢最佳化實踐:召回率和準確率,哪個更重要?AI
- 用mobx構建大型專案的最佳實踐(2)
- 簡潔的MobX與MVP思想—大型專案實踐MVP
- 基於Greenplum,postgreSQL的大型資料倉儲實踐SQL
- Spring Batch在大型企業中的最佳實踐SpringBAT
- Spring Batch 在大型企業中的最佳實踐SpringBAT
- 智慧質檢新實踐:「雙模」質檢
- HLS直播協議在B站的實踐協議
- 大型系統儲存層遷移實踐
- Jan Ozer:高畫質直播互動場景下的硬編碼如何選型?
- 小程式直播與抖音直播兩者有何區別?
- 頁面CLS 最佳化實踐
- SAP ABAP 效能最佳化實踐
- Apache Kafka在大型應用中的20項最佳實踐ApacheKafka
- Now直播iOS Flutter混合工程實踐iOSFlutter
- 前端程式碼質量的思考與實踐前端
- 抖音直播間粉絲使用者電話資訊採集軟體 抖音直播間截流系統
- 8個雲成本最佳化的最佳實踐
- 最佳化您的部署:Docker 映象最佳實踐Docker
- 直播導播高畫質影片傳輸中的影片壓縮編碼原理解析