FFmpeg 是一款音视频编解码工具,同时也是一组音视频编解码开发套件,为音视频开发者提供了丰富的音视频处理的调用接口。
FFmpeg中的“FF”指的是“Fast Forward”,“mpeg”则是人们通常理解的Moving Picture Experts Group(动态图像专家组)。
作为一套开源音视频编解码套件,FFmepg可以从网上自由下载,官方网站:http://ffmpeg.org/download.html
源码官方下载地址
https://git.ffmpeg.org/ffmpeg.git 官方主git仓库
https://git.ffmpeg.org/ffmpeg-web 官方主网址仓库
https://git.ffmpeg.org/fateserver fate server软件仓库
镜像地址(下面三个都是github上的镜像网址)
https://github.com/FFmpeg/FFmpeg
https://github.com/FFmpeg/web
https://github.com/FFmpeg/fateserver
源代码的下载,可以通过github或者官网来下载。
(base) $ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
Cloning into 'ffmpeg'...
remote: Enumerating objects: 25466, done.
remote: Counting objects: 100% (25466/25466), done.
remote: Compressing objects: 100% (10428/10428), done.
remote: Total 686019 (delta 19479), reused 19934 (delta 14986)
Receiving objects: 100% (686019/686019), 170.00 MiB | 4.23 MiB/s, done.
Resolving deltas: 100% (553363/553363), done.
Updating files: 100% (8037/8037), done.
到此,FFmpeg源代码库就算下载下来了。下面,我们选择一个稳定版本进行学习和研究,选择3.3的版本。
(base) $ cd ffmpeg/
(base) $ git branch -a
* master
remotes/origin/HEAD -> origin/master
... ...
remotes/origin/release/3.1
remotes/origin/release/3.2
remotes/origin/release/3.3
remotes/origin/release/4.1
remotes/origin/release/4.2
remotes/origin/release/4.3
(base) $ git checkout -b release/3.3 remotes/origin/release/3.3
Updating files: 100% (4700/4700), done.
Branch 'release/3.3' set up to track remote branch 'release/3.3' from 'origin'.
Switched to a new branch 'release/3.3'
FFmpeg的基本组成包含:AVFormat、AVCodec、AVFilter、AVDevice、swscale、swresample等
下图是FFmpeg文件截图
(1)AVFormat的实现都在libavformat。其实现了目前多媒体领域的绝大部分封装格式,包括封装和解封装,如flv、mp4、ts等文件格式,rtmp、rtsp、hls等网络封装格式。
(2)AVCodec的实现都在libavcodec。其实现了目前多媒体领域绝大部分常用的编解码格式,包含编码和解码。AVCodec支持的编码格式有MPEG4、H264、H265、AAC、mp3等多种编码格式,它是FFmpeg的编解码模块。
(3)AVFilter的实现都在libavfilter。其提供了一个通用的音频、视频、字幕等滤镜处理框架,它可以有多个输入和多个输出,非常灵活,能够满足音视频开发者基础的滤镜需求。
(4)AVDevice的实现都在libavdevice。通过其方法可以读取电脑(或其他设备上)的多媒体设备的数据,或者输出到指定的多媒体设备上。
(5)swscale的实现都在libswscale。这一个视频图像转换计算模块,它可以帮助把图像缩放和格式转换,比如yuv转rgb、1080P转720P等
(6)swresample的实现都在libswresample。这是音频转换计算模块,它可以进行音频的重采样、声道变换、音频存储布局转换,比如48KHZ采用率转为44.1KHZ采样率、双声道数据转为单声道等。
FFmpeg在官方网站上提供了已编译好的可执行文件。因为FFmpeg是开源的,所以使用者可根据自己的需要修改、增加或者减少相关功能,并进行手动编译。
FFmpeg是通过configure命令选择打开或者关闭一些功能,然后通过configure创建所需要编译功能的Makefile文件,configure成功后执行make,最后执行make install完成FFmpeg的安装。
通过configure命令查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议等。
(base) $ ./configure --help
./configure --list-decoders
下面,我们在Mac电脑上编译一个FFmpeg。要求是:支持MP4、FLV、M3U8的封装和解封装,支持H264、H265格式的编码和解码,支持aac、mp3编码和解码,支持RTMP、HLS、HTTP-FLV的传输协议,支持基本filter的能力,支持图像格式的转换和音频重采样,编译ffmpeg、ffplay、ffprobe。
然后执行源码目录下的configure脚本,设置一些编译参数,做一些编译前的准备工作
./configure --prefix=/usr/local/ffmpeg3.3 --disable-asm --enable-static --disable-shared --enable-gpl --enable-nonfree --enable-ffplay --enable-sdl2 --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-decoder=aac --enable-decoder=h264 --enable-decoder=hevc --enable-muxers --enable-demuxers --enable-encoder=aac --enable-avcodec --enable-avformat --enable-avfilter --enable-network --enable-protocols --enable-protocol=rtmp --enable-protocol=hls --enable-protocol=http --enable-protocol=https --enable-protocol=ffrtmphttp
通过配置后的面板信息可知:编码、封装、协议、滤镜都满足了我们的需求。
make -j8
将编译好的库安装到指定的位置:/usr/local/ffmpeg3.3
make install