0%

编译带nvenc的ffmpeg

我们在转码时,为了提高转码效率,通常我们都会使用nvenc来转码。今天我们就来介绍如何编译带nvenc的ffmpeg。

硬件环境

编译带nvenc的ffmpeg,首先我们要有一台带Nvidia GPU的电脑,比如我的机子就装了一块Nvidia RTX 3090。

操作系统一般都选择Linux,如Ubuntu 24.04。如果你是Windows用户,也可以,只不过配置环境会更麻烦一些。当然,你也可以尝试在WSL2上编译,在WSL2上编译ffmpeg就与在Linux上编译ffmpeg一样了。

紧接着我们要为机子安装CUDA Driver以及CUDA Toolkit。选择的版本一般选择比较新的版本,当然如果你的GPU太老,那只能选择能与它兼容的版本了。

之后将CUDA Toolkit 库添加到环境变量中,如下:

1
LD_LIBRARY_PATH=/usr/local/cuda/lib64

到此我们就将硬件环境准备好了,接下来咱们看看如何配置软件环境。

软件环境

软件环境的配置可以参考Nvidia的官方文档

需要注意的是,FFmpeg编译时不需要使用SDK,但如果你想在你自己的应用中使用GPU,则可以下载SDK,SDK地址在这里https://developer.nvidia.com/nvidia-video-codec-sdk

如果我们使用SDK编写自己的程序,那必须要保证CUDA Driver与SDK之间的兼容性,比如在nvidia-video-codec-sdk网址中有这样一段信息,表达的就是这个意思:

其表示的含义是,Video Codec SDK 12.2 支持的操作系统包括Win10, Win11, Server2008 R2, Server2012 和 Linux。

支持的GPU包括Quadro, Tesla, GRID 或 GeForce产品;Windows的CUDA Driver版本要求551.76或更高版本;Linux 的CUDA Driver版本要求550.54.14或更高版本。

Ok,通过上面的描述我想你已经清楚SDK,CUDA Driver之间的关系了。

接下来,你就可以按照官方文档中的步骤来配置软件环境了。比如安装必要的库和工具,下载ffmpeg源码等,这里我就不一一赘述了。

当所有的操作都完成后,我们就可以将带nvenc的ffmpeg编译好了。

编译ffmpeg

首先下载ffmepg,命令如下:

1
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

安装依赖包,命令如下:

1
sudo apt install build-essential pkg-config libx264-dev libx265-dev libfdk-aac-dev libmp3lame-dev libopus-dev libvpx-dev yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev

然后,进入ffmpeg目录,执行如下命令:

1
./configure --prefix=/usr/local/ffmpeg --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-gpl --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

之后,编译并安装ffmpeg, 命令如下:

1
2
make -j 4 
sudo make install

至此,我们就将带nvenc的ffmpeg编译好了。

小结

总的来说,编译带nvenc的ffmpeg并不难,关键点是要将GPU型号、CUDA Driver、CUDA Toolkit这三者之间的关系理顺,如果它们之间不兼容的话,即使你编译出了ffmpeg,它也不能成功运行。

参考

YouTube 视频需要能访问外网才能看该视频

欢迎关注我的其它发布渠道