腾讯V265编码器
騰訊V265編碼器
V265編碼器的業(yè)務(wù)體驗優(yōu)化,包括碼率控制優(yōu)化以及業(yè)務(wù)適配相關(guān)的優(yōu)化。主要內(nèi)容可以分為三個部分。
? V265的最新情況
? V265在碼率控制方面所做的一些優(yōu)化
? V265編碼器在業(yè)務(wù)落地過程中遇到的一些問題與解決方案
- V265最新情況介紹
目前,V265編碼器可配置的編碼速度級別已經(jīng)達到11個以上,能夠支持多個服務(wù)端的轉(zhuǎn)碼平臺,以及直播,點播,零延遲,云游戲等多種業(yè)務(wù)下的延遲環(huán)境。在碼率控制方面,V265支持包括ABR,CBR,VFR, 多PASS,CRF等在內(nèi)的多種碼率控制方法。
V265編碼器支持分布式的碼率控制、自適應(yīng)碼率編碼、場景的自適應(yīng)以及設(shè)備的兼容性優(yōu)化。支持自適應(yīng)ROI編碼并且將要支持編碼器內(nèi)的視頻處理,完成了對4K 10bitHDR和杜比畫質(zhì)的編碼和播放支持。
2017年11月份,V265編碼器有了第一個原始框架。在2018年初,也就是研發(fā)過程進行了一年左右的時候,參與了MSU比賽,V265編碼器主觀質(zhì)量評價。在后續(xù)的4K比賽中,迭代后的1.2版本的PSNR/SSIM綜合效果也是最佳的。之后的時間,開始面向業(yè)務(wù)邏輯對編碼器進行優(yōu)化,如在接下來的版本中,分別做了壓縮率的幾率提升、4K實時編碼以及解決設(shè)備兼容問題。在2019年的1.4.0版本中V265編碼器全面支持10bit編碼,將壓縮率優(yōu)勢擴大至20%。
上圖是V265,X265,X264三種編碼器的基本壓縮率情況對比,橫軸表示壓縮率(從左到右,壓縮率由高到低),縱軸表示壓縮速度。
從圖中可以看出,在140個8bit 視頻與20個10bit 視頻,ABR算法的相同測試條件下,與X265相比V265不管是壓縮率還是壓縮速度,都是最高的。如最低的兩個點:placebo和veryslow。在單Pass placebo上,相比于X265的veryslow檔可以節(jié)省超20%的碼率,編碼速度也高出80%。V265編碼器的最高速度可以達到X265placebo下的200多倍,同時,最差的壓縮率也要高于X265medium檔的壓縮率。
在單pass下,相比于X265的veryslow檔V265可以節(jié)省20%碼率,相比X264最慢檔,節(jié)省碼率則超過60%。在相同速度下,如果編碼速度要求越快,V265相比X265的優(yōu)勢就越大。
V265編碼器的測試集總共包含140個8bit 視頻,包含多種分辨率,覆蓋15個場景。除去JCTVC的部分Video之外,大多是業(yè)務(wù)側(cè)的Video,例如小分辨率的視頻,短視頻,電影,游戲,演唱會以及一些復雜的混合場景和超高清。
在測試中得出的平均結(jié)果,基本上V265 fast檔的BD-Rate與X265的veryslow檔,X264的veryslow檔相近,但編碼速度是X265的34倍左右。
上圖左側(cè)展示的是MSU比賽的主觀對比結(jié)果,從圖中不難看出,V265在主客觀評價方面都是最優(yōu)的。另外,右側(cè)展示的是4K的客觀對比結(jié)果,SSIM評價結(jié)果與競品相比差距不到1%,PSNR評價結(jié)果遠高于競品。
2. 碼率控制優(yōu)化策略
介紹具體技術(shù)實現(xiàn)過程中所遇到的問題與解決方案,內(nèi)容主要分為三個部分。
? 自適應(yīng)的碼率分配,主要是為了在碼率控制環(huán)境下提升壓縮效率;
? 精準碼率控制,提升了碼率波動的平穩(wěn)度;
? 多遍編碼以及其他優(yōu)化
2.1 自適應(yīng)碼率分配
V265編碼器的碼率控制流程主要分為以下幾個環(huán)節(jié)。
? 通過預分析,分析出塊與塊之間的量化關(guān)系
? 幀級別的編碼控制以及CTU級的編碼
? 需要對碼率,控制參數(shù)進行更新
碼率控制流程中最重要的優(yōu)化就在于如何結(jié)合預分析與VBV緩存的結(jié)果,重新估計碼率,根據(jù)估計碼率,調(diào)整每個圖像或者CUTREE的QP偏移。
介紹CRF算法下QP預測模型優(yōu)化的一個例子。在開源軟件中存在一個問題,CRF的取值與QP都是嚴格一對一的,如CRF等于23,QP一定嚴格等于幾。所進行的優(yōu)化就是要根據(jù)當前幀的復雜度,優(yōu)化CRF與QP之間的映射關(guān)系。這個在純CRF下可以節(jié)省3%的碼率。讓更多的碼率用于人眼敏感的平坦區(qū)域,舉個例子:
如圖中展示的連續(xù)3幀圖像,幀內(nèi)的復雜度是從復雜到簡單的。第一幅圖復雜程度較高的樹的部分會更多,紋理會比較細節(jié)。最后的圖像則更側(cè)重于人眼敏感區(qū)域,人的部分會更多。可以在CRF到QP的映射結(jié)果中看到,雖然每幀的CRF都等于23,但BaseQP(幀級的基礎(chǔ)QP)都是不一樣的,這就實現(xiàn)一種類似于幀級的內(nèi)容自適應(yīng)。
定碼率模式
重點講解定碼率的模式,無論是CRF還是ABR算法,都存在一個VBV的控制。圖中展示的是ABR算法下的碼率控制基本流程。
要進行的是碼率預測模型的初始化。假設(shè)當前出現(xiàn)一幀M,需根據(jù)復雜程度估計M幀的量化參數(shù),如果存在cbr溢出,就需要進行一些限制。第三步,判斷VBV緩沖區(qū)給當前幀分配碼率的上下限,然后預測M~M+8幀圖像的碼率,判斷總碼率是否位于上下區(qū)間內(nèi),如不在上下區(qū)間內(nèi),需要相應(yīng)調(diào)整其量化參數(shù)。最后就可以編碼當前圖像,對初始模型進行更新。
對于碼率控制的過程,進行了一系列的優(yōu)化。針對碼率預測模型初始化過程,設(shè)計了多場景的幀級碼率預測模型包括:I/GPB/B0/B1/B2模型;簡單幀,復雜幀,靜態(tài)幀的碼率預測模型,通過機器學習的方法來估計I幀的碼率。在量化參數(shù)預測方面,傳統(tǒng)參考軟件主要是碼率,累計復雜度兩位相關(guān),加入了當前幀復雜度的考量,實現(xiàn)了三相關(guān)的碼率初始QP計算過程。
包括VBV緩沖區(qū)上下限自適應(yīng)計算、VBV內(nèi)QP的調(diào)整優(yōu)化、在輸出QP時進行約束以及碼率預測模型提前更新等優(yōu)化。
自適應(yīng)量化
為什么要在碼率控制這部分內(nèi)容中講到自適應(yīng)量化?自適應(yīng)量化會影響每一幀的Cost,影響到碼率的控制。
自適應(yīng)量化包含時域自適應(yīng)量化以及空域自適應(yīng)量化。所謂時域自適應(yīng)量化,如圖所示,從后往前,從后面任何一個塊找到在參考幀中的傳播代價,傳播代價越高,這個塊被參考的概率越大,量化參數(shù)QP也就會越小。空域自適應(yīng)量化就是根據(jù)當前幀內(nèi)的不同區(qū)域的復雜度,選擇不同的量化策略。如人眼不敏感的復雜區(qū)域,量化參數(shù)就會偏大一些。
在時域自適應(yīng)量化中,會為每一幀計算一個QPoffset,offset相比baseQP可能會過大,影響碼率控制以及壓縮率。根據(jù)這個問題進行了部分優(yōu)化創(chuàng)新,在預分析過程中建立幀間baseQP估計模型,引入碼率控制,達到offset最大值與baseQP相關(guān)聯(lián)的效果。
另外,在時域空域的聯(lián)合優(yōu)化中也進行了一系列的優(yōu)化,例如:時域自適應(yīng)量化強度與空域自適應(yīng)量化強度怎么調(diào)整、對高碼率點的空域自適應(yīng)量化進行特殊處理以及降低打開空域自適應(yīng)量化后的PSNR損失。
2.2 精準碼率控制
V265的幀級碼率控制特點是包含多種碼率控制模型,簡單幀,復雜幀,靜態(tài)幀以及不同的預測幀,準確率會更高。對于行級碼率控制,V265編碼器本身并沒有進行過多的優(yōu)化。不過V265新設(shè)計加入了CTU級別的碼率控制模型,可精準調(diào)整QP。
(X265行級碼率控制示意圖)
如圖所示,X265只能在每行的對角線X位置處調(diào)整一次QP,其它點的QP均是由X位置繼承而來。產(chǎn)生一個問題:如果編碼圖像為豎直結(jié)構(gòu),最下方的三角形區(qū)域就無法完成有效的QP調(diào)整。V265編碼器存在編碼單元(CTU)級的碼率控制模型,所有區(qū)域均有QP調(diào)整能力。因此,碼率控制的精準度就會得到提升。
(X265、V265碼率波動曲線)
圖為X265編碼器、V265編碼器以一幀為單位計算出的每一秒的碼率波動。當取值為0.95時,V265碼率波動與X265相近。當取值為0.2的時候,V265的碼率波動會遠小于X265。因此,對于那些對碼率波動要求比較高的直播業(yè)務(wù)來說,V265編碼器會更加適合。
ABR條件下V265與X265對比(點播)
相同速度下V265與X265對比(直播)
如圖所示,在ABR條件下(點播),V265的平均碼率誤差與X265的平均碼率誤差相比要低1%,而在相同速度下(直播),V265的平均碼率誤差是X265的平均碼率誤差的1/3,可以節(jié)省30%左右的帶寬。
2.3 多遍編碼及其他優(yōu)化
當某視頻源需要進行轉(zhuǎn)碼操作,在執(zhí)行多遍編碼時,第一遍可能只采用一種編碼,第二遍則可能編碼多種分辨率。開源軟件,不支持第一遍編碼時的分辨率與第二遍編碼時的分辨率不同。普通二遍編碼的壓縮率也并不是很好,提升有限。針對這兩個問題,V265編碼器添加了針對兩遍編碼分辨率不同的支持,720p的一遍結(jié)果可給二遍360p/1080p使用。此外,V265編碼器還增加了一些列針對二遍編碼壓縮率的優(yōu)化,使得二遍編碼的客觀質(zhì)量進一步提升。
對于其它碼率控制,V265還提供了豐富的ROI接口,不僅僅是用戶可靈活控制的ROI區(qū)域QP量化接口,還提供了整體的CRF偏移接口。
部分客戶有云游戲的服務(wù)需求,云游戲的場景對于延遲的要求為0,除幀內(nèi)多線程以外的所有線程均不能啟用。需要保證編碼器環(huán)路不存在delay,編碼器還需要對預測參考策略進行部分優(yōu)化。低延遲下的VBV緩沖區(qū)需要調(diào)整,低延遲對分層GOP結(jié)構(gòu)的支持需要進行擴展。
VFR(variableframe rate) 碼率控制在游戲直播場景中,有時需要根據(jù)輸入時間戳來控制碼率分配。相鄰兩幀的時間戳并不是固定的。如圖,輸入源時間戳由0,1直接到4、5,編碼器在碼流采集的過程中丟掉了2,3兩幀。X265只能定幀率編碼,按固定幀率重新計算時間戳,會重復編碼3次綠色圖像,綠色各分配一幀碼率。V265則可支持可變幀率編碼,給綠色圖像分配3幀碼率,保留原始時間戳編碼,使得綠色圖像畫質(zhì)更高,總體碼率控制精度大大提升。
3. V265業(yè)務(wù)落地優(yōu)化
3.1 極速高清-內(nèi)容自適應(yīng)轉(zhuǎn)碼
已有的傳統(tǒng)轉(zhuǎn)碼服務(wù)還存在一些問題。第一,傳統(tǒng)方案采用固定的編碼工具,但實際上不同視頻的最優(yōu)參數(shù)是不同的;第二,傳統(tǒng)方案采用固定的轉(zhuǎn)碼切分粒度,但由于不同視頻的最優(yōu)參數(shù)不同,將不同場景切在一起,無法找最優(yōu)參數(shù);第三,傳統(tǒng)方案采用固定碼率或質(zhì)量轉(zhuǎn)碼參數(shù),不能合理分配碼率,簡單視頻碼率浪費、復雜視頻質(zhì)量不足。仍不能保證畫質(zhì)。
極速高清的內(nèi)容自適應(yīng)轉(zhuǎn)碼可以對場景切換進行監(jiān)測,以鏡頭切片為基礎(chǔ)進行分布式轉(zhuǎn)碼;并對視頻內(nèi)容進行分類,在離線參數(shù)調(diào)優(yōu)平臺中對每類視頻進行離線調(diào)優(yōu)編碼參數(shù)。最后通過視頻內(nèi)容分析,即視頻特征(視頻復雜度特征,編碼特征)計算與深度學習預測,有效防止碼率浪費問題。
3.2 主客觀問題的發(fā)現(xiàn)和解決
客觀問題的發(fā)現(xiàn)與解決
V265編碼器提高客觀質(zhì)量最重要的一個方法就是不斷豐富測試集和測試條件:即測試更多的視頻,增加碼率控制條件,同時收集業(yè)務(wù)問題視頻,通過對比分析各種質(zhì)量評價指標,不斷進行優(yōu)化。
在調(diào)優(yōu)的過程中,發(fā)現(xiàn)某個版本的編碼器存在這樣一個問題:算法的部分閾值在某些場景下只做skip,跳過merge模式,于是就會產(chǎn)生部分損失,導致部分簡單Video的指標驟降。
還有一個問題就是2pass比1pass編碼的PSNR指標變差很多。由于2pass原理上傾向于均衡每幀的QP編碼,在碼率足夠的情況下,針對簡單,復雜場景的編碼壓縮程度控制過高。如果碼率足夠,在對VBV進行優(yōu)化時,第一遍編碼對簡單、復雜場景做了自適應(yīng)的碼率分配,第二編碼就要盡量保持這一特征。
面向各種場景進行優(yōu)化。編碼器在每個Tunegrain測試時,都會測試三個參數(shù) PSNR、SSIM、VMAF。在測試中發(fā)現(xiàn)一個特點,如果PSNR與SSIM指標的測試結(jié)果都比較好,VMAF指標不會變差。在調(diào)優(yōu)部分,對于一些人工視頻,通過對其部分參數(shù)進行調(diào)整,提升BD-rate。可以實現(xiàn)對VMAF單一指標進行優(yōu)化。
為了定位主觀問題,每個測試都會報告平均碼率誤差,峰值碼率誤差以及最小客觀質(zhì)量。舉個例子,紅線部分是以前的測試基準,縱軸為PSNR參數(shù)的值,從圖中可以看到,PSNR存在低峰,這就意味著視頻每間隔一段時間就會變糊一次。當在引入最小客觀質(zhì)量后,就發(fā)現(xiàn)其中某些算法存在問題,之后對算法進行了優(yōu)化,最終結(jié)果如圖綠色部分所示。
主觀問題的發(fā)現(xiàn)與解決
針對主觀問題的發(fā)現(xiàn),首先要定期進行主觀測試,開發(fā)主觀比較工具,發(fā)現(xiàn)問題,做出總結(jié)報告,對出現(xiàn)問題的Video進行細節(jié)排查。與業(yè)務(wù)協(xié)同搭建灰度測試沙盒,及時上報問題。
點播主觀問題舉例
針對部分細節(jié)編碼丟失的問題,經(jīng)過排查發(fā)現(xiàn),其主要原因是在點播場景中如果對于VBV的限制過高,會導致某些幀的QP過大,產(chǎn)生主觀問題。
在直播場景中,vfr編碼下產(chǎn)生視頻在場景切換后,碼率極低,主觀很差的現(xiàn)象。因為輸入源時間戳連續(xù)兩幀相同(非正常),引發(fā)編碼器分配碼率的bug。
在視頻編輯時,場景切換的I幀與用戶指定的I幀不在同一位置,導致碼率不夠用,產(chǎn)生馬賽克。限制指定I幀附近不自動插入I幀,避免I0和Ik 之間的碼率分配異常。
由于分布式碼率控制時,對片間場景切換后做了調(diào)整,導致場景切換后的部分細節(jié)模糊。針對這個問題,限定分布式碼控的QP調(diào)整區(qū)間不超過場景切換。
3.3 業(yè)務(wù)側(cè)V265編碼播放能力兼容
長期參考幀的軟解、芯片解碼支持
關(guān)于長期參考幀的軟解、芯片解碼的支持,由于部分電視機芯片驅(qū)動層以及部分軟解播放器的支持不完善,因而無法識別長期參考幀對其進行解碼。在FFmpeg中,由于其解碼器能力支持不完善, 當參考幀列表包含poc=X(短期)和poc=X+256(長期)兩幀時,解碼器會認為X與X+256兩幀幀號等同,引發(fā)崩潰。應(yīng)盡量避免X與X+256作為長期參考幀出現(xiàn),對于部分用戶可能會強制關(guān)閉長期參考幀。
CRA I 幀的軟解、芯片播放支持
H.264 為IDR GOP編碼,其中每一個Close GOP的B6、B5、B7幀都只能前向參考,而H.265引入了CRA幀的概念,將B6、B5、B7幀編在CRA幀之后,以實現(xiàn)前向參考與后向參考,提升壓縮效率。通常情況下,按照標準規(guī)定,解碼器在隨機訪問第8幀時,只需要解碼幀號大于8的圖像。但部分解碼器在解碼CRA8之后,繼續(xù)解碼B6、B5、B7幀,導致播放出現(xiàn)花屏。所以在部分業(yè)務(wù)中會強制使用Close GOP編碼。
電視機解碼器不支持多分層B幀
在電視機解碼器中存在部分解碼器認為265碼流為標準碼流,B幀只有一層,不存在多參考B幀。因此如果有多參考B幀,如B6、B5、B7幀出現(xiàn),就無法完成解碼。針對這一情況,可以將V265設(shè)置成只包含一層參考B幀的結(jié)構(gòu),但相對應(yīng)的壓縮率也會有所犧牲。
FFmpeg3.x解碼時Seek到片頭邏輯Bug
FFmpeg 3.x版本存在一個Bug(在FFmpeg4.x版本已經(jīng)修復),即在解碼過程中,如果片頭同時存在間隔較短的兩個I幀,Seek會直接指向第二個I幀,因此需要編碼器在編碼時盡量避免在開始處存在間隔較短的I幀。
SPS中dpb配置的手機、電視播放端兼容性問題
SPS中存在一個dpb的語法,標準規(guī)定是很精簡的,用了多少就可以寫多少,但部分解碼器是按照X265標準設(shè)計,只支持冗余的解碼,不兼容精簡標識方法,導致V265碼流無法播放。V265編碼器使用最大冗余的標識方法,避免出現(xiàn)dpd管理問題。
參考鏈接:
https://cloud.tencent.com/developer/article/1507719
總結(jié)
- 上一篇: 新材料,比钢硬一倍,但重量只有钢1/6
- 下一篇: 绝招消除电脑自动弹出垃圾广告和网页