在 Ubuntu 24.04 上编译和安装 FFmpeg 并生成完整的动态库和静态库,确实是一个复杂而详尽的过程,涉及很多不同的步骤与配置选项。以下内容将详细讲解如何在 Ubuntu 上进行 FFmpeg 编译安装,生成所需的动态库和静态库。
一、准备工作
在开始之前,确保系统已安装必要的依赖和工具。如果你正在使用 Ubuntu 24.04(或其他版本),你可以通过以下命令安装编译 FFmpeg 所需的基本工具。
- 更新系统
首先,更新 Ubuntu 的包管理器索引,确保所有的包是最新的。‘
sudo apt update
sudo apt upgrade
2. 安装必要的依赖包
FFmpeg 编译过程依赖很多库和工具,你需要先安装一些必备的开发工具和库。
sudo apt install -y \
build-essential \
yasm \
nasm \
pkg-config \
libx264-dev \
libx265-dev \
libvpx-dev \
libfdk-aac-dev \
libmp3lame-dev \
libopus-dev \
libavutil-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libpostproc-dev \
libswresample-dev \
libavfilter-dev \
zlib1g-dev \
libfreetype6-dev \
libfontconfig1-dev
命令解析:
1.build-essential
安装一组基础开发工具和库,包括编译器 (gcc, g++) 和常见的构建工具(如 make)。这是开发和编译 C/C++ 程序的必备工具集。
2.yasm
安装 YASM,一个高性能的汇编语言编译器,常用于视频编码、解码时处理低级优化。特别是许多视频编解码库(如 FFmpeg)会用到它来加速处理。
3.nasm
安装 NASM,另一种流行的汇编语言编译器,用于生成汇编代码。它也常用于视频编码的性能优化,特别是在多媒体编解码库的开发过程中。
4.pkg-config
安装 pkg-config 工具,用于查询已安装库的版本信息。许多开发工具和库会通过它来确定如何链接到相应的库。
多媒体相关的库:
1.libx264-dev
安装 x264 编码库的开发文件,x264 是一种高效的 H.264 视频编码器,广泛用于视频转码和流媒体。
2.libx265-dev
安装 x265 编码库的开发文件,x265 是 H.265/HEVC(高效视频编码)标准的编码器,具有更高的压缩率,适用于高分辨率和高清晰度视频。
3.libvpx-dev
安装 libvpx 库的开发文件,这是 Google 的 VP8/VP9 编解码库,用于 WebM 视频格式,常见于 YouTube 等视频平台。
4.libfdk-aac-dev
安装 FDK-AAC(Fraunhofer AAC)音频编码库的开发文件,它是 AAC(高级音频编码)标准的高效编码器,通常用于音频流媒体和压缩。
5.libmp3lame-dev
安装 LAME 音频编码器的开发文件,LAME 是一个高质量的 MP3 音频编码器,广泛用于音频转码。
6.libopus-dev
安装 Opus 编解码器的开发文件,Opus 是一种低延迟、高质量的音频编解码器,广泛应用于语音通话、视频会议和音频流媒体中。
FFmpeg 相关的库:
1.libavutil-dev
安装 libavutil 库的开发文件,这是 FFmpeg 项目中的一个实用工具库,包含多种多媒体处理的实用函数和算法。
2.libavcodec-dev
安装 libavcodec 库的开发文件,提供多种视频和音频编解码器的实现,是 FFmpeg 的核心部分,负责处理音视频编码和解码。
3.libavformat-dev
安装 libavformat 库的开发文件,负责处理音视频的格式封装和流协议,支持多种媒体文件格式(如 MP4、AVI、MKV 等)。
4.libswscale-dev
安装 libswscale 库的开发文件,提供图像格式转换和缩放功能,常用于视频处理中。
5.libpostproc-dev
安装 libpostproc 库的开发文件,提供视频后处理功能,如降噪、去块效应等。
6.libswresample-dev
安装 libswresample 库的开发文件,提供音频采样率转换、重采样等音频处理功能。
7.libavfilter-dev
安装 libavfilter 库的开发文件,提供视频和音频的滤镜和效果处理,常用于视频编辑和转码时应用滤镜。
其他开发库:
1.zlib1g-dev
安装 zlib 库的开发文件,这是一个数据压缩库,广泛用于文件压缩和解压。
2.libfreetype6-dev
安装 freetype 库的开发文件,freetype 是一个自由开源的字体引擎,支持多种字体格式,常用于图形界面开发和视频字幕渲染。
3.libfontconfig1-dev
安装 fontconfig 库的开发文件,fontconfig 是一个字体配置库,负责查找和配置系统上的字体,通常与 freetype 配合使用。
2. 下载 FFmpeg 源代码
从 FFmpeg 官方 Git 仓库或其官网获取源代码。
cd ~
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
如果你不想使用 Git,可以直接从官网下载压缩包:
wget https://ffmpeg.org/releases/ffmpeg-7.1.tar.xz
xz -d ffmpeg-7.1.tar.xz
tar xvf ffmpeg-7.1.tar
cd ffmpeg-7.1
3. 配置编译选项
在 FFmpeg 源代码目录下,我们需要配置编译选项以生成我们需要的库和功能。它包括了动态库和静态库的生成,并开启了常见的编解码器和功能,根据个人需要,自行删减。
./configure \
--prefix=/home/yhm/build \
--disable-debug \
--enable-shared \
--enable-static \
--disable-doc \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libopus \
--enable-pic \
--enable-avfilter \
--enable-postproc \
--enable-avresample \
--enable-libfreetype \
--enable-libfontconfig
基本选项:
–prefix=/home/yhm/build
指定 FFmpeg 安装的目录。编译完成后,FFmpeg 的二进制文件、库文件等将安装到 /home/yhm/build 目录下。默认情况下,FFmpeg 会安装到 /usr/local 目录。
–disable-debug
禁用调试信息的编译。这个选项通常用来加快编译速度,并使得最终的程序文件更小。
–enable-shared
启用生成共享库(动态库)。如果启用此选项,FFmpeg 将编译并安装共享库(例如 .so 文件)。如果不启用,FFmpeg 将仅编译静态库。
–enable-static
启用生成静态库。这个选项使得 FFmpeg 会编译并安装静态库(例如 .a 文件)。
–disable-doc
禁用生成文档。FFmpeg 默认会编译文档,如果不需要,可以禁用此选项,减少编译时间和所需的磁盘空间。
功能选项:
–enable-gpl
启用 GPL 许可证的代码支持。FFmpeg 中一些功能是基于 GPL 许可的,比如某些视频编解码器。如果启用此选项,可以使用这些功能。
–enable-nonfree
启用非自由(Non-Free)许可的功能。例如,某些编解码器(如 H.264、AAC 等)需要非自由许可。启用此选项意味着编译的 FFmpeg 将包含这些非自由功能,但也意味着 FFmpeg 的输出将无法再作为开源软件自由发布。
编解码器支持:
–enable-libx264
启用对 H.264 视频编码的支持,依赖于 libx264 库。H.264 是一种常见的视频编解码格式。
–enable-libx265
启用对 H.265(HEVC)视频编码的支持,依赖于 libx265 库。H.265 是一种新一代的视频编码格式,比 H.264 在相同质量下提供更高的压缩效率。
–enable-libvpx
启用对 VP8 和 VP9 视频编码/解码的支持,依赖于 libvpx 库。VP8 和 VP9 是 Google 推出的开源视频编解码器。
–enable-libfdk-aac
启用对 AAC 音频编码的支持,依赖于 libfdk-aac 库。AAC(Advanced Audio Codec)是一种常用的音频编码格式,通常用于高质量音频流和视频文件。
–enable-libmp3lame
启用对 MP3 音频编码的支持,依赖于 libmp3lame 库。MP3 是一种广泛使用的音频编码格式。
–enable-libopus
启用对 Opus 音频编码的支持,依赖于 libopus 库。Opus 是一种高效的音频编解码器,特别适用于低延迟的语音和音乐流。
编译选项:
–enable-pic
启用编译为位置独立代码(Position Independent Code, PIC)。位置独立代码适合用于共享库(动态库)的生成,确保代码可以在任何内存地址运行。
–enable-avfilter
启用 FFmpeg 的音视频过滤器支持。音视频过滤器可以用来处理视频和音频流,比如调整视频大小、添加水印、修改音频音量等。
–enable-postproc
启用后处理支持。后处理功能允许对视频流进行额外的处理,比如去噪、提高质量等。
–enable-avresample
启用 AVResample 库支持,它是 FFmpeg 用于音频重采样的库。启用该选项后,FFmpeg 可以进行音频采样率、通道数等的转换。
字体和图形支持:
–enable-libfreetype
启用对 FreeType 字体库的支持。FreeType 是一个开源的字体引擎,可以用来渲染文本,比如在视频上添加字幕时,FFmpeg 会用到它。
–enable-libfontconfig
启用对 FontConfig 字体配置库的支持。FontConfig 是一个用于查找和管理系统中字体的库,FFmpeg 可以通过它来加载和管理字体。
4. 编译和安装
配置完成后,开始编译并安装 FFmpeg。此过程可能需要一段时间,具体取决于您的计算机性能。
make -j$(nproc)
sudo make install
-j
(
n
p
r
o
c
)
:使用所有可用的
C
P
U
核心进行并行编译,
(nproc):使用所有可用的 CPU 核心进行并行编译,
(nproc):使用所有可用的CPU核心进行并行编译,(nproc) 会自动获取系统的 CPU 核心数。
sudo make install:将 FFmpeg 安装到指定目录。
5. 配置动态库路径
如果您启用了动态库支持,还需要确保系统可以找到 FFmpeg 的动态库。你可以通过将其路径添加到系统的 LD_LIBRARY_PATH 中,或者将其添加到 /etc/ld.so.conf.d/ 中。
cd ~
vim .bashrc
export LD_LIBRARY_PATH=/home/yhm/build/lib:$LD_LIBRARY_PATH
export PATH=$PATH:/home/yhm/build/bin
或者
echo "/home/yhm/build/lib" | sudo tee /etc/ld.so.conf.d/ffmpeg.conf
sudo ldconfig