目录
一、下载FFmpeg的编译源码
二、编译源码
三、ffmpeg工具结构解析
1、bin目录
2、include库
3、lib库
四、注意事项
五、可能出现的一些问题
1、某些工具未安装/版本过久
2、缺少pkg-config工具
3、缺少ffmplay
FFmpeg 是一个开源的跨平台音视频处理工具集,它包含了一系列的程序、库和工具,用于录制、转换和流处理音视频文件和流媒体。
一、下载FFmpeg的编译源码
进入网站:http://ffmpeg.org/download.html
在网站中先择git地址进行下载。如果git下载比较慢,也可以将选择浏览器下载后转移到Linux虚拟机中或直接在Ubuntu的内置浏览器中进行下载。
二、编译源码
执行下述命令:
./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-ffplay
sudo make -j 4
sudo make install
如果编译成功,那么将会在安装路径/user/local/ffmpeg下出现如下子目录
三、ffmpeg工具结构解析
下面我们来看一下安装好的ffmpeg中的这些子目录中我们需要使用到的东西
bin:
bin
目录一般存放可执行文件(binaries),即程序的二进制文件。在 FFmpeg 中,这个目录存放了ffmpeg
、ffplay
、ffprobe
等命令行工具的可执行文件。当你在终端中输入命令时,系统会在这个目录中查找对应的可执行文件来执行命令。include:
include
目录通常存放头文件(header files),这些文件包含了程序接口的声明和定义,供开发者在自己的程序中引用和调用。在 FFmpeg 中,这个目录存放了各个模块的头文件,如libavcodec
、libavformat
等模块的头文件,允许开发者在自己的代码中使用 FFmpeg 的功能。lib:
lib
目录一般存放库文件(libraries),这些文件包含了程序在编译时链接的代码和函数。在 FFmpeg 中,这个目录存放了各个模块的静态库文件(如.a
文件)和动态库文件(如.so
文件),供开发者在自己的应用程序中链接使用 FFmpeg 提供的功能。share:
share
目录通常存放共享文件(shared data),这些文件可以被多个程序或者用户共享使用。在 FFmpeg 中,这个目录可能包含一些共享的配置文件、文档或者其他资源文件,帮助用户更好地使用和理解 FFmpeg 的功能和特性。
1、bin目录
重点主要在于bin目录下的三个工具
ffmpeg:
ffmpeg
是 FFmpeg 项目中最主要的命令行工具之一,用于音视频的录制、转换以及流处理。- 它支持从多种输入源(文件、摄像头、网络流等)读取音视频数据,然后可以对其进行编解码、过滤、转码等操作,最后将处理后的结果输出到文件或者流媒体服务器中。
ffplay:
ffplay
是 FFmpeg 提供的一个简单音视频播放器,基于 SDL(Simple DirectMedia Layer)库。- 它能够播放多种音视频格式,支持快进、快退、循环播放等基本功能,是调试和测试音视频文件的方便工具。
ffprobe:
ffprobe
是 FFmpeg 提供的音视频流分析工具,用于分析媒体文件或者流的详细信息。- 它可以提取音视频文件的元数据(如分辨率、编码格式、帧率、比特率等),帮助用户了解和分析媒体文件的特性和结构。
2、include库
用于后续的二次开发
libavcodec:
- 这是 FFmpeg 中最重要的模块之一,包含了各种音视频编解码器。
libavcodec
提供了将音频和视频数据编码和解码的功能。例如,它支持将视频从一种格式转换为另一种格式,如将 H.264 编码的视频转换为 MPEG-2 编码的视频。- FFmpeg 中的许多命令行工具和应用程序都依赖于
libavcodec
来处理音视频编解码任务。libavdevice:
- 这个模块包含了各种设备的输入和输出支持代码。
libavdevice
允许 FFmpeg 支持不同的音视频输入和输出设备,如摄像头、音频输入设备、视频捕获卡等。- 例如,使用
libavdevice
可以从摄像头捕获视频数据或从麦克风捕获音频数据。libavfilter:
libavfilter
模块实现了音视频过滤器框架。- 这个模块允许用户应用各种音视频过滤器来处理音视频流。过滤器可以用来进行裁剪、缩放、旋转、去噪、水印等操作。
- FFmpeg 中的
ffmpeg
命令行工具通过libavfilter
支持将一个或多个过滤器应用到输入音视频流,并将输出写入到文件或者流媒体服务器。libavformat:
libavformat
提供了音视频格式的封装和解封装功能。- 这个模块允许 FFmpeg 支持从各种音视频格式中读取数据,以及将音视频数据封装为不同的格式,如 MP4、AVI、FLV 等。
- 通过
libavformat
,FFmpeg 能够处理从本地文件到网络流媒体的广泛应用场景。libavutil:
libavutil
是一个工具库,提供了各种用于音视频处理的工具函数。- 这个模块包含了用于数学运算、数据结构操作、字节操作、日志、时间处理等功能的工具函数。
- 许多 FFmpeg 的其他模块都依赖于
libavutil
中的函数来实现它们的功能。libswresample:
libswresample
提供了音频重采样功能。- 这个模块用于将音频数据从一个采样率或格式转换为另一个采样率或格式,以便匹配特定的音频设备或格式要求。
- FFmpeg 中处理音频流时经常需要使用
libswresample
来进行采样率调整或格式转换。libswscale:
libswscale
提供了视频图像缩放和颜色空间转换的功能。- 这个模块可以将视频帧从一种像素格式转换为另一种像素格式,以及进行图像大小的缩放和裁剪。
- FFmpeg 使用
libswscale
来处理视频流中的图像缩放、格式转换以及色彩空间的转换,例如将 RGB 格式的图像转换为 YUV 格式。
3、lib库
libavcodec.a:
libavcodec.a
是 FFmpeg 中的静态链接库,包含了各种音视频编解码器的实现代码。静态库在编译时会被直接链接到应用程序中,使得应用程序在运行时不再需要动态加载。libavdevice.a:
libavdevice.a
是包含各种音视频输入和输出设备支持代码的静态链接库。它允许应用程序通过 FFmpeg 访问和操作音视频设备,如摄像头、音频输入设备等。libavfilter.a:
libavfilter.a
包含音视频过滤器框架的实现代码。这个库允许应用程序使用各种过滤器对音视频流进行处理,如裁剪、缩放、旋转、去噪等操作。libavformat.a:
libavformat.a
包含音视频格式封装和解封装的实现代码。它允许应用程序读取和写入各种音视频格式的文件和流媒体。libavutil.a:
libavutil.a
是 FFmpeg 的实用工具函数库的静态链接库。它包含了各种常用的工具函数,用于数学运算、数据结构操作、日志处理等。libswresample.a:
libswresample.a
包含音频重采样功能的实现代码。它允许应用程序将音频数据从一个采样率或格式转换为另一个采样率或格式。libswscale.a:
libswscale.a
包含视频图像缩放和颜色空间转换功能的实现代码。它允许应用程序对视频帧进行大小缩放、像素格式转换以及色彩空间转换。pkgconfig:
pkgconfig
目录包含了用于 pkg-config 工具的配置文件。这些文件允许开发者在编译和链接应用程序时,通过 pkg-config 查询 FFmpeg 库的编译和链接选项。
四、注意事项
如果需要关闭静态库,打开动态库,可以在第一条命令的末尾再添加下述命令
--disable-static --enable-shared
在编译过程中,如果对于一些参数的意义不太清楚,可以通过下述命令来查看命令的含义
./configure -help | grep "需要查看的参数名"
五、可能出现的一些问题
1、某些工具未安装/版本过久
执行下述命令:
sudo apt update
sudo apt upgrade
sudo apt install nasm
2、缺少pkg-config工具
这里其实和上述问题处理一样
sudo apt install pkg-config
3、缺少ffmplay
如果安装结束发现bin目录下没有ffmplay,那就需要先安装,再重新执行第二部分的内容
sudo apt install libsdl2-dev