1、首先安装nvidia显卡驱动,安装显卡驱动对应的CUDA,安装和CUDA对应的cudnn,不清楚的小伙伴请移步到Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制_BetterJason的博客-CSDN博客
2、 安装必要软件包
sudo apt install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev
#PS:aptitude [ˈæptɪtjuːd](资质; 天资; 天赋; 天生的才能) 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净
sudo apt install aptitude
# 安装gcc、g++,分别为c、c++编译器
sudo aptitude install build-essential
# 安装yasm、nasm.这是两个汇编器,编译FFmpeg需要用到
sudo aptitude install yasm nasm
# 安装依赖库,FFmpeg 的安装依赖许多库(如,⾳频编码库,⾳频解码库,视频编解码库等)
sudo apt-get install gnutls-bin \
pkg-config \
libgmp3-dev \
libaom-dev \
libass-dev \
libbluray-dev \
libfdk-aac-dev \
libmp3lame-dev \
libopencore-amrnb-dev \
libopencore-amrwb-dev \
libopenmpt-dev \
libopus-dev \
libshine-dev \
libsnappy-dev \
libsoxr-dev \
libspeex-dev \
libtheora-dev \
libtwolame-dev \
libvo-amrwbenc-dev \
libvpx-dev \
libwavpack-dev \
libwebp-dev \
libx264-dev \
libx265-dev \
libxvidcore-dev \
liblzma-dev \
zlib1g-dev \
wget \
texinfo \
libxcb-xfixes0-dev \
libxcb-shm0-dev \
libxcb1-dev \
libvorbis-dev \
libvdpau-dev \
libva-dev \
libtool \
libsdl2-dev \
libfreetype6-dev \
git-core \
cmake
# 上述依赖库使用apt-get安装也是一样的
3、安装依赖头文件包,这里需要安装一个头文件包,里面包含了一系列用到的头文件。
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
sudo make install
4、下载FFMPEG
地址:https://ffmpeg.org/download.html#build-linux
下载 Ubuntu-official packages-> 7:4.4.1-3ubuntu5
解压源码:
tar -xvf tar -xvf ./ffmpeg_4.4.1.orig.tar.xz
5、编译
5.1进入源码文件夹,执行如下命令,配置文件
sudo ./configure --prefix=/usr/local/ffmpeg_x86_64-linux-gpu --enable-gpl --enable-version3 --enable-libspeex --enable-libmp3lame --enable-libvorbis --enable-shared --enable-libfdk-aac --enable-libass --enable-libfontconfig --enable-libfreetype --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-nonfree --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-ffnvcodec --enable-nvdec --extra-cflags=-I/usr/local/cuda-11.6/include --extra-ldflags=-L/usr/local/cuda-11.6/lib64
# PS:
--prefix=/usr/local/ffmpeg_x86_64-linux-gpu :一定要使用绝对路径,表示在源码目录下面会生成一个文件夹,make install 后 该文件夹下面生成 bin include lib share 四个文件夹
--enable-shared :表示生成动态库
--enable-libx264 --enable-libx265 :表示开启 x264 x265编解码器
#这个步骤遇到的问题:
Q1:提示:ERROR: failed checking for nvcc.
查看 /etc/profile看到cuda的bin和lib环境都已经设置了,执行名 nvcc -V 也可以正确显示cuda的版本信息,说明cuda安装正确。
解决方法如下:直接修改configure这条语句
sudo vim ./configure
查找ERROR: failed checking for nvcc.
将词句改为:
enabled cuda_nvcc && { check_nvcc cuda_nvcc; }
Q2:执行 make install的时候 提示:nvcc fatal : Unsupported gpu architecture 'compute_30'
这是因为compute_30在cuda11中已经过时,请根据官方提示更改自己显卡的archCUDA GPUs - Compute Capability | NVIDIA Developer
我的显卡是gtx950m,所以应该是5.0
#修改configure
sudo vim ./configure
#查找compute_30
将词句更改为
nvccflags_default="-gencode arch=compute_50,code=sm_50 -O2"
#保存
wq
#重新执行5.1的指令
5.2 编译
sudo make j-8
Q1:提示 /bin/sh: 1: nvcc: not found
这是因为,没有找到nvcc
解决方法,修改 ./ffbuild/config.mak中的nvcc的路径,这个路径是你本机nvcc的路径
# 编译成功后,安装
sudo make install
#bin lib include share四个文件夹会安装到--prefix指定的目录-》/usr/local/ffmpeg_x86_64-linux-gpu
5.3设置运行的环境变量
sudo vim /etc/profile
#在最下面增加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg_x86_64-linux-gpu/lib
export PATH=$PATH:/usr/local/ffmpeg_x86_64-linux-gpu/bin
#保存
wq
#刷新环境变了文件
source /etc/profile
5.4验证
ffmpeg -codecs | grep cuvid
ffmpeg -codecs | grep nvenc
上述说明ffmpeg已经带有nvidia的硬件加速了!