目录
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*"