FFmepg(Fast Forward Moving Pictures Experts Group)是音视频的分离,转换,编码解码及流媒体的完全解决方案,它既是一款音视频编解码工具,也是一组音视频编解码开发套件,作为开发套件,它为开发者提供了丰富的音视频处理接口,TCPMP、VLC、MPlayer等开源播放器都用到了FFmpeg。
在学习FFmpeg之前,我们先了解以下两个容易混淆的的概念:
- 编解码器(CODEC):原始的图像和声音是需要占用很大的存储空间和带宽的,不适合运输和传送,所以我们需要对原始图像和声音加工,压缩得更小。而编码器就是对视频或音频进行压缩的方法,例如H264、H265等。而解码器则是和编码器相对应的概念,编码器使用指定方法进行压缩,解码器则必须按照指定方法进行解压缩,以读取到完整是数据。
- 容器/多媒体文件(Container/File):一个视频文件通常有视频数据、音频数据以及字幕等,封装的格式决定这些数据在文件中是如何的存放的,封装在一起音频、视频等数据组成的多媒体文件,也可以叫做容器(其中包含了视音频数据)
一、FFmpeg工具安装
1、FFmpeg工具下载
进入官网,选择需要下载的文件,官方网址:
http://ffmpeg.org/download.html#build
windows系统下需要下载二进制文件,我选择通过红色框选出进入新的页面下载。
2、解压
下载以后,解压到所放置的文件夹:
3、添加系统变量
-
复制FFmpeg 工具的路径
-
计算机-属性-高级系统设置-环境变量-系统变量-Path-编辑,添加进去,确定即可。该设置是win10设置,其他的系统可能需要通过";"分割。
3、测试
命令行(Win+R)输入,然后执行
fmpeg -version
输出以上信息则表示安装成功
二、FFmpeg源码架构
FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg源代码的主目录下主要有libavcodec(核心)、libavformat和libavutil等子目录,各模块的具体作用如下:
- libavutil: 包含简化编程功能的库,其中包括随机数生成器,数据结构,数学代码,核心多媒体工具等更多东西。
- libavcodec:用于存放各个encode/decode模块,CODEC其实是Coder/Decoder的缩写,也就是编码解码器;用于各种类型声音/图像编解码。
- libavformat:用于存放muxer/demuxer模块,对音频视频格式的解析;用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;
- libavdevice:包含输入输出设备的库,用于捕捉和渲染很多来自常用的多媒体输入/输出软件框架的数据,包括Video4Linux,Video4Linux2,VfW和ALSA。
- libavfilter:包含媒体过滤器的库。AVFilter可以给视音频添加各种滤镜效果。可以给视频添加水印,给YUV数据加特效。
- libswscale:用于执行高度优化的图像缩放和颜色空间/像素格式转换操作的库。
- libswresample:用于执行高度优化的音频重采样,重新矩阵和取样格式转换操作的
- libpostproc:用于后期效果处理
三、FFmpeg工具
FFmpeg的工具主要包含四个个,本章节仅仅引入,后续会做详细全面的讲解。FFmpeg的四个工具分别为:
- ffmpeg.exe:提供了音视频的编解码、字幕等功能
- ffplay.exe:简单的音视频播放器,它提供了视音频显示及播放相关的图像信息、音频的波形信息等,可以作为测试工具使用
- ffserver.exe:流媒体服务器(FFmpeg3.5版本前),本次不做介绍
- ffprobe.exe一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流中获取到足够多的媒体信息,包括视音频的参数、媒体容器的参数信息等