本來以為很簡單,因為印象中自己在windows機器上使用過。
目前的實在一個docker環境下的ubuntu系統里。
官方操作文檔
按照官方操作文檔Using FFmpeg with NVIDIA GPU Hardware Acceleration - NVIDIA Docs的描述,步驟很簡單:
1、安裝nv-codec-headers的頭文件。
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers && sudo make install && cd –
2、克隆ffmpeg源代碼。
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
3、安裝編譯源代碼需要的依賴庫。
sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev
4、配置編譯條件,進行編譯安裝。
./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared
5、進行測試使用。
可能出問題的坑
但是這里隱含了幾個前提條件。
1、nv-codec-headers是有版本對應的,需要根據目標機器上的驅動版本,選擇對應的版本。
查看目標機器上的驅動版本可以執行nvidia-smi查看。
nv-codec-headers里的README文件里寫了匹配的版本信息。
2、目標機器需要安裝CUDA toolkit,這個文檔里有寫,可以執行nvcc --version查看是否安裝成功。
3、配置ffmpeg編譯條件的時候,里面包含了兩個目錄:
/usr/local/cuda/lib64和/usr/local/cuda/include。要確保這兩個目錄里確實有需要的文件。
筆者就發現目標機器上的/usr/local/cuda/lib64是空的,然后通過:
find / -name 'libcuda*' 命令找到了實際存在libcuda.so文件的目錄是:/usr/lib/x86_64-linux-gnu/。
這樣就需要替換掉編譯條件里的目錄。
4、啟動docker的命令里需要把宿主機的視頻能力賦予docker容器。
--gpus 'all,"capabilities=compute,video,utility"'
參考文檔:https://www.cnblogs.com/azureology/p/18290262
User Guide — container-toolkit 1.10.0 documentation
最后所有依賴和路徑設置正確以后。執行./configure的完整命令。會輸出完整支持的編碼解碼器信息,注意看是否包含h264_nvenc。如果包含了就證明設置正確了。