在 Linux 上从源代码构建 FFmpeg
本页介绍如何在 Linux 上配置和构建FFmpeg。其中包括
- 获取 FFmpeg 源代码。
- 安装所需的依赖项。
- 从命令行配置 FFmpeg。
- 构建开发库。
获取 FFmpeg 源代码
您可以通过以下方式获取 FFmpeg 源代码:
- 从FFmpeg 下载页面下载。
- 从 git 克隆。例如,此命令将 7.1 版的 FFmpeg 源代码克隆到
~/ffmpeg
。$ git clone --branch n7.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
建议使用与Qt Multimedia 主页中记录的相同的 FFmpeg 版本。
以下段落假定您将 FFmpeg 源代码存储在~/ffmpeg
下。
先决条件
要构建 FFmpeg,需要以下工具和软件包:
- Yasm
- 您选择的安全后端开发包(见下文)。
安装软件包
要安装所需的软件包(包括用于 FFmpeg 的 Yasm),请运行:
$ apt-get install yasm
此外,如果要启用安全后端,则需要相应的开发者软件包,例如
$ apt-get install libssl-dev
对于其他后端,请安装相关软件包:
- 对于 OpenSSL:
libssl-dev
。 - 对于 GnuTLS:
libgnutls-dev
。 - 对于 LibreSSL (libtls):
libtls-dev
. - 对于 MbedTLS:
libmbedtls-dev
。
配置和构建 FFmpeg
在~/ffmpeg
目录内创建build
目录并导航进入:
$ mkdir ~/ffmpeg/build $ cd ~/ffmpeg/build
要配置 FFmpeg,请运行 :
$ ../configure --prefix=/usr/local/ffmpeg --disable-doc --enable-network --enable-shared
--prefix
参数指定了构建后安装 FFmpeg 开发库的路径。不需要文档,但应启用网络功能。要将 FFmpeg 作为静态库构建,请省略--enable-shared
选项。
如果要使用安全后端构建 FFmpeg,请选择相应的选项:
$ ../configure --enable-openssl # For OpenSSL $ ../configure --enable-gnutls # For GnuTLS $ ../configure --enable-libtls # For LibreSSL (libtls) $ ../configure --enable-mbedtls # For MbedTLS
确保安装了前面提到的相应开发者软件包。
硬件加速
默认情况下,除非安装了相应的软件包,否则 FFmpeg 在构建时不会进行硬件加速。为了获得更好的性能,尤其是在支持 GPU 的系统上,建议安装 VAAPI 开发包:
$ apt-get install libva-dev
这将使 FFmpeg 在配置过程中检测到 VAAPI 支持。
如果 FFmpeg 将与 NVIDIA 显卡一起使用,则应安装 NVIDIA 编解码器头文件。可从以下资源库下载:GitHub 上的 NVIDIA 编解码器头文件。
要编译并安装头文件,请运行以下命令:
$ mkdir ~/nv-codec-headers $ cd ~/nv-codec-headers $ git clone https://github.com/FFmpeg/nv-codec-headers.git $ mkdir build $ cd build $ make -j install
请确保检查nv-codec-headers
与您的英伟达驱动程序版本是否兼容,因为较新的nv-codec-headers
可能与较旧的驱动程序版本不兼容。有关详细信息,请参阅官方文档。
禁用自动检测
默认情况下,FFmpeg 会尝试自动检测构建系统上的可用依赖项。这包括硬件加速和安全后端。如果想禁用自动检测(例如,避免编译不必要的依赖项),可以使用以下方法:
$ ../configure --disable-autodetect
如果您在编译 FFmpeg 时使用了任何其他依赖项(如安全后端或硬件加速),请确保目标系统上已安装了所需的库。有几种处理方法
- 与 FFmpeg 一起提供依赖项的二进制文件。
- 确保在目标系统上安装了所需的二进制文件。
- 实施可查找真实库的库存根,并在找不到真实库时返回错误代码。
Linux 上的 RPATH 和 RUNPATH
在 Linux 上,FFmpeg 使用 RPATH 和 RUNPATH 元数据部分来管理库路径。我们建议使用patchelf
实用程序设置正确的运行路径:
$ patchelf --set-rpath "new/runpath" lib.so
默认情况下,patchelf
会修改 RUNPATH,因为 RPATH 在 Linux 上已经过时。要设置相对运行路径,可以使用$ORIGIN
变量,它可以使路径相对于可执行文件的位置:
$ patchelf --set-rpath "$ORIGIN/../lib" lib.so
这种方法可根据库的相对位置链接库,从而确保可移植性。
构建 FFmpeg
用所需选项配置好 FFmpeg 后,就可以构建和安装它了:
$ make -j install
如果编译无误,FFmpeg 开发库将安装在/usr/local/ffmpeg
目录中。然后,在配置Qt Multimedia 时,您可以通过设置FFMPEG_DIR
变量来引用该路径。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.