FFmpeg编译安装外部库包括NVIDIA

Linux

CentOS

FFmpeg wiki 参考资料
通用编译指南

https://trac.ffmpeg.org/wiki/CompilationGuide/Generic

CentOS编译指南

https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

CentOS 8 替换yum源

因为官方yum源地址已在2021年底停止维护无法下载包,所以必须替换yum源地址。
示例中选择替换为阿里云yum源,示例地址:
https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11w6REV7

清理旧yum缓存
yum clean all
建立新yum缓存
yum makecache
可能出现的报错
 Failed to download metadata for repo 'AppStream'  
 Error: Failed to download metadata for repo 'AppStream'  
解决方案

更新 CentOS-AppStream.repo 文件中的链接,注释文件中[appStream]标签下所有内容
查看 CentOS-Base.repo 文件(确认是否已经更新为阿里云地址),复制[AppStream]标签下所有内容,到 CentOS-AppStream.repo 文件[appStream]标签下。
参考资料:https://www.cnblogs.com/bpzblog/p/13918199.html

安装FFmpeg和第三方编解码库所需编译工具
yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make pkgconfig zlib-devel
可能出现的报错
Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-epel.repo
解决方案
# 编辑文件
vi /etc/yum.repos.d/CentOS-epel.repo
# 注释 failovermethod 选项
# 原因是Redhat dnf 不支持 failovermethod 选项
各个外部库编译配置

固定路径

# 目录
/opt/ffmpeg_build

# NASM
./configure --prefix="/opt/ffmpeg_build" --bindir="/opt/ffmpeg_build/bin"

# yasm
./configure --prefix="/opt/ffmpeg_build" --bindir="/bin"

# x264
PKG_CONFIG_PATH="/opt/ffmpeg_build/lib/pkgconfig" ./configure --prefix="/opt/ffmpeg_build" --bindir="/opt/ffmpeg_build/bin" --enable-static

# x265
cd /opt/ffmpeg_sources/x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/opt/ffmpeg_build/ " -DENABLE_SHARED:bool=off ../../source

# libfdk_aac
autoreconf -fiv
./configure --prefix="/opt/ffmpeg_build" --disable-shared

# libmp3lame
./configure --prefix="/opt/ffmpeg_build" --bindir="/opt/ffmpeg_build/bin" --disable-shared --enable-nasm

# libopus
./configure --prefix="/opt/ffmpeg_build" --disable-shared

# libvpx
./configure --prefix="/opt/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm

# SDL2
./configure --prefix="/opt/ffmpeg/ffmpeg_build"

动态路径

# NASM
./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --bindir="$HOME/ffmpeg/ffmpeg_build/bin"

# yasm
./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --bindir="$HOME/ffmpeg/ffmpeg_build/bin"

# x264
PKG_CONFIG_PATH="$HOME/ffmpeg/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --bindir="$HOME/ffmpeg/ffmpeg_build/bin" --enable-static

# x265
cd /opt/ffmpeg_sources/x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg/ffmpeg_build " -DENABLE_SHARED:bool=off ../../source

# libfdk_aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --disable-shared

# libmp3lame
./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --bindir="$HOME/ffmpeg/ffmpeg_build/bin" --disable-shared --enable-nasm

# libopus
./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --disable-shared

# libvpx
./configure --prefix="$HOME/ffmpeg/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm

# SDL2
./configure --prefix="$HOME/ffmpeg/ffmpeg_build"
nv-codec-headers 下载与安装

下载
nv-codec-headers 是FFmpeg修改过的头文件
源码下载地址 https://github.com/FFmpeg/nv-codec-headers
查看README文件中Video Codec SDK版本对应的显卡驱动程序版本
注意需要nv-codec-headers版本、CUDA工具包(其中包含Video Codec SDK)、显卡驱动程序版本相匹配

README

FFmpeg version of headers required to interface with Nvidias codec APIs.

Corresponds to Video Codec SDK version 11.1.5.

Minimum required driver versions:
Linux: 470.57.02 or newer
Windows: 471.41 or newer

安装

cd nv-codec-headers

# 如需自定义PREFIX
vi Makefile
# PREFIX = /usr/local 修改为 PREFIX = $HOME/ffmpeg/ffmpeg_build
# 注意 $HOME 需要改为真实路径如:/home/developer/ffmpeg/ffmpeg_build
# 保存退出

make install
CUDA工具包安装

各个版本下载地址https://developer.nvidia.com/cuda-toolkit-archive

11.6版本安装
CentOS 8
# centos 8 安装 CUDA工具包
wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-rhel8-11-6-local-11.6.0_510.39.01-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel8-11-6-local-11.6.0_510.39.01-1.x86_64.rpm

sudo dnf clean all
sudo dnf -y module install nvidia-driver:latest-dkms
sudo dnf -y install cuda
CentOS 7
centos 7 安装 CUDA工具包
wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-rhel7-11-6-local-11.6.0_510.39.01-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-11-6-local-11.6.0_510.39.01-1.x86_64.rpm
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms cuda
sudo yum -y install cuda-drivers
CUDA工具包10.2版本安装
CentOS 7
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-rhel7-10-2-local-10.2.89-440.33.01-1.0-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-10-2-local-10.2.89-440.33.01-1.0-1.x86_64.rpm
# 清理yum失效缓存
sudo yum clean expire-cache
# 设置安装版本
version=440.33.01;
stream="latest-dkms";
list=("kmod-nvidia-$stream-$version")
list+=("nvidia-driver-$stream-cuda-$version")
list+=("nvidia-driver-$stream-cuda-libs-$version")
list+=("nvidia-driver-$stream-devel-$version")
list+=("nvidia-driver-$stream-$version")
list+=("nvidia-driver-$stream-NVML-$version")
list+=("nvidia-driver-$stream-NvFBCOpenGL-$version")
list+=("nvidia-driver-$stream-libs-$version")
list+=("nvidia-fabric-manager-$version")
list+=("nvidia-libXNVCtrl-$version")
list+=("nvidia-libXNVCtrl-devel-$version")
list+=("nvidia-modprobe-$stream-$version")
list+=("nvidia-persistenced-$stream-$version")
list+=("nvidia-settings-$version")
list+=("nvidia-xconfig-$stream-$version")
sudo yum install ${list[@]}
# cuda-drivers-fabricmanager  找不到包安装不上也没关系
sudo yum install cuda-drivers-fabricmanager-440
# 会自动安装对应版本
sudo yum -y install nvidia-driver-latest-dkms cuda
sudo yum -y install cuda-drivers

官方参考文档https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#redhat-installation
在RHEL 7安装指定版本驱动程序示例

version={
   DRIVER_VERSION};
stream="latest-dkms";
list=("kmod-nvidia-$stream-$version")
list+=("nvidia-driver-$stream-cuda-$version")
list+=("nvidia-driver-$stream-cuda-libs-$version")
list+=("nvidia-driver-$stream-devel-$version")
list+=("nvidia-driver-$stream-$version")
list+=("nvidia-driver-$stream-NVML-$version")
list+=("nvidia-driver-$stream-NvFBCOpenGL-$version")
list+=("nvidia-driver-$stream-libs-$version")
list+=("nvidia-fabric-manager-$version")
list+=("nvidia-libXNVCtrl-$version")
list+=("nvidia-libXNVCtrl-devel-$version")
list+=("nvidia-modprobe-$stream-$version")
list+=("nvidia-persistenced-$stream-$version")
list+=("nvidia-settings-$version")
list+=("nvidia-xconfig-$stream-$version"
sudo yum install ${list[@]}
sudo yum install cuda-drivers-fabricmanager-{
   DRIVER_BRANCH}
# 其中DRIVER_VERSION为完整版本,例如470.82.01
# DRIVER_BRANCH为470
FFmpeg编译配置
固定路径
PATH="/opt/ffmpeg_build/bin:$PATH" PKG_CONFIG_PATH="/opt/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="/opt/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I/opt/ffmpeg_build/include -I/usr/local/cuda/include" \
  --extra-ldflags="-L/opt/ffmpeg_build/lib -L/usr/local/cuda/lib64" \
  --extra-libs=-lpthread \
  --extra-libs=-lm \
  --bindir="/opt/ffmpeg_build/bin" \
  --enable-gpl \
  --enable-libfdk_aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree \
  --enable-nvenc \
  --enable-cuda \
  --enable-cuvid \
  --enable-libnpp
#  --enable-cuda-nvcc \
#  --enable-cuda-llvm

用户目录路径
PATH="$HOME/ffmpeg/ffmpeg_build/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg/ffmpeg_build/include -I/usr/local/cuda/include" \
  --extra-ldflags="-L$HOME/ffmpeg/ffmpeg_build/lib -L/usr/local/cuda/lib64" \
  --extra-libs=-lpthread \
  --extra-libs=-lm \
  --bindir="$HOME/ffmpeg/ffmpeg_build/bin" \
  --enable-gpl \
  --enable-libfdk_aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree \
  --enable-nvenc \
  --enable-cuda \
  --enable-cuvid \
  --enable-libnpp
#  --enable-cuda-nvcc \
#  --enable-cuda-llvm
通用编译命令
# 方式一
# 利用多CPU核心编译以加快速度
make -j 8
# 编译并安装
make install

# 方式二
# 使用合并命令
make -j 8 && make install
创建软连接
# ln -s 源文件 目标文件(连接到哪个文件)
ln -s /opt/ffmpeg_build/bin/ffmpeg /usr/bin/ffmpeg
CUDA工具包卸载
# 卸载CUDA工具包
sudo yum remove "cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
 "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*"

# 卸载驱动程序
sudo yum remove "*nvidia*" 

相关推荐

  1. FFmpeg编译安装外部包括NVIDIA

    2024-02-17 19:32:01       62 阅读
  2. linux编译ffmpeg动态

    2024-02-17 19:32:01       52 阅读
  3. FFMPEG编译安装、简单使用

    2024-02-17 19:32:01       58 阅读
  4. 编译安装

    2024-02-17 19:32:01       63 阅读
  5. QT编程实现播放器(一)ffmpeg编译

    2024-02-17 19:32:01       37 阅读
  6. 【使用Ubuntu编译FFmpeg生成Android动态/静态

    2024-02-17 19:32:01       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-17 19:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-17 19:32:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-17 19:32:01       82 阅读
  4. Python语言-面向对象

    2024-02-17 19:32:01       91 阅读

热门阅读

  1. C++ 最多参加的场次。

    2024-02-17 19:32:01       53 阅读
  2. vue3 axios二次封装

    2024-02-17 19:32:01       64 阅读
  3. 安装GeoServer,配置CORS

    2024-02-17 19:32:01       50 阅读
  4. 面试计算机网络框架八股文十问十答第六期

    2024-02-17 19:32:01       57 阅读
  5. 国产计算机的种类和应用

    2024-02-17 19:32:01       48 阅读
  6. 实现钉钉自定义机器人推送markdown类型消息

    2024-02-17 19:32:01       54 阅读
  7. 4 存储器管理(上)

    2024-02-17 19:32:01       56 阅读
  8. 倒计时52天(待续,,,

    2024-02-17 19:32:01       48 阅读