正文字數:4964 閱讀時長:7分鐘
在這篇博客文章中,我們介紹了一種新的基於計算視頻多方法評估融合(VMAF)百分位數的視覺質量評估方法。
作者 / Adeel Abbas
在Twitter上,我們希望通過即時加載的、不會意外停止且始終看起來清晰的視頻為客戶提供一個令人愉悅的視頻體驗。在這篇博客文章中,我們介紹了一種新的基於計算視頻多方法評估融合(VMAF)百分位數的視覺質量評估方法。使用VMAF百分位數,我們可以推斷出編碼技術如何在某些複雜的幀上執行的情況,並允許我們首先專注於提高它們的質量。此外,VMAF百分位數對於非視頻工程師來說更易懂,並且可以提供對於編碼算法對視頻質量影響的另一種理解。
每天,成千上萬的人來到Twitter觀看和了解正在發生的事情,並對塑造我們時代的事件有新的認識和新的視角。大量廣告商依靠我們來傳達他們的信息,這有助於他們發展業務。視頻是這種體驗的核心部分。我們希望通過讓觀看視頻變得無縫和愉快的方式來實現公眾對話。為此,我們在各種設備和平臺之間包括質量、響應能力、互操作性之間取得適當的平衡來達到這一目標。還有其他需要重要考慮的因素,例如,可以隨時在世界的任何地方可靠地提供視頻服務,並確保我們滿足客戶的隱私期望和要求。
最近幾個月,Twitter上的視頻消費量出現了前所未有的增長。再加上行動裝置每年再更新出有著越來越大、更好的屏幕的這一事實,這些都清楚表明,對視頻壓縮技術的投資對於我們的長期戰略來說至關重要。諸如HEVC,AV1和VVC之類的下一代編解碼器已展示出比H.264令人印象深刻的編碼效率改進。我們認為,對於編解碼器而言,在編碼效率和計算複雜度之間取得平衡是很重要的,這樣才能實現硬體解碼能力。這樣可以節省電池壽命,並允許CPU執行其他重要任務。考慮到所有可用的編碼選項和折衷之後,投資一種可靠的視頻質量評估方法變得尤為重要,該方法可幫助我們快速做出決策並且在理解上的障礙是很小的。
為此,峰值信噪比(PSNR)仍然是視頻編解碼器標準化的事實上的行業標準。但是,視頻編碼行業的研究人員非常清楚其局限性。例如,它沒有考慮壓縮偽像的時間特性,也沒有考慮到存在攝像機噪聲的情況下,PSNR的提高與主觀質量無關的事實。
VMAF是由Netflix,南加州大學和德克薩斯大學奧斯汀分校聯合開發的目標(objective)度量標準。VMAF始終顯示出比PSNR或任何其他客觀指標更接近人類視覺感知的數值。它是使用機器學習模型融合的幾個時空度量的組合。VMAF分數更容易理解,因為它在0到100的線性範圍內運行,而PSNR是對數的。它考慮了縮放和壓縮偽像,此外,還具有針對移動視頻消費進行訓練的模型。
作為移動優先平臺,Twitter十分關注向小屏幕大規模提供高質量視頻的問題。在我們之前的博客文章中,我們介紹了一種新的目標視覺質量評估方法,稱為自適應配對比較。自適應配對比較是為移動視頻消費量而設計的,並且比行業標準的「平均意見得分」和「雙刺激MOS」更可靠地測量視覺質量。作為下一步,此博客介紹了一種目標的視頻質量評估方法,該方法可以計算序列中所有幀的VMAF分數的百分位數。該方法非常適合移動視頻消費,我們使用它來優化實時編碼階梯。我們認為它是比Bjontegaard Delta(BD)速率方法的一種有價值的替代方法。
客戶端使用自適應比特率流傳輸算法來選擇可最大程度提高視頻質量的變體,同時避免回放重新緩衝的變體。但是,我們還希望在自適應比特率算法選擇的任何比特率下最大化感知質量。編碼器的速率控制旨在保持所有幀的質量一致,在可能的時候節省比特,並在需要時限制比特率。如果我們不限制比特率,幾乎所有幀都將獲得近乎完美的VMAF分數。當我們限制比特率時,視頻質量下降尤其明顯。
如在VMAF GitHub上討論的那樣,通過在整個序列上求平均值來匯總幀的VMAF分數可能會隱藏難以編碼的幀的影響(如果這些幀不經常出現)。合併幀的最佳方法是一個未解決的問題。例如,VMAF工具已經可以匯總諧波平均值並輸出一個百分位數。在此博客的上下文中,在計算了序列的所有幀的VMAF分數之後,我們計算了第1個,第5個,第10個,第25個和第50個百分位數。根據定義,第5個百分位數給了我們最差的5%幀的VMAF分數,而第50個百分位數是中值。這裡的直覺是,我們不是平等地衡量所有的幀並得到一個分數,我們根據它們的複雜程度對幀進行排名,然後看看一個特定的編碼器設置如何在這些不同的排名中執行。我們想按照幀的VMAF分數從最低到最高的順序優先提高幀的質量。擁有高VMAF分數的框架看起來已經很不錯了,因此改善它們的質量也不太重要了。
實驗設置:測試管道
我們從xiphd網站上選擇了4個時長1分鐘的1080p/60fps視頻片段。測試管道如下圖所示:
測試管道設置
為了提供以自適應比特率格式來傳輸視頻文件,將攝取的輸入視頻分為多個小段。此過程稱為分段\分割。分段使玩家能夠隨著網絡條件的變化而優雅地更改比特率和解析度。輸入是一個RTMP攝取,該攝取被細分為幾個三秒的傳輸流片段。下採樣過程中會將視頻從輸入轉換為目標變體解析度,例如從1080p轉換為720p。最後,我們將縮小後的視頻饋送到x264編碼器中。並使用以下FFmpeg命令執行下採樣和編碼:
上面的命令使用默認的雙三次算法將源採樣為720p解析度。然後該命令通過使用x264進行編碼,並通過默認CRF值為23的恆定速率因子(CRF)速率控制來進行編碼。CRF是實時流的一個很好的實用設置,因為它可以在前瞻性有限下的幀窗口上工作,不需要中間文件,並在內容很方便時保存位(例如,靜態幀)。
如果內容難以編碼,則我們不能讓編碼器花費無限的比特數。因此,我們需要通過設置vbv-maxrate和vbv-bufsize參數來限制數據速率。在這方面,只要我們達到數據速率上限,就會發生視覺質量損失。這通常是因為內容很困難,並且編碼器面臨著將比特率控制在預算範圍內的挑戰。
tune psnr參數禁用了x264中的心理視覺優化。這是因為儘管這些優化可改善感知質量,但它們會增加源視頻和壓縮視頻之間的差異,從而降低PSNR(和VMAF)得分。
為了根據原始輸入來測量VMAF分數,必須對編碼視頻進行解碼,上採樣和組合裝配在一起。最後,針對每個視頻幀,針對攝取的輸入流計算組合視頻的VMAF。如前所述,我們對為手機觀看量身定製的VMAF訓練模型感興趣,也就是說,即是觀看距離超過視頻高度的3倍時。
實驗設置:VMAF百分位圖
當我們對上面提到的四個序列運行x264時,計算平均百分位數並繪製它們,我們得到一個VMAF Centile圖(VMAF- cp),看起來像這樣:
VMAF centiles為x264medium預設
乍一看,VMAF-CP看起來類似於標準開發中廣泛使用的速率失真圖。這是因為隨著VMAF百分數沿x軸增加,分數也會單調增加。但是,這兩者之間存在著明顯的區別。通常,速率失真圖是通過在恆定的量化參數設置下運行四個或更多個編碼,測量所有幀的PSNR或VMAF並將平均值用作質量度量來獲得的。在此設置中,速率控制通常是關閉的。這對於開發編碼工具的標準開發是有意義的,但是,我們的首選是使用我們在生產中使用的CRF速率控制算法來評估視覺質量。
對於上面顯示的數據,所有幀的平均VMAF為97.7(100是可達到的最高得分)。因此,使用序列幀的平均VMAF作為視頻質量指標會使我們誤以為總體視頻質量非常好。但是,如果我們看一下第1個,第5個和第10個百分點,我們可以看到有機會提高性能最差的幀的質量。
例子:選擇x264預設
舉例來說,假設我們要為轉碼堆棧選擇一個x264預設。x264中的預設對編碼工具進行了分類,以便人們可以選擇編碼器速度以達到一定的壓縮質量。在上面的FFmpeg命令中,我們沒有指定預設,因此使用了默認medium的預設。接下來,我們將使用非常快,更快,快,中等,慢和慢的預設值對x264進行編碼,並在下圖中繪製VMAF百分位數:
VMAF centiles為x264預設
不出所料,「very fast」預設產生的質量最低,並且從「very fast「到「faster「的質量跳變最陡。隨著我們從faster轉向fast,質量仍然有不錯的提升。fast和medium的預設達到相似的質量,因為曲線彼此非常接近。slow和slower預設可進一步提高質量。另一方面,如果僅查看平均VMAF得分(如下所示),則很難評估不同預設對質量的影響,因為數字幾乎相同。
為了大規模運行滿足實際約束的編碼,我們必須注意每次編碼所花費的CPU。我們的目標是在給定的CPU預算下達到最高的視覺質量,而不要花費大量的時間在編碼工具上,而這些編碼工具不會以有效的方式促進這種改進。在下表中,我們列出了相對於具有3.1GHz Quad Core i7 CPU的計算機上的``very fast」'預設的每個預設所花費的CPU時間。編碼x264中等預設需要大約13%的計算量,並且質量改進是不合理的(最後兩行顯示相對於左列的預設,每個預設的VMAF分別增加了10%和25%)。因此,在這種情況下,fast預設是首選設置。
下面是一個示例幀,顯示grand_theft_auto序列的veryfast(左)和fast(右)預置的視覺質量:
very fast(左)和fast(右)預置之間的質量差異
通過這個小例子,我們希望說明VMAF-CP plot是一種魯棒方法,可以調優編解碼器參數,以獲得移動視頻消費所需的視覺質量。
例子:編碼ladder
設計編碼梯形圖的一種方法是使用``凸優化(CHO)'',由此我們可以為每個不同的解析度繪製速率失真曲線,並選擇使速率保持在速率失真曲線包絡線上的比特率。CHO是一種經過充分研究的技術,但它通常依賴於在序列幀上平均的速率失真曲線的繪製。當CHO與CRF速率控制一起使用時,對序列幀上的PSNR或VMAF分數求平均值會產生錯誤,因為大多數幀的質量通常比較低百分位數高得多。假設可以在CRF模式下掃描速率失真曲線,但是我們的實驗表明,在實際速率點下,序列序列中的平均VMAF得分無法區分質量改進。
VMAF百分位數可以在這裡提供幫助。僅需五種編碼,我們就可以快速了解現有梯子ladder在視覺質量方面的表現。讓我們以前面部分中的720p at 2.5Mbps變體為例,選擇快速預設,因為它看起來是一個合理的折衷點,並假設其他變體如下:
該梯子的VMAF-CP如下圖所示:
full ladder的VMAF曲線圖
在上面的圖中,隨著ladder的上升,我們可以看到質量會有規律的跳躍。這是可取的,因為我們希望看到每個變體的質量都有有意義的提高。我們不希望看到變體曲線彼此接近,因為這表明表現不佳的變體。我們的最高變體在第25個百分點中獲得98+ VMAF得分。這表示如果視頻播放器能夠升級到此變體,則對於75%的幀來說,該視頻的視覺質量幾乎完美。為了簡潔起見,我們選擇使用快速預設對這些變體進行編碼,儘管只有少量的附加編碼,但您可以為每個變體選擇最佳的預設。進一步的可能性可能是嘗試其他CRF值,圖片結構組或其他x264設置。
我們還可以使用上述方法為更高的幀速率變體設計比特率。例如,假設我們要以720p / 30fps變體的視覺質量在上述ladder中提供720p / 60fps變體。由於編碼器編碼的幀數是原來的兩倍,因此如果我們在與720p / 30fps相同的比特率約束下提供720p / 60fps變體,則視覺質量將不如30fps。為了確定增加多少比特率以達到與720p / 30fps變體相似的質量,讓我們進行一個實驗,以以下比特率對720p / 60fps變體進行編碼,並測量每個數據點的VMAF百分位數:
在下面的圖中,我們繪製了以上四個率點的VMAF百分位數,並與我們之前選擇的720p/30fps變體進行比較。我們可以看到,為了滿足30fps版本的質量,720p/60fps版本的比特率需要提高到大約3.6Mbps。否則,60fps變種可能遭受壓縮偽影比30fps變種更多。
不同設置下的VMAF曲線圖為720p60,而不是720p30
總結和未來展望
由於開原始碼社區的存在,VMAFu作為一種視覺質量指標,它比PSNR更接近人類視覺的感知並且正在不斷提高。它最初是根據廣播質量的內容用例設計的,並且可以與諸如BD-rate和Convex Hull Optimization之類的現有速率失真優化技術配合使用。VMAF百分位數通過提供有關編碼技術在某些最差幀上的性能表現的數據,而不僅僅是在所有幀上求平均值,從而使我們能夠做出更好,更快速的與壓縮效率的決策。而且,對於非視頻工程師而言,該計算更容易理解。該計算僅涉及計算所有幀的VMAF分數,計算百分位數,並從最低到最高繪製或制表。
確定VMAF百分位數與人類視覺的相關性還需要做更多的工作。在這方面,我們可以測量VMAF百分位數與平均意見得分之間的關係,並與現有技術進行比較,例如使用平均值進行速率失真優化。這篇博客的重點是調整優化x264編碼器,但是,我們也可以比較下一代的編解碼器。這可能會為它們在實際應用中的性能提供新的視角。
LiveVideoStackCon 2020 SFO(線上峰會)
無需漂洋過海,我們在線上等您!
LiveVideoStackCon 2020 美國舊金山站
北京時間:2020年12月11日-12月13日