前沿拓展:
顯卡硬件編碼這個概念,各位或多或少應(yīng)該都有所耳聞。最早它指的是用GPU的通用計(jì)算能力來處理視頻編碼這種計(jì)算量龐大的任務(wù)。但隨著硬件的發(fā)展,現(xiàn)在的顯卡硬件編碼已經(jīng)跟十多年前的用CUDA加速編碼不一樣了,現(xiàn)在的顯卡硬件編碼已經(jīng)指的是利用GPU集成的專用硬件單元進(jìn)行編碼**作,因?yàn)槭菍S玫碾娐?,其效率相比起用通用?jì)算來加速要高出不少,目前AMD、Intel和NVIDIA都已經(jīng)在自家的硬件中加入了硬件編碼相關(guān)的單元,但可能大家并不清楚,本文就簡單介紹一下三家的硬件編碼技術(shù)和目前的情況。
NVIDIA NVENC
第一要講的是NVIDIA的NVENC,從變革非常大的Kepler架構(gòu)開始,NVIDIA就在GPU中加入了專門用于編碼視頻的硬件單元,并引入了NVENC功能。NVIDIA在每次推出新架構(gòu)的時候都會更新一下這個單元,加入一些新的特性。從Kepler開始到Turing,NVENC單元已經(jīng)更新了六代之多了,這里羅列幾個比較重要的節(jié)點(diǎn):
· 從第二代Maxwell,也就是GM20x芯片開始,NVENC支持HEVC的硬編碼
· Pascal開始,支持10-bit的HEVC硬編碼
· Turing開始,支持HEVC的B幀,大幅減少碼率開支
不過NVENC的支持情況相當(dāng)復(fù)雜,舉例來說,同樣屬于Pascal家族,高端的GTX 1070/1080就可以同時處理兩條視頻流,而中端的GTX 1060就只支持一條流;再比如說,GTX 1650這款使用小圖靈核心的顯卡的NVENC模塊實(shí)際上是Volta版本的(老黃的刀法可不僅限于GPU的規(guī)模)。對此,NVIDIA官方提供了一個非常詳細(xì)的網(wǎng)站供參考:Video Encode and Decode GPU Support Matrix,如果各位想要搞明白自己顯卡的硬件編碼能力,參照這個網(wǎng)站是肯定沒有問題的。
NVENC只能夠編碼AVC和HEVC,但發(fā)展到現(xiàn)在,它的編碼質(zhì)量已經(jīng)非常優(yōu)秀了,這項(xiàng)功能目前的應(yīng)用還是比較廣的,像NVIDIA自家的GeForce Experience在錄屏的時候就默認(rèn)會調(diào)用NVENC。
另外,我們最近對NVENC在Premiere Pro中的表現(xiàn)進(jìn)行了測試,詳情可以參考這篇文章:NVIDIA NVENC編碼加速器測試。
Intel Quick Sync Video
Intel應(yīng)該是這三家中最早開始搗鼓硬件編碼電路的,早在一代經(jīng)典的Sandy Bridge,也就是第二代酷睿i系列處理器上面,他們就為核顯模塊加入了Quick Sync Video特性,發(fā)展到現(xiàn)在,也是相當(dāng)成熟穩(wěn)定了。相比起NVENC只是一項(xiàng)針對視頻編碼的技術(shù)不同的是,QSV中也包含了對視頻解碼的相關(guān)支持(NV那兒解碼是NVDEC的東西),從Sandy Bridge開始到Kaby Lake為止,QSV會隨著每一代架構(gòu)的演進(jìn)而更新,基本和核顯的代數(shù)是同步的。隨著這幾年Intel在架構(gòu)上的停滯,QSV也沒有太大的更新。不過Ice Lake和Tiger Lake上面它還是有一定程度的進(jìn)步的,比如說Tiger Lake就將要引入針對AV1編碼的硬件解碼能力。
在硬件編碼方面,除了AVC和HEVC這兩個常用的視頻編碼之外,QSV還支持MPEG-2、MJPEG和VP8、VP9的編碼支持。它也是較早被軟件所支持的硬件視頻編解碼技術(shù),比如Adobe Premiere Pro很早就可以利用到它。需要注意的是,要使用QSV,核顯必須處于開啟狀態(tài),也就是說,目前被屏蔽掉核顯的F后綴處理器無法使用它。
AMD Video Core Next
在高清時代剛剛拉開帷幕的時候,AMD或者說,ATI針對硬解高清視頻搞出的UVD技術(shù)可以說是相當(dāng)?shù)捏@艷,不過在編碼方面,他們就落后了一些。
AMD最早在初代GCN架構(gòu)的顯卡中引入了Video Coding Engine技術(shù),初始版本只支持YUV420的AVC編碼,且不支持B幀。從VCE 3.0版本開始支持HEVC的編碼。VCE的最后一個版本是Vega20 GPU中應(yīng)用的VCE 4.1,在基于RDNA架構(gòu)的Navi芯片上面,它被Video Core Next所取代了。
Video Core Next首次出現(xiàn)是在18年發(fā)布的Raven Ridge系列APU上面,它取代掉了原本的VCE和UVD,是一套新的視頻編解碼解決方案。隨后在Navi 1x系列芯片中,集成了VCN 2.0,但特性較1.0沒有變化,Renoir APU上面集成了VCN 2.1,未來的Navi 2x系GPU將集成VCN 3.0。
如何使用硬件編碼技術(shù)?
早幾年軟件廠商并不重視利用硬件編碼技術(shù),不過如今的PC平臺硬件或多或少會支持一種硬件編碼技術(shù),如果沒法利用的話也算是一種浪費(fèi)。像是OBS這個常用的錄屏軟件就支持以上這三項(xiàng)硬件編碼技術(shù),在檢測到系統(tǒng)硬件支持之后會自動在編碼器選項(xiàng)中提供對應(yīng)的選項(xiàng);而像Adobe這樣在軟件優(yōu)化方面不太上心的公司也在Premiere Pro 14.2版本中加入了對NVENC和AMF(A**anced Media Framework,AMD的多媒體處理框架,可調(diào)用硬件編碼)的支持。
如果想單獨(dú)調(diào)用GPU硬件編碼模塊去壓視頻,自己又有一定動手能力的,可以了解一下日本大神rigaya寫的NVEnc、VCEEnc和QSVEnc這三款軟件,現(xiàn)在的FFmpeg中也整合了QSV和NVENC,各大FFmpeg的圖形化前端應(yīng)該也做了相應(yīng)的支持。
順帶一提的是,利用專用單元對視頻進(jìn)行編解碼**作并不是顯卡或者說PC硬件的專利,幾大移動SoC廠商早已在旗下的產(chǎn)品中加入了相關(guān)的單元,像蘋果,從A10開始,就在SoC中集成了HEVC編碼單元,未來給Mac用的自研SoC中肯定也會有相關(guān)的單元。
總的來說,硬件編碼技術(shù)已經(jīng)普及,并可堪一用。
附贈:硬件編碼技術(shù)質(zhì)量如何?
如果在早幾年用過硬件編碼的朋友可能會覺得,硬件編碼的質(zhì)量較差,但實(shí)際上這個觀念放到今天已經(jīng)有點(diǎn)不正確了。NVIDIA在最近幾代的NVENC中著重改良了它的質(zhì)量表現(xiàn)。之前NVIDIA官方已經(jīng)提供了他們的測試,我在業(yè)余用他們的參數(shù)跑了一下 ,并使用Netflix開源的客觀視頻質(zhì)量對比框架vmaf對壓制后的視頻進(jìn)行評價。這里使用的源視頻片段是《你的名字》開場不久后的那段“MV”,源視頻是從藍(lán)光原盤文件中切取獲得。
參數(shù)的話,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,這兩組參數(shù)均參考自官方Blog文章。碼率范圍這邊選擇的比官方文章中的更廣,從2Mbps到20Mbps,2~10Mbps段以1Mbps為間隔,10Mbps以上則以2Mbps為間隔,最終測試得到的碼率-vmaf分?jǐn)?shù)圖線如下:
可以看到,Turin**段在中低碼率段較Pascal有明顯的提升,在這個參數(shù)下,兩個由NVENC編碼得到的片段在絕大部分情況下畫質(zhì)表現(xiàn)均好于libx264的。不過這里需要指出的是,官方采用的編碼參數(shù)對x264是不利的,實(shí)際情況中,壓制組會使用更為復(fù)雜的控制參數(shù)來達(dá)到一個碼率-畫質(zhì)的平衡。不過對于簡單的編碼,NVENC確實(shí)贏了。
拓展知識:
前沿拓展:
顯卡硬件編碼這個概念,各位或多或少應(yīng)該都有所耳聞。最早它指的是用GPU的通用計(jì)算能力來處理視頻編碼這種計(jì)算量龐大的任務(wù)。但隨著硬件的發(fā)展,現(xiàn)在的顯卡硬件編碼已經(jīng)跟十多年前的用CUDA加速編碼不一樣了,現(xiàn)在的顯卡硬件編碼已經(jīng)指的是利用GPU集成的專用硬件單元進(jìn)行編碼**作,因?yàn)槭菍S玫碾娐?,其效率相比起用通用?jì)算來加速要高出不少,目前AMD、Intel和NVIDIA都已經(jīng)在自家的硬件中加入了硬件編碼相關(guān)的單元,但可能大家并不清楚,本文就簡單介紹一下三家的硬件編碼技術(shù)和目前的情況。
NVIDIA NVENC
第一要講的是NVIDIA的NVENC,從變革非常大的Kepler架構(gòu)開始,NVIDIA就在GPU中加入了專門用于編碼視頻的硬件單元,并引入了NVENC功能。NVIDIA在每次推出新架構(gòu)的時候都會更新一下這個單元,加入一些新的特性。從Kepler開始到Turing,NVENC單元已經(jīng)更新了六代之多了,這里羅列幾個比較重要的節(jié)點(diǎn):
· 從第二代Maxwell,也就是GM20x芯片開始,NVENC支持HEVC的硬編碼
· Pascal開始,支持10-bit的HEVC硬編碼
· Turing開始,支持HEVC的B幀,大幅減少碼率開支
不過NVENC的支持情況相當(dāng)復(fù)雜,舉例來說,同樣屬于Pascal家族,高端的GTX 1070/1080就可以同時處理兩條視頻流,而中端的GTX 1060就只支持一條流;再比如說,GTX 1650這款使用小圖靈核心的顯卡的NVENC模塊實(shí)際上是Volta版本的(老黃的刀法可不僅限于GPU的規(guī)模)。對此,NVIDIA官方提供了一個非常詳細(xì)的網(wǎng)站供參考:Video Encode and Decode GPU Support Matrix,如果各位想要搞明白自己顯卡的硬件編碼能力,參照這個網(wǎng)站是肯定沒有問題的。
NVENC只能夠編碼AVC和HEVC,但發(fā)展到現(xiàn)在,它的編碼質(zhì)量已經(jīng)非常優(yōu)秀了,這項(xiàng)功能目前的應(yīng)用還是比較廣的,像NVIDIA自家的GeForce Experience在錄屏的時候就默認(rèn)會調(diào)用NVENC。
另外,我們最近對NVENC在Premiere Pro中的表現(xiàn)進(jìn)行了測試,詳情可以參考這篇文章:NVIDIA NVENC編碼加速器測試。
Intel Quick Sync Video
Intel應(yīng)該是這三家中最早開始搗鼓硬件編碼電路的,早在一代經(jīng)典的Sandy Bridge,也就是第二代酷睿i系列處理器上面,他們就為核顯模塊加入了Quick Sync Video特性,發(fā)展到現(xiàn)在,也是相當(dāng)成熟穩(wěn)定了。相比起NVENC只是一項(xiàng)針對視頻編碼的技術(shù)不同的是,QSV中也包含了對視頻解碼的相關(guān)支持(NV那兒解碼是NVDEC的東西),從Sandy Bridge開始到Kaby Lake為止,QSV會隨著每一代架構(gòu)的演進(jìn)而更新,基本和核顯的代數(shù)是同步的。隨著這幾年Intel在架構(gòu)上的停滯,QSV也沒有太大的更新。不過Ice Lake和Tiger Lake上面它還是有一定程度的進(jìn)步的,比如說Tiger Lake就將要引入針對AV1編碼的硬件解碼能力。
在硬件編碼方面,除了AVC和HEVC這兩個常用的視頻編碼之外,QSV還支持MPEG-2、MJPEG和VP8、VP9的編碼支持。它也是較早被軟件所支持的硬件視頻編解碼技術(shù),比如Adobe Premiere Pro很早就可以利用到它。需要注意的是,要使用QSV,核顯必須處于開啟狀態(tài),也就是說,目前被屏蔽掉核顯的F后綴處理器無法使用它。
AMD Video Core Next
在高清時代剛剛拉開帷幕的時候,AMD或者說,ATI針對硬解高清視頻搞出的UVD技術(shù)可以說是相當(dāng)?shù)捏@艷,不過在編碼方面,他們就落后了一些。
AMD最早在初代GCN架構(gòu)的顯卡中引入了Video Coding Engine技術(shù),初始版本只支持YUV420的AVC編碼,且不支持B幀。從VCE 3.0版本開始支持HEVC的編碼。VCE的最后一個版本是Vega20 GPU中應(yīng)用的VCE 4.1,在基于RDNA架構(gòu)的Navi芯片上面,它被Video Core Next所取代了。
Video Core Next首次出現(xiàn)是在18年發(fā)布的Raven Ridge系列APU上面,它取代掉了原本的VCE和UVD,是一套新的視頻編解碼解決方案。隨后在Navi 1x系列芯片中,集成了VCN 2.0,但特性較1.0沒有變化,Renoir APU上面集成了VCN 2.1,未來的Navi 2x系GPU將集成VCN 3.0。
如何使用硬件編碼技術(shù)?
早幾年軟件廠商并不重視利用硬件編碼技術(shù),不過如今的PC平臺硬件或多或少會支持一種硬件編碼技術(shù),如果沒法利用的話也算是一種浪費(fèi)。像是OBS這個常用的錄屏軟件就支持以上這三項(xiàng)硬件編碼技術(shù),在檢測到系統(tǒng)硬件支持之后會自動在編碼器選項(xiàng)中提供對應(yīng)的選項(xiàng);而像Adobe這樣在軟件優(yōu)化方面不太上心的公司也在Premiere Pro 14.2版本中加入了對NVENC和AMF(A**anced Media Framework,AMD的多媒體處理框架,可調(diào)用硬件編碼)的支持。
如果想單獨(dú)調(diào)用GPU硬件編碼模塊去壓視頻,自己又有一定動手能力的,可以了解一下日本大神rigaya寫的NVEnc、VCEEnc和QSVEnc這三款軟件,現(xiàn)在的FFmpeg中也整合了QSV和NVENC,各大FFmpeg的圖形化前端應(yīng)該也做了相應(yīng)的支持。
順帶一提的是,利用專用單元對視頻進(jìn)行編解碼**作并不是顯卡或者說PC硬件的專利,幾大移動SoC廠商早已在旗下的產(chǎn)品中加入了相關(guān)的單元,像蘋果,從A10開始,就在SoC中集成了HEVC編碼單元,未來給Mac用的自研SoC中肯定也會有相關(guān)的單元。
總的來說,硬件編碼技術(shù)已經(jīng)普及,并可堪一用。
附贈:硬件編碼技術(shù)質(zhì)量如何?
如果在早幾年用過硬件編碼的朋友可能會覺得,硬件編碼的質(zhì)量較差,但實(shí)際上這個觀念放到今天已經(jīng)有點(diǎn)不正確了。NVIDIA在最近幾代的NVENC中著重改良了它的質(zhì)量表現(xiàn)。之前NVIDIA官方已經(jīng)提供了他們的測試,我在業(yè)余用他們的參數(shù)跑了一下 ,并使用Netflix開源的客觀視頻質(zhì)量對比框架vmaf對壓制后的視頻進(jìn)行評價。這里使用的源視頻片段是《你的名字》開場不久后的那段“MV”,源視頻是從藍(lán)光原盤文件中切取獲得。
參數(shù)的話,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,這兩組參數(shù)均參考自官方Blog文章。碼率范圍這邊選擇的比官方文章中的更廣,從2Mbps到20Mbps,2~10Mbps段以1Mbps為間隔,10Mbps以上則以2Mbps為間隔,最終測試得到的碼率-vmaf分?jǐn)?shù)圖線如下:
可以看到,Turin**段在中低碼率段較Pascal有明顯的提升,在這個參數(shù)下,兩個由NVENC編碼得到的片段在絕大部分情況下畫質(zhì)表現(xiàn)均好于libx264的。不過這里需要指出的是,官方采用的編碼參數(shù)對x264是不利的,實(shí)際情況中,壓制組會使用更為復(fù)雜的控制參數(shù)來達(dá)到一個碼率-畫質(zhì)的平衡。不過對于簡單的編碼,NVENC確實(shí)贏了。
拓展知識:
前沿拓展:
顯卡硬件編碼這個概念,各位或多或少應(yīng)該都有所耳聞。最早它指的是用GPU的通用計(jì)算能力來處理視頻編碼這種計(jì)算量龐大的任務(wù)。但隨著硬件的發(fā)展,現(xiàn)在的顯卡硬件編碼已經(jīng)跟十多年前的用CUDA加速編碼不一樣了,現(xiàn)在的顯卡硬件編碼已經(jīng)指的是利用GPU集成的專用硬件單元進(jìn)行編碼**作,因?yàn)槭菍S玫碾娐?,其效率相比起用通用?jì)算來加速要高出不少,目前AMD、Intel和NVIDIA都已經(jīng)在自家的硬件中加入了硬件編碼相關(guān)的單元,但可能大家并不清楚,本文就簡單介紹一下三家的硬件編碼技術(shù)和目前的情況。
NVIDIA NVENC
第一要講的是NVIDIA的NVENC,從變革非常大的Kepler架構(gòu)開始,NVIDIA就在GPU中加入了專門用于編碼視頻的硬件單元,并引入了NVENC功能。NVIDIA在每次推出新架構(gòu)的時候都會更新一下這個單元,加入一些新的特性。從Kepler開始到Turing,NVENC單元已經(jīng)更新了六代之多了,這里羅列幾個比較重要的節(jié)點(diǎn):
· 從第二代Maxwell,也就是GM20x芯片開始,NVENC支持HEVC的硬編碼
· Pascal開始,支持10-bit的HEVC硬編碼
· Turing開始,支持HEVC的B幀,大幅減少碼率開支
不過NVENC的支持情況相當(dāng)復(fù)雜,舉例來說,同樣屬于Pascal家族,高端的GTX 1070/1080就可以同時處理兩條視頻流,而中端的GTX 1060就只支持一條流;再比如說,GTX 1650這款使用小圖靈核心的顯卡的NVENC模塊實(shí)際上是Volta版本的(老黃的刀法可不僅限于GPU的規(guī)模)。對此,NVIDIA官方提供了一個非常詳細(xì)的網(wǎng)站供參考:Video Encode and Decode GPU Support Matrix,如果各位想要搞明白自己顯卡的硬件編碼能力,參照這個網(wǎng)站是肯定沒有問題的。
NVENC只能夠編碼AVC和HEVC,但發(fā)展到現(xiàn)在,它的編碼質(zhì)量已經(jīng)非常優(yōu)秀了,這項(xiàng)功能目前的應(yīng)用還是比較廣的,像NVIDIA自家的GeForce Experience在錄屏的時候就默認(rèn)會調(diào)用NVENC。
另外,我們最近對NVENC在Premiere Pro中的表現(xiàn)進(jìn)行了測試,詳情可以參考這篇文章:NVIDIA NVENC編碼加速器測試。
Intel Quick Sync Video
Intel應(yīng)該是這三家中最早開始搗鼓硬件編碼電路的,早在一代經(jīng)典的Sandy Bridge,也就是第二代酷睿i系列處理器上面,他們就為核顯模塊加入了Quick Sync Video特性,發(fā)展到現(xiàn)在,也是相當(dāng)成熟穩(wěn)定了。相比起NVENC只是一項(xiàng)針對視頻編碼的技術(shù)不同的是,QSV中也包含了對視頻解碼的相關(guān)支持(NV那兒解碼是NVDEC的東西),從Sandy Bridge開始到Kaby Lake為止,QSV會隨著每一代架構(gòu)的演進(jìn)而更新,基本和核顯的代數(shù)是同步的。隨著這幾年Intel在架構(gòu)上的停滯,QSV也沒有太大的更新。不過Ice Lake和Tiger Lake上面它還是有一定程度的進(jìn)步的,比如說Tiger Lake就將要引入針對AV1編碼的硬件解碼能力。
在硬件編碼方面,除了AVC和HEVC這兩個常用的視頻編碼之外,QSV還支持MPEG-2、MJPEG和VP8、VP9的編碼支持。它也是較早被軟件所支持的硬件視頻編解碼技術(shù),比如Adobe Premiere Pro很早就可以利用到它。需要注意的是,要使用QSV,核顯必須處于開啟狀態(tài),也就是說,目前被屏蔽掉核顯的F后綴處理器無法使用它。
AMD Video Core Next
在高清時代剛剛拉開帷幕的時候,AMD或者說,ATI針對硬解高清視頻搞出的UVD技術(shù)可以說是相當(dāng)?shù)捏@艷,不過在編碼方面,他們就落后了一些。
AMD最早在初代GCN架構(gòu)的顯卡中引入了Video Coding Engine技術(shù),初始版本只支持YUV420的AVC編碼,且不支持B幀。從VCE 3.0版本開始支持HEVC的編碼。VCE的最后一個版本是Vega20 GPU中應(yīng)用的VCE 4.1,在基于RDNA架構(gòu)的Navi芯片上面,它被Video Core Next所取代了。
Video Core Next首次出現(xiàn)是在18年發(fā)布的Raven Ridge系列APU上面,它取代掉了原本的VCE和UVD,是一套新的視頻編解碼解決方案。隨后在Navi 1x系列芯片中,集成了VCN 2.0,但特性較1.0沒有變化,Renoir APU上面集成了VCN 2.1,未來的Navi 2x系GPU將集成VCN 3.0。
如何使用硬件編碼技術(shù)?
早幾年軟件廠商并不重視利用硬件編碼技術(shù),不過如今的PC平臺硬件或多或少會支持一種硬件編碼技術(shù),如果沒法利用的話也算是一種浪費(fèi)。像是OBS這個常用的錄屏軟件就支持以上這三項(xiàng)硬件編碼技術(shù),在檢測到系統(tǒng)硬件支持之后會自動在編碼器選項(xiàng)中提供對應(yīng)的選項(xiàng);而像Adobe這樣在軟件優(yōu)化方面不太上心的公司也在Premiere Pro 14.2版本中加入了對NVENC和AMF(A**anced Media Framework,AMD的多媒體處理框架,可調(diào)用硬件編碼)的支持。
如果想單獨(dú)調(diào)用GPU硬件編碼模塊去壓視頻,自己又有一定動手能力的,可以了解一下日本大神rigaya寫的NVEnc、VCEEnc和QSVEnc這三款軟件,現(xiàn)在的FFmpeg中也整合了QSV和NVENC,各大FFmpeg的圖形化前端應(yīng)該也做了相應(yīng)的支持。
順帶一提的是,利用專用單元對視頻進(jìn)行編解碼**作并不是顯卡或者說PC硬件的專利,幾大移動SoC廠商早已在旗下的產(chǎn)品中加入了相關(guān)的單元,像蘋果,從A10開始,就在SoC中集成了HEVC編碼單元,未來給Mac用的自研SoC中肯定也會有相關(guān)的單元。
總的來說,硬件編碼技術(shù)已經(jīng)普及,并可堪一用。
附贈:硬件編碼技術(shù)質(zhì)量如何?
如果在早幾年用過硬件編碼的朋友可能會覺得,硬件編碼的質(zhì)量較差,但實(shí)際上這個觀念放到今天已經(jīng)有點(diǎn)不正確了。NVIDIA在最近幾代的NVENC中著重改良了它的質(zhì)量表現(xiàn)。之前NVIDIA官方已經(jīng)提供了他們的測試,我在業(yè)余用他們的參數(shù)跑了一下 ,并使用Netflix開源的客觀視頻質(zhì)量對比框架vmaf對壓制后的視頻進(jìn)行評價。這里使用的源視頻片段是《你的名字》開場不久后的那段“MV”,源視頻是從藍(lán)光原盤文件中切取獲得。
參數(shù)的話,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,這兩組參數(shù)均參考自官方Blog文章。碼率范圍這邊選擇的比官方文章中的更廣,從2Mbps到20Mbps,2~10Mbps段以1Mbps為間隔,10Mbps以上則以2Mbps為間隔,最終測試得到的碼率-vmaf分?jǐn)?shù)圖線如下:
可以看到,Turin**段在中低碼率段較Pascal有明顯的提升,在這個參數(shù)下,兩個由NVENC編碼得到的片段在絕大部分情況下畫質(zhì)表現(xiàn)均好于libx264的。不過這里需要指出的是,官方采用的編碼參數(shù)對x264是不利的,實(shí)際情況中,壓制組會使用更為復(fù)雜的控制參數(shù)來達(dá)到一個碼率-畫質(zhì)的平衡。不過對于簡單的編碼,NVENC確實(shí)贏了。
拓展知識:
前沿拓展:
顯卡硬件編碼這個概念,各位或多或少應(yīng)該都有所耳聞。最早它指的是用GPU的通用計(jì)算能力來處理視頻編碼這種計(jì)算量龐大的任務(wù)。但隨著硬件的發(fā)展,現(xiàn)在的顯卡硬件編碼已經(jīng)跟十多年前的用CUDA加速編碼不一樣了,現(xiàn)在的顯卡硬件編碼已經(jīng)指的是利用GPU集成的專用硬件單元進(jìn)行編碼**作,因?yàn)槭菍S玫碾娐?,其效率相比起用通用?jì)算來加速要高出不少,目前AMD、Intel和NVIDIA都已經(jīng)在自家的硬件中加入了硬件編碼相關(guān)的單元,但可能大家并不清楚,本文就簡單介紹一下三家的硬件編碼技術(shù)和目前的情況。
NVIDIA NVENC
第一要講的是NVIDIA的NVENC,從變革非常大的Kepler架構(gòu)開始,NVIDIA就在GPU中加入了專門用于編碼視頻的硬件單元,并引入了NVENC功能。NVIDIA在每次推出新架構(gòu)的時候都會更新一下這個單元,加入一些新的特性。從Kepler開始到Turing,NVENC單元已經(jīng)更新了六代之多了,這里羅列幾個比較重要的節(jié)點(diǎn):
· 從第二代Maxwell,也就是GM20x芯片開始,NVENC支持HEVC的硬編碼
· Pascal開始,支持10-bit的HEVC硬編碼
· Turing開始,支持HEVC的B幀,大幅減少碼率開支
不過NVENC的支持情況相當(dāng)復(fù)雜,舉例來說,同樣屬于Pascal家族,高端的GTX 1070/1080就可以同時處理兩條視頻流,而中端的GTX 1060就只支持一條流;再比如說,GTX 1650這款使用小圖靈核心的顯卡的NVENC模塊實(shí)際上是Volta版本的(老黃的刀法可不僅限于GPU的規(guī)模)。對此,NVIDIA官方提供了一個非常詳細(xì)的網(wǎng)站供參考:Video Encode and Decode GPU Support Matrix,如果各位想要搞明白自己顯卡的硬件編碼能力,參照這個網(wǎng)站是肯定沒有問題的。
NVENC只能夠編碼AVC和HEVC,但發(fā)展到現(xiàn)在,它的編碼質(zhì)量已經(jīng)非常優(yōu)秀了,這項(xiàng)功能目前的應(yīng)用還是比較廣的,像NVIDIA自家的GeForce Experience在錄屏的時候就默認(rèn)會調(diào)用NVENC。
另外,我們最近對NVENC在Premiere Pro中的表現(xiàn)進(jìn)行了測試,詳情可以參考這篇文章:NVIDIA NVENC編碼加速器測試。
Intel Quick Sync Video
Intel應(yīng)該是這三家中最早開始搗鼓硬件編碼電路的,早在一代經(jīng)典的Sandy Bridge,也就是第二代酷睿i系列處理器上面,他們就為核顯模塊加入了Quick Sync Video特性,發(fā)展到現(xiàn)在,也是相當(dāng)成熟穩(wěn)定了。相比起NVENC只是一項(xiàng)針對視頻編碼的技術(shù)不同的是,QSV中也包含了對視頻解碼的相關(guān)支持(NV那兒解碼是NVDEC的東西),從Sandy Bridge開始到Kaby Lake為止,QSV會隨著每一代架構(gòu)的演進(jìn)而更新,基本和核顯的代數(shù)是同步的。隨著這幾年Intel在架構(gòu)上的停滯,QSV也沒有太大的更新。不過Ice Lake和Tiger Lake上面它還是有一定程度的進(jìn)步的,比如說Tiger Lake就將要引入針對AV1編碼的硬件解碼能力。
在硬件編碼方面,除了AVC和HEVC這兩個常用的視頻編碼之外,QSV還支持MPEG-2、MJPEG和VP8、VP9的編碼支持。它也是較早被軟件所支持的硬件視頻編解碼技術(shù),比如Adobe Premiere Pro很早就可以利用到它。需要注意的是,要使用QSV,核顯必須處于開啟狀態(tài),也就是說,目前被屏蔽掉核顯的F后綴處理器無法使用它。
AMD Video Core Next
在高清時代剛剛拉開帷幕的時候,AMD或者說,ATI針對硬解高清視頻搞出的UVD技術(shù)可以說是相當(dāng)?shù)捏@艷,不過在編碼方面,他們就落后了一些。
AMD最早在初代GCN架構(gòu)的顯卡中引入了Video Coding Engine技術(shù),初始版本只支持YUV420的AVC編碼,且不支持B幀。從VCE 3.0版本開始支持HEVC的編碼。VCE的最后一個版本是Vega20 GPU中應(yīng)用的VCE 4.1,在基于RDNA架構(gòu)的Navi芯片上面,它被Video Core Next所取代了。
Video Core Next首次出現(xiàn)是在18年發(fā)布的Raven Ridge系列APU上面,它取代掉了原本的VCE和UVD,是一套新的視頻編解碼解決方案。隨后在Navi 1x系列芯片中,集成了VCN 2.0,但特性較1.0沒有變化,Renoir APU上面集成了VCN 2.1,未來的Navi 2x系GPU將集成VCN 3.0。
如何使用硬件編碼技術(shù)?
早幾年軟件廠商并不重視利用硬件編碼技術(shù),不過如今的PC平臺硬件或多或少會支持一種硬件編碼技術(shù),如果沒法利用的話也算是一種浪費(fèi)。像是OBS這個常用的錄屏軟件就支持以上這三項(xiàng)硬件編碼技術(shù),在檢測到系統(tǒng)硬件支持之后會自動在編碼器選項(xiàng)中提供對應(yīng)的選項(xiàng);而像Adobe這樣在軟件優(yōu)化方面不太上心的公司也在Premiere Pro 14.2版本中加入了對NVENC和AMF(A**anced Media Framework,AMD的多媒體處理框架,可調(diào)用硬件編碼)的支持。
如果想單獨(dú)調(diào)用GPU硬件編碼模塊去壓視頻,自己又有一定動手能力的,可以了解一下日本大神rigaya寫的NVEnc、VCEEnc和QSVEnc這三款軟件,現(xiàn)在的FFmpeg中也整合了QSV和NVENC,各大FFmpeg的圖形化前端應(yīng)該也做了相應(yīng)的支持。
順帶一提的是,利用專用單元對視頻進(jìn)行編解碼**作并不是顯卡或者說PC硬件的專利,幾大移動SoC廠商早已在旗下的產(chǎn)品中加入了相關(guān)的單元,像蘋果,從A10開始,就在SoC中集成了HEVC編碼單元,未來給Mac用的自研SoC中肯定也會有相關(guān)的單元。
總的來說,硬件編碼技術(shù)已經(jīng)普及,并可堪一用。
附贈:硬件編碼技術(shù)質(zhì)量如何?
如果在早幾年用過硬件編碼的朋友可能會覺得,硬件編碼的質(zhì)量較差,但實(shí)際上這個觀念放到今天已經(jīng)有點(diǎn)不正確了。NVIDIA在最近幾代的NVENC中著重改良了它的質(zhì)量表現(xiàn)。之前NVIDIA官方已經(jīng)提供了他們的測試,我在業(yè)余用他們的參數(shù)跑了一下 ,并使用Netflix開源的客觀視頻質(zhì)量對比框架vmaf對壓制后的視頻進(jìn)行評價。這里使用的源視頻片段是《你的名字》開場不久后的那段“MV”,源視頻是從藍(lán)光原盤文件中切取獲得。
參數(shù)的話,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,這兩組參數(shù)均參考自官方Blog文章。碼率范圍這邊選擇的比官方文章中的更廣,從2Mbps到20Mbps,2~10Mbps段以1Mbps為間隔,10Mbps以上則以2Mbps為間隔,最終測試得到的碼率-vmaf分?jǐn)?shù)圖線如下:
可以看到,Turin**段在中低碼率段較Pascal有明顯的提升,在這個參數(shù)下,兩個由NVENC編碼得到的片段在絕大部分情況下畫質(zhì)表現(xiàn)均好于libx264的。不過這里需要指出的是,官方采用的編碼參數(shù)對x264是不利的,實(shí)際情況中,壓制組會使用更為復(fù)雜的控制參數(shù)來達(dá)到一個碼率-畫質(zhì)的平衡。不過對于簡單的編碼,NVENC確實(shí)贏了。
拓展知識:
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請注明出處:http:///45788.html