目錄
- 參考
- 硬件加速簡介
- FFmpeg 硬件加速各環(huán)境支持情況
- FFmpeg命令行工具使用硬件加速
1. 參考
- [1] trac.ffmpeg.org/HWAccelIntro
- [2] 夏威廉/FFmpeg 硬件加速方案概覽 (上)
- [3] 夏威廉/FFmpeg 硬件加速方案概覽 (下)
- [4] 趙軍/FFmpeg 硬件加速方案概覽 (上)
2. 硬件加速簡介
使用專用硬件(通常集成到GPU)對視頻處理進行加速,比如解碼、編碼或filter等操作[1]。
優(yōu)點:
- 比軟件處理速度快。
- 減少CPU的負荷,更省電。
- 避免數(shù)據(jù)拷貝。許多硬件解碼器能夠生成輸出到硬件設(shè)備(比如顯存)的surface,這意味渲染輸出之前不需要額外的數(shù)據(jù)拷貝。在某些情況下,它還可以支持硬件設(shè)備的surface輸入與編碼器一起使用,以避免在轉(zhuǎn)碼時候的數(shù)據(jù)拷貝。
缺點:
- 硬件編碼器生成的輸出質(zhì)量通常比好的軟件編碼器低得多[1]。
- 硬件加速方案依賴于各硬件和平臺的支持,沒有統(tǒng)一的方案。
- 對于特定處理(比如編解碼)硬件加速的支持和更新迭代速度慢。
關(guān)于硬件加速的詳細介紹參見[2][3]。
3. FFmpeg 硬件加速各環(huán)境支持情況
硬件加速API在各系統(tǒng)和硬解環(huán)境的支持情況如下[1]。
hw_platform_api_available.PNG
FFmpeg實現(xiàn)的API的情況如下[1]。
ffmpeg_hw_accel.PNG
4. FFmpeg命令行工具使用硬件加速
-
-hwaccel選項啟用硬件解碼器。- 軟件解碼器會正常啟動,如果它檢測到一個硬件可解碼的流,將嘗試將所有重要的處理交給硬件。如果流在硬件中不可解碼,那么將自動使用軟件解碼。
-
-hwaccel_device選項指定特定的硬件設(shè)備(比如有多個顯卡可用)。 -
-codec:v選項設(shè)置特定的編解碼器,適用于外部包裝的編解碼器。- 通常將它們命名為codec_api(例如:h264_cuvid),要求事先知道編解碼器的名稱。
- 如果不支持不會回退到軟件編解碼。
- 硬件filter可以像其他filter一樣在filtergraph中使用。
- 存在硬件filter與軟件filter支持的格式不同的情況,需要使用
hwupload和hwdownloadfilter在硬件surface和內(nèi)存之間拷貝數(shù)據(jù)。
- 存在硬件filter與軟件filter支持的格式不同的情況,需要使用
示例:
1. 使用NVENC進行h264編碼:
ffmpeg -s 1280*720 -i input_yuv -c:v h264_nvenc -pixel_format yuv420p -preset default output.mp4
2. NVEDC進行h264解碼
ffmpeg -hwaccel nvdec -i input.mp4 output_yuv