FFmpeg 编译安装和静态安装
简介
FFmpeg 是一个领先的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创建的格式。本指南将详细介绍如何在 CentOS 8.5.2111 系统上从源代码编译并安装 FFmpeg 6.1.1 版本。从源代码编译安装可以确保您获得最新版本的功能,并可以根据您的特定需求进行定制。本博客主要依赖于 manus 生成,我通过 manus 给出的方案逐步运行并安装成功,并且我也对比了下预编译静态安装和编译安装的差别。
1. 预编译静态安装(新手推荐)
预编译静态安装是普通用户的首选,速度快操作少,只需要按照自己机器的型号和需要安装的版本进行选择,1分钟即装即用,但是缺点是有些动态库不支持,速度慢等等,但是我不是CV方向的深度用户,所以我没有卡到静态安装造成的瓶颈上
首先,我们要去官方预编译库中选择自己需要的版本,https://github.com/BtbN/FFmpeg-Builds/releases
其次,依次执行下面的命令就可以成功安装了,耗时取决于你的网速
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-6.1.1-amd64-static.tar.xz
tar xf ffmpeg-6.1.1-amd64-static.tar.xz
cd ffmpeg-n6.1-latest-linux64-gpl-6.1/bin
# 或者你可以选择添加路径的方式
sudo install -m 755 ffmpeg ffprobe /usr/local/bin
ffmpeg -version
2. 编译安装
编译安装版本选择更多,功能选择更多,对依赖包的使用更加极致,但是缺点就是安装的慢且复杂。不同的机器在编译配置的时候所需要的依赖包不同,我这里也是基于 manus 给出的建议进行罗列的,但在配置 ffmpeg configure
的时候一定不能报错,哪个包缺少或者版本依赖不对都要修改,否则在 make
编译的时候是通不过的
1. 更新系统
首先,更新您的系统,确保所有已安装的软件包都是最新版本。这有助于避免潜在的依赖问题。
sudo dnf update -y
2. 安装开发工具
安装编译 FFmpeg 所需的开发工具和库。Development Tools
组包含了 GCC、make 等基本编译工具。
sudo dnf groupinstall "Development Tools" -y
sudo dnf install epel-release -y
sudo dnf install git nasm yasm autoconf automake cmake libtool -y
3. 安装必要的依赖库
FFmpeg 依赖于许多第三方库来支持不同的音视频格式和功能。以下是一些常用的、推荐安装的库。您可以根据需要选择性安装。
重要提示: CentOS 8 已经停止维护,其官方仓库可能不再更新。您可能需要启用 PowerTools 或 CodeReady Linux Builder (CRB) 仓库来获取一些依赖。
启用 PowerTools 仓库 (如果尚未启用):
sudo dnf config-manager --set-enabled PowerTools
或者,对于某些较新的 CentOS 8 版本,可能需要启用 CodeReady Linux Builder (CRB) 仓库:
sudo dnf config-manager --set-enabled codeready-builder
安装依赖库:
sudo dnf install \
SDL2-devel \
zlib-devel \
bzip2-devel \
libXext-devel \
libXfixes-devel \
libXrandr-devel \
libXrender-devel \
libXv-devel \
libva-devel \
libvdpau-devel \
alsa-lib-devel \
pulseaudio-libs-devel \
libwebp-devel \
openjpeg2-devel \
lame-devel \
libvorbis-devel \
libtheora-devel \
libvpx-devel \
x264-devel \
x265-devel \
opus-devel \
v4l-utils-devel \
frei0r-devel \
libass-devel \
libbluray-devel \
libbs2b-devel \
libcaca-devel \
libcdio-paranoia-devel \
libdrm-devel \
libiec61883-devel \
libmodplug-devel \
libopenmpt-devel \
librtmp-devel \
libssh-devel \
libv4l-devel \
libxml2-devel \
openal-soft-devel \
openssl-devel \
speex-devel \
teem-devel \
twolame-devel \
vid.stab-devel \
vo-amrwbenc-devel \
wavpack-devel \
yasm-devel \
zimg-devel \
-y
请注意,上述列表包含了很多可选的库。如果您不需要所有功能,可以只安装您需要的库。例如,如果您不需要 H.264 编码,可以不安装 x264-devel
。
编译和安装 FFmpeg 6.1.1
1. 下载 FFmpeg 源代码
从 FFmpeg 官方网站下载 6.1.1 版本的源代码。您可以使用 wget
命令下载。
cd /usr/local/src
sudo wget https://ffmpeg.org/releases/ffmpeg-6.1.1.tar.bz2
sudo tar -xf ffmpeg-6.1.1.tar.bz2
cd ffmpeg-6.1.1
2. 配置编译选项
进入 FFmpeg 源代码目录后,运行 ./configure
命令来配置编译选项。您可以根据需要启用或禁用特定的组件和编解码器。以下是一个常用的配置示例,包含了许多常用功能。
sudo ./configure \
--prefix=/usr/local/ffmpeg \
--enable-shared \
--enable-gpl \
--enable-nonfree \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libwebp \
--enable-libtheora \
--enable-libvorbis \
--enable-libass \
--enable-libfreetype \
--enable-libfribidi \
--enable-libharfbuzz \
--enable-libfontconfig \
--enable-libspeex \
--enable-libv4l2 \
--enable-libxvid \
--enable-opencl \
--enable-opengl \
--enable-pthreads \
--enable-version3 \
--enable-hardcoded-tables \
--enable-avfilter \
--enable-postproc \
--enable-runtime-cpudetect \
--disable-debug \
--disable-static
配置选项说明:
--prefix=/usr/local/ffmpeg
: 指定 FFmpeg 的安装路径。建议安装到/usr/local/
下的独立目录,以便于管理。--enable-shared
: 编译共享库,这对于其他程序调用 FFmpeg 库非常有用。--enable-gpl
: 启用 GPL 许可下的组件。如果您计划分发您的应用程序,请注意 GPL 许可的限制。--enable-nonfree
: 启用非自由许可下的组件,例如x264
和x265
。同样,请注意许可限制。--enable-libmp3lame
,--enable-libopus
,--enable-libvpx
,--enable-libx264
,--enable-libx265
,--enable-libwebp
,--enable-libtheora
,--enable-libvorbis
,--enable-libass
,--enable-libfreetype
,--enable-libfribidi
,--enable-libharfbuzz
,--enable-libfontconfig
,--enable-libspeex
,--enable-libv4l2
,--enable-libxvid
: 启用对特定外部库的支持。只有安装了相应的*-devel
包,这些选项才能成功启用。--disable-debug
: 禁用调试信息,可以减小编译后的文件大小。--disable-static
: 禁用静态库编译,只编译共享库。
如果 configure
命令执行成功,它会显示一个总结,列出将要编译的组件和启用的功能。如果出现错误,通常是缺少某个依赖库,您需要根据错误信息安装相应的 *-devel
包。
3. 编译和安装
配置完成后,使用 make
命令编译 FFmpeg,然后使用 make install
进行安装。
sudo make -j$(nproc)
sudo make install
make -j$(nproc)
会利用所有可用的 CPU 核心进行并行编译,从而加快编译速度。
配置环境变量
为了让系统能够找到 FFmpeg 命令和库,需要配置环境变量。
1. 配置动态链接库路径
创建或编辑 /etc/ld.so.conf.d/ffmpeg.conf
文件,添加 FFmpeg 库的路径。
sudo echo "/usr/local/ffmpeg/lib" | sudo tee /etc/ld.so.conf.d/ffmpeg.conf
sudo ldconfig
ldconfig
命令会更新动态链接库缓存。
2. 配置 PATH 环境变量
将 FFmpeg 的可执行文件路径添加到系统的 PATH
环境变量中,这样您就可以在任何位置直接运行 ffmpeg
命令。
sudo echo 'export PATH="/usr/local/ffmpeg/bin:$PATH"' | sudo tee /etc/profile.d/ffmpeg.sh
source /etc/profile.d/ffmpeg.sh
为了使 PATH
环境变量永久生效,您可能需要重新登录或重启终端会话。
验证安装
安装完成后,验证 FFmpeg 是否已成功安装并可正常使用。
ffmpeg -version