Ubuntu24.04 下源码编译安装最全的ffmpeg,生成动态库和静态库

在 Ubuntu 24.04 上编译和安装 FFmpeg 并生成完整的动态库和静态库,确实是一个复杂而详尽的过程,涉及很多不同的步骤与配置选项。以下内容将详细讲解如何在 Ubuntu 上进行 FFmpeg 编译安装,生成所需的动态库和静态库。

一、准备工作

在开始之前,确保系统已安装必要的依赖和工具。如果你正在使用 Ubuntu 24.04(或其他版本),你可以通过以下命令安装编译 FFmpeg 所需的基本工具。

  1. 更新系统
    首先,更新 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
### 配置使用OpenCV进行C++开发 #### 安装依赖包 为了确保系统的环境适合于构建运行OpenCV程序,在开始之前应该更新系统软件源并安装一些必要的工具支持库。这一步骤可以通过执行一系列命令来完成,这些命令会下载最新的软件列表以及任何可用的安全补丁。 ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev python3-dev python3-numpy \ libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev \ libopenblas-dev liblapack-dev checkinstall yasm ffmpeg v4l-utils ``` #### 下载与编译OpenCV及其贡献模块 获取官方发布的OpenCV版本连同额外的功能集——即`opencv_contrib`仓库的内容。按照指定的方式设置好路径变量之后,可以利用CMake配合Ninja生成器来进行高效快速的项目构建过程[^1]。 ```bash git clone https://github.com/opencv/opencv.git -b 4.10.0 --depth 1 cd opencv mkdir build && cd build cmake .. -B . -GNinja -DCMAKE_INSTALL_PREFIX=/opt/opencv4.10.0 \ -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules/ ninja sudo ninja install ``` 请注意替换上述命令中的`/path/to/opencv_contrib/modules/`为实际存放`opencv_contrib`模块的位置。 #### 设置环境变量 为了让编译后的OpenCV能够被其他应用程序找到,建议将安装位置加入到系统的PATH环境中去。编辑用户的shell配置文件(比如`.bashrc`),添加如下行: ```bash export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/opencv4.10.0/lib/pkgconfig export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opencv4.10.0/lib ``` 使更改生效: ```bash source ~/.bashrc ``` #### 创建简单的测试程序验证安装成功与否 编写一段简易代码用于确认OpenCV是否已经被正确地集成到了当前的工作站当中。创建一个新的工作空间,并在里面放置一个名为`main.cpp`的小例子。 ```cpp #include <iostream> #include "opencv2/opencv.hpp" int main() { cv::Mat image = cv::imread("/path/to/image.jpg"); if (image.empty()) { std::cerr << "Could not open or find the image!" << std::endl; return -1; } cv::imshow("Display window", image); int k = cv::waitKey(0); // Wait indefinitely until a key is pressed return 0; } ``` 接着通过g++链接静态或动态链接库的形式将其编译成可执行文件。这里假设已经设置了正确的环境变量,则可以直接调用pkg-config自动解析所需的参数。 ```bash g++ `pkg-config --cflags --libs opencv4` main.cpp -o test_opencv_program ./test_opencv_program ``` 如果一切顺利的话,将会弹出一个小窗口展示所加载图片的内容;反之则可能遇到错误提示信息,这时就需要仔细排查原因所在了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值