GPU測試
ffmpeg -c:v h264_cuvid -rtsp_transport tcp -i rtsp://admin:Admin123@192.168.64.178/h264/1/main/av_stream -y -qscale 5 -f image2 -r 1 -t 0:5:0 /home/ffmpeg_1/%5d.jpg
watch -n 1 -d nvidia-smi
CUDA
CUDA是Nvidia出的一個GPU計算庫,讓程序員能夠驅動Nvidia顯卡的GPU進行各類工做,其中就包含了視頻的編解碼
安裝CUDA
首先驗證一下顯卡驅動是否裝好
nvidia-smi
準備工做
在$HOME下建立ffmpeg_sources目錄
編譯並安裝依賴庫
本節中的依賴庫基本都是必須的,建議所有安裝
nasm
彙編編譯器,編譯某些依賴庫的時候須要
cd ~/ffmpeg_sources curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2 tar xjvf nasm-2.13.02.tar.bz2 cd nasm-2.13.02 ./autogen.sh ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install
yasm
彙編編譯器,編譯某些依賴庫的時候須要
cd ~/ffmpeg_sources curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz tar xzvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install
libx264
H.264視頻編碼器,若是須要輸出H.264編碼的視頻就須要此庫,因此能夠說是必備
cd ~/ffmpeg_sources #git clone --depth 1 http://git.videolan.org/git/x264 #cd x264 #PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-shared
若是出現
#PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-shared --disable-asm #make #make install
使用Nvidia顯卡GPU進行轉碼
CUDA計算庫
CUDA是Nvidia出的一個GPU計算庫,讓程序員能夠驅動Nvidia顯卡的GPU進行各類工做,其中就包含了視頻的編解碼
安裝CUDA計算庫
首先驗證一下顯卡驅動是否裝好
nvidia-smi
若是驅動正常的話,此命令會輸出顯卡的型號、驅動版本、現存/GPU佔用等信息。如何安裝顯卡驅動本文不描述,請參考其餘資料。
linux運行:
#./cuda_9.2.148_396.37_linux.run
會出現這個,不要傻等,回車一直按着
注意若是按照錯誤有些能夠跳過不安裝,simples和openGL能夠不裝,若是已經裝好驅動Driver第一步也能夠不裝
驗證安裝
/usr/local/cuda-8.0/bin/nvcc -V
安裝成功的話,會輸出相似文本:
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Tue_Jun_12_23:07:04_CDT_2018 Cuda compilation tools, release 9.2, V9.2.148
編譯ffmpeg,須要ffmpeg3.3.9,測試發現4.0.2暫時不行。
要讓ffmpeg可以使用CUDA提供的GPU編解碼器,必須從新編譯ffmpeg,讓其可以經過動態連接調用CUDA的能力
#
xz -d ffmpeg-3.3.9.tar.xz
#tar -xvf ffmpeg-3.3.9.tar
首先要編譯安裝nv-codec-headers庫
#git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
#cd nv-codec-headers/ #make PREFIX="$HOME/ffmpeg_build" BINDDIR="$HOME/bin" #make install PREFIX="$HOME/ffmpeg_build" BINDDIR="$HOME/bin"
進入
ffmpeg-3.3.9目錄執行編譯:
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I$HOME/ffmpeg_build/include -I/usr/local/cuda/include" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib -L/usr/local/cuda/lib64" \ --extra-libs=-lpthread \ --extra-libs=-lm \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libx264 \ --enable-nonfree \ --enable-cuda \ --enable-cuvid \ --enable-nvenc \ --enable-libnpp #make -j4
make時間有點久,-j提升速度,通常cpu核心數兩倍爲宜 #make install
vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.2/lib64:/root/ffmpeg_build/lib
驗證安裝
從新安裝完ffmpeg,使用
ffmpeg -hwaccels命令查看支持的硬件加速選項
Hardware acceleration methods: cuvid
能夠看到多出來一種叫作cuvid的硬件加速選項,這就是CUDA提供的GPU視頻編解碼加速選項
而後查看cuvid提供的GPU編解碼器
ffmpeg -codecs | grep cuvid
使用GPU進行視頻轉碼測試
ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport tcp -i "rtsp://admin:admin@192.168.57.192:554/H264?channel=1&subtype=0&unicast=true&proto=Onvif/video
" -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y /home/2.mp4
-hwaccel cuvid:指定使用cuvid硬件加速
-c:v h264_cuvid:使用h264_cuvid進行視頻解碼
-c:v h264_nvenc:使用h264_nvenc進行視頻編碼
-vf scale_npp=1280:-1:指定輸出視頻的寬高,注意,這裏和軟解碼時使用的-vf scale=x:x不同
轉碼期間使用nvidia-smi查看顯卡狀態,可以看到ffmpeg確實是在使用GPU進行轉碼:
+-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 62543 C ffmpeg 193MiB | +-----------------------------------------------------------------------------+
向不一樣GPU提交轉碼任務
-hwaccel_device N 指定某顆GPU執行轉碼任務,N爲數字,如:
ffmpeg -hwaccel cuvid -hwaccel_device 0