0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FFmpeg的硬件加速轉(zhuǎn)碼

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-28 15:03 ? 次閱讀

所有從 Kepler 一代開始的 NVIDIA GPUs 都支持完全加速的硬件視頻編碼,而從費(fèi)米一代開始的所有 GPUs 都支持完全加速的硬件視頻解碼。截至 2019 年 7 月,Kepler、Maxwell、Pascal、Volta 和 Turing 一代 GPUs 支持硬件編碼,F(xiàn)ermi、Kepler、Maxwell、Pascal、Volta 和 Turing 一代 GPUs 支持硬件解碼。

高質(zhì)量視頻應(yīng)用的處理需求對(duì)廣播和電信網(wǎng)絡(luò)提出了限制。消費(fèi)者行為已經(jīng)發(fā)生了變化,這在 OTT 視頻訂閱和實(shí)時(shí)流媒體迅速普及的趨勢(shì)中表現(xiàn)得很明顯?,F(xiàn)在所有的社交媒體應(yīng)用程序都在各自的平臺(tái)上加入了這一功能。隨著消費(fèi)者從觀看點(diǎn)播視頻轉(zhuǎn)向觀看直播視頻,直播將推動(dòng)手機(jī)Wi-Fi 的整體視頻數(shù)據(jù)流量增長(zhǎng)。

分發(fā)給觀眾的視頻內(nèi)容通常被轉(zhuǎn)換成幾個(gè)自適應(yīng)比特率( ABR )配置文件以進(jìn)行傳輸。生產(chǎn)中的內(nèi)容可能以大量編解碼器格式之一到達(dá),這些格式需要轉(zhuǎn)換為另一種格式以供分發(fā)或存檔。

這使得視頻轉(zhuǎn)碼成為高效視頻管道中的一個(gè)關(guān)鍵部分——無(wú)論是 1 : N 還是 M : N 配置文件。理想的轉(zhuǎn)碼解決方案需要在成本(美元/流)和能效(瓦特/流)方面具有成本效益,同時(shí)為數(shù)據(jù)中心提供具有最大吞吐量的高質(zhì)量?jī)?nèi)容。視頻提供商希望降低向更多屏幕提供更多高質(zhì)量?jī)?nèi)容的成本。

在各個(gè)方面生成的大量視頻內(nèi)容需要對(duì)視頻編碼、解碼和轉(zhuǎn)碼進(jìn)行健壯的硬件加速。讓我們看看 NVIDIA GPUs 是如何整合專用視頻處理硬件的,以及如何利用它。

NVIDIA 編解碼硬件

NVIDIA GPUs 船上配備了片上硬件編碼器和解碼器單元,通常稱為 NVENC 和 NVDEC 。與 CUDA 核心分開, NVENC / NVDEC 運(yùn)行編碼或解碼工作負(fù)載,而不會(huì)減慢同時(shí)運(yùn)行的圖形或 CUDA 工作負(fù)載的執(zhí)行。

NVENC 和 NVDEC 支持許多重要的編解碼編解碼器。 NVIDIA 。最新的支持矩陣可以在 GPU 上找到。

poYBAGJqPDyANJ-RAAFxnPBG7l8839.png

圖 1 : GPU 硬件功能

基于 FFmpeg 的硬件加速轉(zhuǎn)碼

在對(duì)視頻數(shù)據(jù)進(jìn)行轉(zhuǎn)碼時(shí),通常使用 FFmpeg 庫(kù) 。硬件加速極大地提高了工作流的性能。圖 2 顯示了 FFmpeg 轉(zhuǎn)換過程的不同元素。

poYBAGJqPD6AVMdOAABAeoOajMk422.png

圖片 2 :使用 NVIDIA 硬件加速的 FFmpeg 流水線轉(zhuǎn)碼

FFmpeg 通過 h264_cuvid 、 hevc_cuvid 和 h264_nvenc 、 hevc_nvenc 模塊支持硬件加速解碼和編碼。從源代碼構(gòu)建時(shí)激活對(duì)硬件加速的支持需要一些額外的步驟:

克隆 FFmpeg git 存儲(chǔ)庫(kù) https://git.ffmpeg.org/ffmpeg.git

從 NVIDIA 網(wǎng)站 下載并安裝兼容的驅(qū)動(dòng)程序

下載并安裝 CUDA 工具箱

克隆 nv-codec-headers 存儲(chǔ)庫(kù) 并僅使用此存儲(chǔ)庫(kù)作為頭進(jìn)行安裝: make install

使用以下命令配置 FFmpeg (使用正確的 CUDA 庫(kù)路徑):

./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
  • 使用多個(gè)進(jìn)程進(jìn)行構(gòu)建,以提高構(gòu)建速度并抑制過度輸出:make -j-s

使用 FFmpeg 進(jìn)行軟件 1 : 1 轉(zhuǎn)碼非常簡(jiǎn)單:

ffmpeg -i input.mp4 -c:a copy -c:v h264 -b:v 5M output.mp4

但這將是緩慢的,因?yàn)樗皇褂没?CPU 的軟件編碼器和解碼器。使用硬件編碼器 NVENC 和解碼器 NVDEC 需要添加更多參數(shù)來告訴 ffmpeg 使用哪個(gè)編碼器和解碼器。最大化轉(zhuǎn)碼速度還意味著確保解碼后的圖像保存在 GPU 存儲(chǔ)器中,以便編碼器能夠有效地訪問它。

ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4

如果沒有 -hwaccel-cuvid 選項(xiàng),解碼后的原始幀將通過 PCIe 總線復(fù)制回系統(tǒng)內(nèi)存,如圖 3 所示。稍后,相同的圖像將通過 PCIe 復(fù)制回 GPU 內(nèi)存,以便在 GPU 上進(jìn)行編碼。這兩個(gè)額外的傳輸由于傳輸時(shí)間而造成延遲,并將增加 PCIe 帶寬占用。

圖3 :沒有 hAccel 的內(nèi)存流(& M )

添加 -hwaccel-cuvid 選項(xiàng)意味著原始解碼幀將不會(huì)被復(fù)制,轉(zhuǎn)碼將更快、使用更少的系統(tǒng)資源,如圖 4 所示。

hwaccel 的內(nèi)存流

給定 PCIe 帶寬限制,復(fù)制未壓縮的圖像數(shù)據(jù)會(huì)使 PCIe 總線迅速飽和。防止系統(tǒng)和 GPU 內(nèi)存之間不必要的復(fù)制,使用 -hwaccel-cuvid 的吞吐量比不使用 -hwccel-cuvid 的未優(yōu)化調(diào)用高出 2 倍。

處理篩選器

代碼轉(zhuǎn)換通常不僅涉及到更改輸入流的格式或比特率,還包括調(diào)整其大小。有兩個(gè)選項(xiàng)可用于調(diào)整 GPU 上的大?。菏褂?npp_scale 過濾器或 nvcuvid resize 選項(xiàng)。當(dāng)從一個(gè)輸入到一個(gè)具有不同分辨率( 1 : 1 轉(zhuǎn)碼)的輸出流轉(zhuǎn)碼時(shí),可以使用 nvcuvid resize 選項(xiàng)。請(qǐng)參見下一行的示例。

ffmpeg -vsync 0 –hwaccel cuvid -c:v h264_cuvid –resize 1280x720-i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4

如果需要多個(gè)輸出分辨率( 1 : N 轉(zhuǎn)碼),則scale_npp濾波器可以調(diào)整 GPU 上解碼幀的大小。通過這種方式,我們可以生成具有多個(gè)不同分辨率的多個(gè)輸出流,但對(duì)所有流只使用一個(gè)調(diào)整大小的步驟。關(guān)于 1 : 2 轉(zhuǎn)碼的示例,請(qǐng)參見下一行。

ffmpeg -vsync 0 –hwaccel cuvid -c:v h264_cuvid -i input.mp4 \-c:a copy –vf scale_npp=1280:720-c:v h264_nvenc -b:v 5M output_720.mp4 \-c:a copy -vfscale_npp=640:320-c:v h264_nvenc -b:v 3M output_360.mp4

使用-vf "scale_npp=1280:720"將設(shè)置scale_npp作為解碼圖像的過濾器

插值算法可以作為附加參數(shù)為scale_npp定義。默認(rèn)情況下使用三次插值,但其他算法 MIG ht 會(huì)根據(jù)比例因子和圖像提供更好的結(jié)果。建議在縮小尺度時(shí)使用超級(jí)采樣算法以獲得最佳質(zhì)量。示例如下:

ffmpeg -vsync 0 –hwaccel cuvid -c:v h264_cuvid -i input.mp4-c:a copy –vf scale_npp=1280:720:interp_algo=super-c:v h264_nvenc -b:v 5M output_720.mp4

混合 CPU 和 GPU 處理

有時(shí) MIG 需要混合使用 CPU 和 hwupload_cuda 處理。例如,您可能需要在 CPU 上解碼,因?yàn)?-hwaccel cuvid 解碼器不支持該格式,或者 GPU 上沒有濾波器。在這種情況下,不能使用 GPU 標(biāo)志。相反,您需要使用 GPU 過濾器將數(shù)據(jù)從系統(tǒng)上傳到 GPU 內(nèi)存。在下面的示例中,由于未設(shè)置 -hwaccel cuvid ,因此在 GPU 上解碼 H 。 264 流并將其下載到系統(tǒng)內(nèi)存中。淡入濾波器應(yīng)用于系統(tǒng)存儲(chǔ)器中,并使用 hwupload_cuda 濾波器將處理后的圖像上傳到 GPU 存儲(chǔ)器。最后,使用 scale_npp 縮放圖像并在 GPU 上編碼。

ffmpeg -vsync 0 -c:v h264_cuvid -i input.264-vf "fade,hwupload_cuda,scale_npp=1280:720"-c:v h264_nvenc output.264

多 -GPU

當(dāng)在一個(gè)系統(tǒng)中使用多個(gè) GPUs 時(shí),編碼和解碼工作必須顯式地分配給 GPU 。 GPUs 由其索引號(hào)標(biāo)識(shí);默認(rèn)情況下,所有工作都在索引為 0 的 GPU 上執(zhí)行。使用以下命令獲取系統(tǒng)中所有 NVIDIA GPUs 及其相應(yīng)的 ID 號(hào)的列表:

ffmpeg -vsync 0 -i input.mp4 -c:v h264_nvenc -gpu list -f null –

一旦知道了索引,就可以使用-hwaccel_device索引標(biāo)志來設(shè)置解碼和編碼的活動(dòng) GPU 。在下面的例子中,工作將在索引為 1 的 GPU 上執(zhí)行。

ffmpeg -vsync 0 -hwaccel cuvid -hwaccel_device 1 -c:v h264_cuvid -i input.mp4-c:a copy -c:v h264_nvenc -b:v 5M output.mp4

優(yōu)化

為了獲得最佳的吞吐量,所有的編碼器和解碼器單元都應(yīng)該被盡可能地利用。 nvidia-smi 可用于生成有關(guān) NVENC 、 NVDEC 和一般 GPU 利用率的實(shí)時(shí)信息。

nvidia-smi dmon nvidia-smi -q -d UTILIZATION

根據(jù)這些結(jié)果可以采取多種措施。如果編碼器利用率低, MIG 可以引入另一個(gè)轉(zhuǎn)碼管道,該管道使用 CPU 解碼和 NVENC 編碼來為硬件編碼器生成額外的工作負(fù)載。

使用 CPU 篩選器時(shí), PCIe 帶寬 MIG ht 成為瓶頸。如果可能,篩選器應(yīng)在 GPU 上運(yùn)行。 FFmpeg 中有幾個(gè) CUDA 過濾器,可以用作模板來實(shí)現(xiàn)您自己的高性能 CUDA 過濾器。

通過使用 GPU SDK 的 NVIDIA 可視化分析器分析 ffmpeg 應(yīng)用程序,您可以始終跟蹤主機(jī)和設(shè)備之間的 GPU 利用率和內(nèi)存?zhèn)鬏?。只需啟?dòng)“ Run application to generateCPU andGPU timeline ”,然后選擇帶有相關(guān) CLI 選項(xiàng)的 ffmpeg 應(yīng)用程序。圖 5 說明了應(yīng)用程序

圖 5 :

綠松石塊顯示 CUDA 內(nèi)核完成的顏色空間轉(zhuǎn)換,而黃色塊顯示主機(jī)和設(shè)備之間的內(nèi)存?zhèn)鬏?。使?visualprofiler ,用戶可以輕松地跟蹤在 GPU 上執(zhí)行的操作,例如 CUDA 加速的過濾器和數(shù)據(jù)傳輸,以確保不會(huì)執(zhí)行過多的內(nèi)存拷貝。

通過使用 --disable-stripping CLI 選項(xiàng)編譯 ffmpeg 來收集 CPU – 端性能統(tǒng)計(jì)信息,以啟用性能分析。

這可以防止編譯器剝離函數(shù)名,以便像 Gprof 或 visualstudioprofiler 這樣的商品探查器可以收集性能統(tǒng)計(jì)信息。 CPU 在硬件加速開啟的情況下,負(fù)載水平應(yīng)較低,并且大部分時(shí)間應(yīng)花費(fèi)在視頻代碼 SDK API 調(diào)用中,這些調(diào)用標(biāo)記為“外部代碼因?yàn)楹瘮?shù)名從驅(qū)動(dòng)程序庫(kù)中被刪除。圖 6 顯示了一個(gè)示例屏幕截圖。

圖 6 : visualstudio 的 ffmpeg 性能評(píng)測(cè)

進(jìn)一步閱讀

有關(guān)如何使用 FFmpeg 的更多示例以及可用的高級(jí)質(zhì)量設(shè)置,請(qǐng)查看“ 使用 FFmpeg 和 NVIDIA GPU 硬件加速 “向?qū)А?/p>

結(jié)論

FFmpeg 是一個(gè)強(qiáng)大而靈活的開源視頻處理庫(kù),具有硬件加速的解碼和編碼后端。它允許快速的視頻處理和完整的 NVIDIA GPU 硬件支持,只需幾分鐘。 Gprof 、 visualprofiler 和 microsoftvisualstudio 等商品開發(fā)工具可以用于精細(xì)的性能分析和調(diào)優(yōu)。看看 ffmpeg 源 試試吧!

關(guān)于作者

俄羅斯南部羅曼大學(xué)( Rostov-on-Don , 2012 )和羅曼大學(xué)應(yīng)用數(shù)學(xué)碩士學(xué)位。之后,他在俄羅斯三星研發(fā)院( 2012-2015 )、英特爾公司( 2015-2017 )工作。目前,他在莫斯科擔(dān)任開發(fā)技術(shù)工程師。他的研究興趣包括視頻編碼、高性能和 GPGPU 。

Stefan Schoenefeld 是 DevTech Engeniner 和 NVIDIA 專業(yè)解決方案組的經(jīng)理,他和他的團(tuán)隊(duì)致力于幫助媒體和娛樂、電信和其他行業(yè)的開發(fā)人員開發(fā)和改進(jìn)視頻和圖像處理、機(jī)器學(xué)習(xí)和視頻轉(zhuǎn)碼的高速應(yīng)用程序。他擁有烏爾姆大學(xué)工程、計(jì)算機(jī)科學(xué)和心理學(xué)系的計(jì)算機(jī)科學(xué)文憑。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5063

    瀏覽量

    103417
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4762

    瀏覽量

    129153
  • CUDA
    +關(guān)注

    關(guān)注

    0

    文章

    121

    瀏覽量

    13649
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)中心中的FPGA硬件加速

    ? 再來看一篇FPGA的綜述,我們都知道微軟包括國(guó)內(nèi)的云廠商其實(shí)都在數(shù)據(jù)中心的服務(wù)器中部署了FPGA,所以這篇論文就以數(shù)據(jù)中心的視角,來看下FPGA這個(gè)硬件加速器。 還是一樣,想要論文原文的可以私信
    的頭像 發(fā)表于 01-14 10:29 ?90次閱讀
    數(shù)據(jù)中心中的FPGA<b class='flag-5'>硬件加速</b>器

    基于Xilinx XCKU115的半高PCIe x8 硬件加速

    基于Xilinx XCKU115的半高PCIe x8 硬件加速卡,支持2x72bit(數(shù)據(jù)位寬64bit+ECC)DDR4存儲(chǔ),數(shù)據(jù)傳輸速率 2400Mb/s。DDR4單簇容量4GB,兩組總?cè)萘繛?GB
    的頭像 發(fā)表于 11-14 11:30 ?304次閱讀
    基于Xilinx XCKU115的半高PCIe x8 <b class='flag-5'>硬件加速</b>卡

    RISC-V跑AI算法能加速嗎?

    現(xiàn)在好多ARM單片機(jī)都帶機(jī)器學(xué)習(xí)加速,RISC-V有這方面的硬件加速嗎?
    發(fā)表于 10-10 22:14

    TDA4VM上的硬件加速運(yùn)動(dòng)恢復(fù)結(jié)構(gòu)算法

    電子發(fā)燒友網(wǎng)站提供《TDA4VM上的硬件加速運(yùn)動(dòng)恢復(fù)結(jié)構(gòu)算法.pdf》資料免費(fèi)下載
    發(fā)表于 09-24 11:39 ?0次下載
    TDA4VM上的<b class='flag-5'>硬件加速</b>運(yùn)動(dòng)恢復(fù)結(jié)構(gòu)算法

    AM62A SoC通過硬件加速視覺處理改進(jìn)條形碼讀取器

    電子發(fā)燒友網(wǎng)站提供《AM62A SoC通過硬件加速視覺處理改進(jìn)條形碼讀取器.pdf》資料免費(fèi)下載
    發(fā)表于 09-04 09:52 ?0次下載
    AM62A SoC通過<b class='flag-5'>硬件加速</b>視覺處理改進(jìn)條形碼讀取器

    適用于數(shù)據(jù)中心應(yīng)用中的硬件加速器的直流/直流轉(zhuǎn)換器解決方案

    電子發(fā)燒友網(wǎng)站提供《適用于數(shù)據(jù)中心應(yīng)用中的硬件加速器的直流/直流轉(zhuǎn)換器解決方案.pdf》資料免費(fèi)下載
    發(fā)表于 08-26 09:38 ?0次下載
    適用于數(shù)據(jù)中心應(yīng)用中的<b class='flag-5'>硬件加速</b>器的直流/直流轉(zhuǎn)換器解決方案

    如何移植FFmpeg

    ?FFmpeg是一款專門用于處理數(shù)字音頻和視頻,支持錄制、轉(zhuǎn)換,并能將這些媒體內(nèi)容轉(zhuǎn)化為實(shí)時(shí)流數(shù)據(jù)的開源計(jì)算機(jī)程序。它遵循LGPL或GPL許可協(xié)議,為用戶提供了涵蓋音視頻錄制、格式轉(zhuǎn)換及流媒體分發(fā)
    的頭像 發(fā)表于 06-07 15:28 ?1714次閱讀
    如何移植<b class='flag-5'>FFmpeg</b>

    PSoC 6 MCUBoot和mbedTLS是否支持加密硬件加速?

    。 使用 MCUBoot 驗(yàn)證兩個(gè)應(yīng)用程序時(shí),運(yùn)行時(shí)間大約需要五秒鐘。 在 README.md 的 \"安全 \"一欄中寫道 與軟件實(shí)現(xiàn)相比,硬件加速加密技術(shù)將啟動(dòng)時(shí)間縮短了四倍多
    發(fā)表于 05-29 08:17

    新思科技硬件加速解決方案技術(shù)日在成都和西安站成功舉辦

    近日,【新思科技技術(shù)日】硬件加速驗(yàn)證解決方案專場(chǎng)成都站和西安站順利舉行,來自國(guó)內(nèi)領(lǐng)先的系統(tǒng)級(jí)公司、芯片設(shè)計(jì)公司以及高校的250多名開發(fā)者們積極參與。
    的頭像 發(fā)表于 04-19 17:35 ?476次閱讀

    Elektrobit利用其首創(chuàng)的硬件加速軟件優(yōu)化汽車通信網(wǎng)絡(luò)的性能

    Elektrobit今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成現(xiàn)代微控制器新一代硬件加速器的軟件產(chǎn)品,可應(yīng)用于先進(jìn)的汽車電子/電氣架構(gòu)(基于被廣泛采用
    的頭像 發(fā)表于 04-17 09:51 ?385次閱讀

    用DE1-SOC進(jìn)行硬件加速的2D N-Body重力模擬器設(shè)計(jì)

    該項(xiàng)目的目標(biāo)是創(chuàng)建一個(gè)用DE1-SOC進(jìn)行硬件加速的2D N-Body重力模擬器。
    的頭像 發(fā)表于 04-09 11:08 ?600次閱讀
    用DE1-SOC進(jìn)行<b class='flag-5'>硬件加速</b>的2D N-Body重力模擬器設(shè)計(jì)

    330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡 圖形圖像硬件加速

    標(biāo)簽: Net FPGA , XC7K325T板卡 , XC7K325T處理板 , 軟件無(wú)線電處理平臺(tái) , 圖形圖像硬件加速
    的頭像 發(fā)表于 03-04 14:14 ?652次閱讀
    330-基于FMC接口的Kintex-7 XC7K325T PCIeX4 3U PXIe接口卡 圖形圖像<b class='flag-5'>硬件加速</b>器

    【國(guó)產(chǎn)FPGA+OMAPL138開發(fā)板體驗(yàn)】(原創(chuàng))7.硬件加速Sora文生視頻源代碼

    算法,如循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)或Transformer,用于文本處理,以及卷積神經(jīng)網(wǎng)絡(luò)(CNN)或生成對(duì)抗網(wǎng)絡(luò)(GAN)用于視頻生成。通常涉及對(duì)模型中的計(jì)算密集型部分進(jìn)行硬件加速。文本到視頻生成模型
    發(fā)表于 02-22 09:49

    音視頻解碼器硬件加速:實(shí)現(xiàn)更流暢的播放效果

    隨著多媒體內(nèi)容的日益豐富和高清化,傳統(tǒng)的軟件解碼已經(jīng)難以滿足人們對(duì)流暢播放體驗(yàn)的需求。因此,音視頻解碼器硬件加速技術(shù)的出現(xiàn),為提升播放效果帶來了革命性的改變。 硬件加速的原理 硬件加速的核心
    的頭像 發(fā)表于 02-21 14:40 ?1031次閱讀
    音視頻解碼器<b class='flag-5'>硬件加速</b>:實(shí)現(xiàn)更流暢的播放效果

    《深入理解FFmpeg閱讀體驗(yàn)》ffmpeg安裝

    書中講了如何編譯安裝,我看了一下比較復(fù)雜,所以下載安裝包進(jìn)行安裝,下載網(wǎng)址:Download FFmpeg 下載完后解壓出來在bin目錄下面有三個(gè)文件: 復(fù)制這個(gè)目錄: C:\\\\Users
    發(fā)表于 01-25 21:35