SVT-AV1:開源編解碼最新進展

SVT-AV1:開源編解碼最新進展

SVT-AV1是開源的AV1編解碼器實現,託管在GitHub上[1]。如我們先前的文章所述[2],英特爾和Netflix自2018年8月以來一直在就SVT-AV1編解碼器框架進行合作。團隊一直密切合作進行SVT-AV1的開發、交流架構決策;實施新工具並改善壓縮效率。自從項目開源後更多技術合作夥伴和開源社區為SVT-AV1做出非常多的貢獻。此篇技術博客中,我們將繼續報告SVT-AV1項目的當前狀態以及編解碼器的特性與性能。

文/ Andrey Norkin, Joel Sole, Mariana Afonso,Kyle Swanson, Agata Opalach, Anush Moorthy, Anne Aaron

譯 / 蔣默邱澤

原文

https://netflixtechblog.com/svt-av1-an-open-source-av1-encoder-and-decoder-ad295d9b5ca2

SVT-AV1代碼庫狀態

SVT-AV1代碼庫包括一個AV1編碼和解碼器,它們共享大量的代碼。SVT-AV1解碼器功能齊全,並符合所有三個配置文件(Main,High& Professional)的AV1規範。

SVT-AV1編碼器支持所有對壓縮效率有助力的AV1工具。與最新的libaom主版本(AV1參考軟件)相比,SVT-AV1在壓縮效率方面相近,同時在多核平臺上使用其特有的並行化處理功能時編碼延遲顯著降低。

SVT-AV1中的代碼超過90%是用C語言寫的,可跨平臺進行編譯。除了允許進行更靈活實驗的純C函數實現之外,編解碼器大量採用了彙編以及針對x86平臺的intrinsic優化。瞭解SVT-AV1的主要功能特性,請關注下一部分。這些功能使得SVT-AV1可以在高壓縮效率競爭力的條件下具有更高的性能。SVT-AV1還包括大量有關編碼器設計的文檔[3],旨在促進新開發人員快速上手。

結構特點

英特爾SVT-AV1開發的目標之一是創建一種具有高性能和可擴展性的AV1編解碼器。

SVT-AV1在編碼過程的多個階段實現並行化,這使得它能夠適應可用內核的數量,包括具有大量內核線程數量的最新服務器。這使得SVT-AV1可以在有效縮短編碼時間的同時仍保持現有壓縮率。

SVT-AV1編碼器使用多維度(基於線程,幀/塊和基於片段)並行、多階段劃分決策、基於塊的多階段和多類別決策以及RD優化分類,以在壓縮和性能之間實現有吸引力的折衷。SVT體系結構的另一個特徵是開環分層運動估計,這使得運動估計的第一階段與編碼其餘部分解耦過程成為可能。

壓縮率和性能

編碼性能

SVT-AV1在慢速設置下達到與libaom相似的壓縮效率。在編解碼開發過程中,我們一直在跟蹤https://videocodectracker.dev/站點的壓縮和編碼結果。下圖顯示了隨著時間的推移,SVT-AV1與libaom編碼器相比在壓縮效率方面的改進。請注意,隨著時間的推移,libaom壓縮也在不斷迭代,下面的圖表顯示SVT-AV1趕上了移動的目標。在該圖中,Y軸顯示了根據三個度量實現與libaom編碼器類似的質量所需的額外碼率(以%表示)。該圖顯示了兩種編解碼器中2-pass編碼模式的結果。SVT-AV1使用4線程模式,而libaom運行在單線程模式。研究中常用的1-pass固定QP編碼模式的SVT-AV1結果更具競爭力,如下所述。

SVT-AV1:開源編解碼最新進展

在2-pass編碼模式下隨時間降低的SVT-AV1和libaom之間的BD-rate(8-bit位深)

下表列出了在Objective-1-FAST[4]測試集上SVT-AV1與libaom的比較結果。為了估計編碼時間,我們使用英特爾®至強®鉑金 [email protected] GHz芯片(具有26核52線程核心和96 GB 內存)處理並行編碼(這裡沒有采用Intel&AMD最新同級芯片處理數據可能會有另一番驚喜)。兩個編解碼器都使用16個畫面的雙向分層預測結構。給出了具有固定幀級QP偏移量的單程模式的結果。使用單線程壓縮模式。如下我們計算各種質量度量的BD-rate:YUV分量的PSNR、VMAF和MS-SSIM。負的BD-rate表示SVT-AV1編碼相同的質量時所需的比特率相對較低。如下所示,與libaom相比,SVT-AV1的編碼時間減少了16.5%,同時壓縮能力略有提高。請注意!編碼時間比率可能因平臺支持的指令集而異。針對libaom主分支(Git Hash Fe72512),在SVT-AV1CS2分支(當前正在併入主分支git hash 3a19f29的開發分支)上獲得了結果。用於計算BD-Rate的QP值為:20、32、43、55、63。

SVT-AV1:開源編解碼最新進展

在固定QP偏移的1-pass編碼模式下,SVT-AV1與libaom的BD速率。負數表示達到相同質量級別所需的碼率降低。與libaom相比,SVT-AV1的總體編碼時間差是所有序列和QPS的總CPU時間的變化

*整體編碼CPU時間差以測試的所有序列和QPS的總CPU時間與錨的CPU總時間相比的變化來計算。它不等於每個序列值的平均值。對於每個序列,編碼CPU時間差被計算為該序列的所有QP的總CPU時間的變化。

由於Objective-1-FAST測試集中的所有序列都有60幀,因此兩個編解碼器都使用一個關鍵幀。已使用以下命令行參數比較編解碼器。

libaom參數:

<code>--passes=1 --lag-in-frames=25 --auto-alt-ref=1 --min-gf-interval=16 - -max-gf-interval=16 --gf-min-pyr-height=4 --gf-max-pyr-height=4 --kf- min-dist=65 --kf-max-dist=65 --end-usage=q --use-fixed-qp-offsets=1 - -deltaq-mode=0 --enable-tpl-model=0 --cpu-used=0/<code>

SVT-AV1參數:

<code>--preset1--scm2--keyint63--lookahead0--lp1/<code>

以上結果證明了SVT-AV1的優良客觀性能。此外SVT-AV1還包括一些主觀質量工具的實現,如果編解碼器配置為主觀質量則可以使用這些工具。

解碼性能

在Objective-1-FAST測試集上,SVT-AV1解碼器在單線程模式下比libaom略快,在4線程模式下有較大的改進。當使用4線程模式解碼具有多塊的碼流時,我們觀察到比libaom解碼器有更大的速度提升。該測試已在Windows、Linux和MacOS平臺上執行。我們相信對於研究解碼器來說性能是令人滿意的,其中折衷方案更傾向於更容易的實驗,而不是生產解碼器所需的進一步優化。

測試框架

為了幫助確保編解碼器的一致性,特別是對於新的代碼貢獻,所有代碼已經被單元測試和端到端測試全面覆蓋。單元測試構建在Google測試框架之上。對於GitHub操作支持的對代碼庫的每個拉取請求,都會自動觸發單元測試和端到端測試。這些測試支持分片,並且它們並行運行以加快拉取請求的週轉時間。

SVT-AV1:開源編解碼最新進展

此拉入請求的單元和e2e測試通過

NEXT 未來

在過去的幾個月裡,SVT-AV1已經成為一個完整成熟的編/解碼器軟件,提供具有競爭力的壓縮效率和性能折衷。該項目得到了廣泛的單元測試覆蓋和文檔的支持。

我們希望SVT-AV1代碼庫有助於進一步利用AV1,並鼓勵在當前AV1工具的基礎上進行更多的研究和開發。我們相信SVT-AV1顯示出的優勢使其成為一個很好的實驗和研究平臺。我們邀請工業界和學術界的同事查看Github上的項目,聯繫代碼庫維護人員詢問問題和意見,或者參加SVT-AV1Open Dev會議[5]。我們歡迎更多的開發貢獻者參與這個項目。


參考:

[1]https://github.com/OpenVisualCloud/SVT-AV1/

[2]https://mp.weixin.qq.com/s/7ZmYrWJH6JrgOSnd0j0w8A

[3]https://github.com/OpenVisualCloud/SVT-AV1/tree/master/Docs

[4]https://tools.ietf.org/html/draft-ietf-netvc-testing-09#section-5.2.5

[5]https://github.com/OpenVisualCloud/SVT-AV1/issues/1134


分享到:


相關文章: