ffmpeg 是可以使用 nvidia 加速的。但这个仅对 ffmpeg 编解码视频有用。只有当你使用 ffmpeg 编解码大量高清长视频时才有用。
参考文档
- https://trac.ffmpeg.org/wiki/HWAccelIntro
- https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/
参考这篇 文章
头文件和库文件会安装在 /usr/local/。
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make install
为了能在 /usr/local/lib 中找到 pkgconfig,添加环境变量。
vim ~/.bashrc
# 文件末尾添加
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
# 使之生效
source ~/.bashrc
以 ffmpeg-4.3.1 为例。
http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.gz
tar -zxf ffmpeg-4.3.1.tar.gz
cd ffmpeg-4.3.1
mkdir build && cd build
./../configure --prefix=/usr/local/ffmpeg --enable-shared --enable-nonfree --enable-cuda-nvcc --enable-cuda-llvm --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
如果 configure 失败并报告 cuda-nvcc 出错,查看编译日志
vim ffbuild/config.log
如果文件末尾说是因为计算能力不匹配导致,那么修改 configure 文件。在文件内搜索 30,找到如下内容。把 30 改为自己 GPU 的计算能力。
<<<<<<<<<<<
if enabled cuda_nvcc; then
nvcc_default="nvcc"
nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
else
>>>>>>>>>>>
if enabled cuda_nvcc; then
nvcc_default="nvcc"
nvccflags_default="-gencode arch=compute_61,code=sm_61 -O2"
else
重新 configure,将会看到所有的硬件加速
External libraries providing hardware acceleration:
cuda cuvid nvdec vaapi
cuda_llvm ffnvcodec nvenc vdpau
cuda_nvcc libnpp v4l2_m2m
现在可以编译了
make
sudo make install
在 ~/.bashrc 中添加环境变量
vim ~/.bashrc
# 文件末尾添加
export PATH=/usr/local/ffmpeg/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH
# 使之生效
source ~/.bashrc
you can use NVENC:
ffmpeg -i input -c:v h264_nvenc -profile high444p -pixel_format yuv444p -preset default output.mp4
Sample decode using CUDA:
ffmpeg -hwaccel cuda -i input output
Sample decode using CUVID:
ffmpeg -c:v h264_cuvid -i input output
Full hardware transcode with NVDEC and NVENC:
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -c:v h264_nvenc -preset slow output
If ffmpeg was compiled with support for libnpp, it can be used to insert a GPU based scaler into the chain:
ffmpeg -hwaccel_device 0 -hwaccel cuda -i input -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow output.mkv