顯卡硬體解碼這概念,各位多少都有聽過。最早它指的是GPU通用計算能力,處理視頻編碼這種計算量龐大的工作。但隨著硬體發展,現在顯卡硬體解碼,跟十幾年前用CUDA加速編碼不一樣了,現在的顯卡硬體解碼指的是用GPU內建單元進行專門解碼影片電路,效率比通用計算的速度高很多,目前AMD、Intel和NVIDIA都在自家硬體中加入了硬體解碼相關的單元,但大家忽略了,簡單介紹一下AMD、Intel和NVIDIA的硬體解碼技術在目前的情況。
NVIDIA NVENC
先要說的是NVIDIA的NVENC,從進步很大的Kepler架構開始,NVIDIA在GPU中加入專門解碼影片的硬體,並引入了NVENC功能。NVIDIA每次出新架構的同時會更新這單元,加入一些新的特性。從Kepler開始到Turing,NVENC單元已經更新了六代之多了,列出幾個比較重要的:
· 從第二代Maxwell,也就是GM20x晶片開始,NVENC支持HEVC的硬體解碼。
· Pascal開始,支持10-bit的HEVC硬體解碼。
· Turing開始,支持HEVC的B幀,大幅減少碼率開支。
不過NVENC的支援情況相當複雜,舉例說同樣屬於Pascal家族,高階GTX 1070、1080可同時處理兩條視頻流,而中階GTX 1060只支援一條視頻流;再比如說GTX 1650這款用小圖靈核心的顯卡的NVENC模組實際上是Volta版本的(老黃的刀法可不僅限於GPU的規模)。對此,NVIDIA官方提供了一個非常詳細的網站供參考:Video Encode and Decode GPU Support Matrix,如果各位想要搞明白自己顯卡的硬體解碼能力,參照這網站就沒問題了。
NVENC只能夠編碼AVC和HEVC,但發展到現在,它的解碼品質已經非常優秀了,這項功能目前的應用還是比較廣的,像NVIDIA自家的GeForce Experience在截取畫面的時就默認會調用NVENC。
Intel Quick Sync Video
Intel是影片硬體解碼電路的始祖,早在一代Sandy Bridge處理器,也是二代Core i系列處理器,他們就為內顯模塊加入了Quick Sync Video ( QSV ) 特性,發展到現在相當成熟。相比起NVENC只針對高清影片硬體解碼技術不同的是,QSV中也包含了對視頻解碼的相關支援(NV那兒解碼是NVDEC的東西),從Sandy Bridge開始到Kaby Lake為止,QSV隨每代架構演進和內顯同步更新。隨著這幾年Intel在架構上的停滯,QSV也沒太大更新。不過Ice Lake和Tiger Lake上面它還是有一定程度的進步,比如說Tiger Lake就將要引入針對AV1編碼的硬體解碼能力。
在硬體編碼方面,除了AVC和HEVC這兩個常用的視頻編碼之外,QSV還支持MPEG-2、MJPEG和VP8、VP9的編碼支援。它也是較早被軟體所支援的硬體視頻編解碼技術,比如Adobe Premiere Pro很早就可以利用到它。需要注意的是,要使用QSV,內顯須處於開啟狀態,也就是說目前被屏蔽掉內顯的處理器字尾F無法用它。
AMD Video Core Next
在高清時代剛開始的時候,AMD或者說ATI針對硬解高清視頻做出的UVD技術可以說是相當的驚艷,不過在編碼方面,他們就落後了一些。
AMD在初代GCN架構的顯卡中引入了Video Coding Engine技術,初始版本只支援YUV420的AVC編碼,且不支持B幀。從VCE 3.0版本開始支援HEVC的編碼。VCE的最後一個版本是Vega20 GPU中應用的VCE 4.1,在基於RDNA架構的Navi晶片上面,它被Video Core Next所取代了。
Video Core Next首次出現是在18年發布的Raven Ridge系列APU上面,它取代掉了原本的VCE和UVD,是一套新的視頻編解碼解決方案。隨後在Navi 1x系列晶片中,集成了VCN 2.0,但特性較1.0沒有變化,Renoir APU上內建VCN 2.1,未來的Navi 2x系GPU將內建VCN 3.0。
如何使用硬體編碼技術?
以前軟體商不重視利用硬體編碼技術,如今PC平台硬體多少會支援一種硬體編碼技術,如果沒利用也是浪費。像OBS這個常用的錄螢幕畫面軟體就支援以上這三項硬體編碼技術,在檢測到系統硬體支援之後會自動在編碼器選項中提供對應的選項;而像Adobe這樣在軟體優化方面不太上心的公司也在Premiere Pro 14.2版本中加入了對NVENC和AMF(Advanced Media Framework,AMD的多媒體處理框架,可調用硬體編碼)的支援。
如果想單獨調用GPU硬體編碼模組去壓視頻,自己又有一定動手能力的,可以了解一下日本大神rigaya寫的NVEnc、VCEEnc和QSVEnc這三款軟體,現在的FFmpeg中也整合了QSV和NVENC,各大FFmpeg的圖形化前端應該也做了相應的支援。
順帶一提的是,利用專用單元對視頻進行編解碼操作並不是顯卡或者說PC硬體的專利,一些行動SoC廠早已在旗下產品中加入了相關單元,像蘋果從A10開始就在SoC中內建了HEVC編碼單元,未來給Mac用的自研SoC中肯定也會有相關的單元。
總結來說:硬體編碼技術已普及很好用了,但硬體編碼技術品質如何?
如果在以前用硬體編碼的朋友可能會覺得,硬體編碼的品質較差,事實上這觀念放在今天已經有點不正確了。NVIDIA在最近幾代的NVENC中著重改良了它的品質表現。之前NVIDIA官方已經提供了他們的測試,我用他們的參數跑了一下Netflix開源的客觀視頻品質對比框架vmaf對壓製後的視頻進行評估。這裡用的來源視頻片段是《你的名字》開場不久後的那段MV是從藍光原盤文檔中獲得。
參數的話,NVENC組使用的是-c:v h264_nvenc -preset medium -b:v BITRATE -bufsize BITRATE*2 -profile:v high -bf 3 -b_ref_mode 2 -rc-lookahead 20,libx264組使用的是-c:v libx264 -preset medium -b:v BITRATE -bufsize BITRATE*2 -profile:v high,這兩組參數均參考自官方Blog文章。碼率範圍這邊選擇的比官方文章中的更廣,從2Mbps到20Mbps,2~10Mbps段以1Mbps為間隔,10Mbps以上則以2Mbps為間隔,最終測試得到的碼率-vmaf分數圖線如下:
可以看到,Turing片段在中低碼率段較Pascal有明顯的提升,在這個參數下,兩個由NVENC編碼得到的片段在絕大部分情況下畫質表現均好於libx264的。不過這裡需要指出的是,官方採用的編碼參數對x264是不利的,實際情況中,壓製組會使用更為複雜的控制參數來達到一個碼率-畫質的平衡。不過對於簡單的編碼,NVENC確實贏了。
來源
謝謝收看
留言列表