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 Aaronhtml
譯 / 蔣默邱澤git
原文github
https://netflixtechblog.com/s...服務器
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],旨在促進新開發人員快速上手。ide
英特爾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結果更具競爭力,以下所述。
在2-pass編碼模式下隨時間下降的SVT-AV1和libaom之間的BD-rate(8-bit位深)
下表列出了在Objective-1-FAST[4]測試集上SVT-AV1與libaom的比較結果。爲了估計編碼時間,咱們使用英特爾®至強®鉑金 8170@2.10 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、3二、4三、5五、63。
在固定QP偏移的1-pass編碼模式下,SVT-AV1與libaom的BD速率。負數表示達到相同質量級別所需的碼率下降。與libaom相比,SVT-AV1的整體編碼時間差是全部序列和QPS的總CPU時間的變化
*總體編碼CPU時間差以測試的全部序列和QPS的總CPU時間與錨的CPU總時間相比的變化來計算。它不等於每一個序列值的平均值。對於每一個序列,編碼CPU時間差被計算爲該序列的全部QP的總CPU時間的變化。
因爲Objective-1-FAST測試集中的全部序列都有60幀,所以兩個編解碼器都使用一個關鍵幀。已使用如下命令行參數比較編解碼器。
libaom參數:
--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
SVT-AV1參數:
--preset1--scm2--keyint63--lookahead0--lp1
以上結果證實了SVT-AV1的優良客觀性能。此外SVT-AV1還包括一些主觀質量工具的實現,若是編解碼器配置爲主觀質量則可使用這些工具。
在Objective-1-FAST測試集上,SVT-AV1解碼器在單線程模式下比libaom略快,在4線程模式下有較大的改進。當使用4線程模式解碼具備多塊的碼流時,咱們觀察到比libaom解碼器有更大的速度提高。該測試已在Windows、Linux和MacOS平臺上執行。咱們相信對於研究解碼器來講性能是使人滿意的,其中折衷方案更傾向於更容易的實驗,而不是生產解碼器所需的進一步優化。
爲了幫助確保編解碼器的一致性,特別是對於新的代碼貢獻,全部代碼已經被單元測試和端到端測試全面覆蓋。單元測試構建在Google測試框架之上。對於GitHub操做支持的對代碼庫的每一個拉取請求,都會自動觸發單元測試和端到端測試。這些測試支持分片,而且它們並行運行以加快拉取請求的週轉時間。
此拉入請求的單元和e2e測試經過
在過去的幾個月裏,SVT-AV1已經成爲一個完整成熟的編/解碼器軟件,提供具備競爭力的壓縮效率和性能折衷。該項目獲得了普遍的單元測試覆蓋和文檔的支持。
咱們但願SVT-AV1代碼庫有助於進一步利用AV1,並鼓勵在當前AV1工具的基礎上進行更多的研究和開發。咱們相信SVT-AV1顯示出的優點使其成爲一個很好的實驗和研究平臺。咱們邀請工業界和學術界的同事查看Github上的項目,聯繫代碼庫維護人員詢問問題和意見,或者參加SVT-AV1Open Dev會議[5]。咱們歡迎更多的開發貢獻者參與這個項目。
參考:
[1]https://github.com/OpenVisual...
[2]https://mp.weixin.qq.com/s/7Z...
[3]https://github.com/OpenVisual...