[FFmpeg] nvidia 加速 ffmpeg

ffmpeg 是可以使用 nvidia 加速的。但这个仅对 ffmpeg 编解码视频有用。只有当你使用 ffmpeg 编解码大量高清长视频时才有用。

参考文档

  • https://trac.ffmpeg.org/wiki/HWAccelIntro
  • https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/

文章目录

  • 安装 nvidia-460 + cuda-11.2
  • 安装 ffnvcodec 头文件
  • 编译 ffmpeg
  • 测试

安装 nvidia-460 + cuda-11.2

参考这篇 文章

安装 ffnvcodec 头文件

头文件和库文件会安装在 /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

以 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

你可能感兴趣的:(FFmpeg)