FFMPEG简介

目录

1 FFMPEG简介

1.1 FFMPEG定义

1.2 FFMPEG历史

1.3 FFMPEG的影响范围

1.4 FFMPEG组成

1.4.1 AVFormat

1.4.2 AVCodec

1.4.3 AVFilter

1.4.4 AVDevice

1.4.5 AVUtil

1.4.6 swscale

1.4.7 swresample


1 FFMPEG简介


1.1 FFMPEG定义


FFMPEG全称为fast forward moving picture expert group,读作“ef ef em peg”,MPEG为大名鼎鼎的ISO的动态图像专家组。ffmpeg的官方网站是:http://ffmpeg.org/。

套用ffmpeg官网用语来定义或者介绍FFMPEG:

“FFmpeg is the leading multimedia framework to decode, encode, transcode, mux, demux, stream, filter and play. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATE across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.”

 FFMPEG是领先的多媒体框架,提供了音视频的编码,解码,转码,封装,解封装,流,滤镜,播放等功能。它几乎支持所有的音视频格式,不管是标准委员会,社区,还是公司设计的。它是高度可移植,跨平台的:可以在Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris等系统上,在各种不同的编译环境,机器架构,配置下编译,运行,并通过测试。

1.2 FFMPEG历史


2000年, FFMPEG由法国天才程序员Fabrice Bellard开发出初版;

2004年,Michael Niedermayer接手并维护至今,其将滤镜子系统libavfilter加入FFMPEG项目中,使得FFMPEG处理多媒体更加多样化,更加方便;

2011年,FFMPEG项目的一些提交者对项目管理方式不满,构建了另外一个新项目Libav

2015年8月,Michael Niedermayer主动辞去FFMPEG项目负责人职务,在之前的这几年中,其从Libav项目中移植了大量代码和功能到FFMPEG中,其辞职的主要目的是希望两个项目最终能合并在一起发展。

2019年,当前由于越来越多的人使用并参与到FFMPEG代码贡献中,其发展越来越快,当前版本(20190217)已经是4.1

1.3 FFMPEG的影响范围


因为FFMPEG本身是开源项目,并且在LGPL/GPL协议下发布的任何人都可以自由使用,但必须严格遵守LGPL/GPL协议,其被很多开源的项目或者非开源的项目所使用:

1. FMPEG作为内核视频播放器:

ijkplayerVLCMplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音...

2. FFMPEG作为内核的转码工具:

ffmpeg,格式工厂...

3. FFMPEG作为内核的Directshow Filter:

fdshow,lav filters...           

4. 其他知名软件:

微信,钉钉,Google Chrome...          

1.4 FFMPEG组成

官网介绍FFMPEG是一个多媒体框架,其包含了多个模块库:AVFormat,AVCodec,AVFilter,AVDivice,AVUtil等,并且提供了基于这些库的三个命令行工具: ffmpeg,ffplay,ffprobe。

使用ffmpeg的方式分为两种:一种方式是直接使用ffmpeg提供的这三个命令行工具来进行多媒体处理;另一种是使用ffmpeg封装的这些库进行二次开发。

以下分别对各模块库的功能进行简单的介绍。

1.4.1 AVFormat

  AVFormat中实现了当前多媒体领域中绝大多数媒体封装格式,此处分装应明确说明为流媒体网络协议封装以及音视频容器封装。具体地,支持RTMP,RTSP,MMS,HLS等流媒体网络协议;支持MP3,MP4,FLV,MKV,TS等基本上你能想到媒体文件封装格式。并且还可以根据实际需求,对媒体封装格式进行扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块,并重新编译即可。

1.4.2 AVCodec

AVCodec中实现了目前多媒体领域中绝大多数常用的编解码格式,即支持编码,也支持解码。AVCodec处理支持MPEG4,AAC,MJPEG等自带的媒体编码格式外,还支持第三方的编解码器。比如支持H.264/AVC编解码,需要使用x264编解码器;支持H.265/HEVC编码,需要使用x265编解码器;mp3编码,需要使用libmp3lame编解码器。进一步如果需要增加自己的编码格式,或者是硬件编解码,则需要在AVCodec中增加相应的编解码器。

1.4.3 AVFilter

AVFilter提供了一个通用的音频,视频,字幕等滤镜处理框架。具体的,将在后续FFMPEG命令行工具使用中介绍滤镜功能。

1.4.4 AVDevice

AVDevice包含音视频采集和渲染相关的输入输出设备接口,兼容多数的通用多媒体输入/输出软件框架,比如Video4Linux, Video4Linux2, VfW, and ALSA。

1.4.5 AVUtil

这个库提供的是基本的工具,提供给其他库来使用,比如文件操作,时间操作,md5  sha加密方法等等。

1.4.6 swscale

FFMPEG的视频图像转化计算模块,提供了高级别的图像转换API, 比如进行图像缩放和像素格式转换,将图像从1080p转换成720p或480p,或者将图像从yuv420p转换成yuyv,或者yuv转rgb等图像格式转换。

1.4.7 swresample

 FFMPEG的音频转换计算模块,提供了高级别的音频重采样API。比如操作音频采样,音频通道布局转换与布局调整。

你可能感兴趣的:(FFMPEG简介)