視頻硬編碼筆記

由於項目要求,需要對1080P以及4K的視頻實時編解碼,編碼格式爲H265。首先使用X265編碼測試,無奈平均編碼速度僅有6.08fps,遠遠無法滿足實時性的要求。之後依次使用Intel與nvidia的硬編碼測試效果,總算滿足了實時編碼的要求,下面把整個過程做一個記錄。整個過程均使用ffmpeg實現,不清楚ffmpeg的請參考雷神的博客FFMPEG視音頻編解碼零基礎學習方法

所謂硬編碼,我的理解就是硬件加速編碼,intel硬編碼是使用其集顯中的視頻編解碼模塊加速,同理nvidia硬編碼使用nvidia顯卡中的視頻編解碼模塊進行加速。在命令行中使用 ffmpeg -hwaccels 可以查看ffmpeg支持的硬件加速方法。

圖一.ffmpeg支持的硬編碼方法

Intel硬編碼

Intel硬編碼使用Intel處理器內部集成的顯卡進行硬件加速,圖一中的qsv加速方法便對應着Intel硬編碼。測試中發現Intel硬編碼對H.264加速效果明顯,且不需要安裝額外庫(僅使用相應的ffmpeg命令):

ffmpeg -y -i infile -vframes 2000 -b:v 8000K -vcodec h264_qsv -preset veryfast output.h264

使用Intel編碼h265文件,需要額外安裝Intel® Media SDK,之後使用下圖中的命令進行編碼,或直接查看官方文檔

圖二.Intel加速h265編碼
不知道是不是自己哪兒出錯了,使用Intel加速h265編碼之後,編碼效率並未見到明顯提高,後續也沒有仔細研讀其官方文檔,轉向了NVIDIA加速的方法

NVIDIA硬編碼

顧名思義,NVIDIA硬編碼使用英偉達的顯卡對視頻編碼進行加速。在正確使用英偉達硬編碼之前需要安裝CUDA英偉達的必要驅動
安裝好以上兩個環境後就可以使用NVIDIA的硬編碼了,編碼H264格式命令爲

ffmpeg -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt yuv420p -i <input.yuv> -c:v h264_nvenc -preset slow -cq 10 -bf 2 -g 150 <output.h264>

編碼H265格式命令爲:

ffmpeg -f rawvideo -s:v 1920x1080 -r 30 -pix_fmt yuv420p -i <input.yuv> -vcodec hevc_nvenc -preset slow -cq 10 -g 150 <output.h265>

使用英偉達加速後速度明顯上升,H265編碼幀率達到180+fps。具體資料參考英偉達官網給出的教程NVIDIA/FFMPEG


結語:以上只是簡要地記錄了整個試驗過程,文中給出地鏈接都是官方教程中的,部分可能需要梯子才能訪問。試驗中遇到的很多問題都是因爲環境沒有配置好引起的,走了很多彎路,所以記錄下來備忘,也方便以後的同行參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章