FFmpeg 框架基本组成包括 AVFormat,AVCodec,AVFilter,AVDevice,AVUtil等模块库。 FFmpeg 初识 - 图1AVFormat:实现多媒体封装格式,包括封装和解封装,入MP4,FLV等文件封装格式,RTMP,RTSP,MMS,HLS等网络协议封装格式。FFmpeg 是否支持某这个多媒体封装格式,取决于编译时是否包含了该格式的库。

AVCodec:实现多媒体编解码格式,既支持编码,也支持解码,除了支持MPEG4,AAC,MJPEG等自带的多媒体编解码格式之外,还支持第三方的编解码器,如 H.264(AVC)编码需要使用 x264 编解码器,H.265(HEVC)编码需要使用 x265 编解码器,MP3(mp3lame)编码需要使用libmp3lame编解码器。

AVFilter:提供了一个通用的音频,视频,字幕等滤镜处理框架。

AVDevice:提供了一个通用的框架,用于获取一些多媒体常用的输入/输出设备,比如Video4Linux2,Vfw,DShow,ALSA等。

AVUtil:提供了一套辅助多媒体编程的工具库,比如安全可移植的字符串功能,随机数生成函数,额外的一些数学函数等。

FFmpeg 在 Window上的编译

首先我们访问 FFmpeg 的官网,并使用 git 工具下载 FFmpeg 的源码。因为 FFmpeg 是在Linux下使用 GCC 工具开发的,所以我们要在 Window 系统上编译的话,需要搭建一下对应的环境。

打开 MSYS 官网 下载 msys2 程序并安装,安装完成之后打开安装的 mingw64.exe,然后 cd 到刚刚下载的 FFmpeg 源码目录下。

执行 ./configure 命令,然后出现下面的错误:
r.png
我们按照提示来加入 --enable-cross-compile 之后又会提示你 Unknown option “—enable-cross-compile”。我们直接输入 gcc 然后回车可以发现它会提示:gcc: command not found。这其实是因为目前还没有安装 gcc 导致的,我们输入 pacman -S gcc 命令安装 gcc 编译器。
gcc.png
然后再次执行 ./configure 命令。
nasm9.png
这次提示你 nasm/yasm 没有发现或版本太老,同样的命令我们安装一下 nasm、yasm。
nasm-yasm-install.png
再次执行 ./configure 命令。

不出意外的话,这次可以成功执行 configure 命令,然后我们输入 make 命令进行编译,会出现提示:make: command not found。同样的,我们输入 pacman -S make 命令来安装 make命令。安装完成之后执行 make命令即可开始编译 FFmpeg 项目了。