FFmpeg基础简介

背景介绍

FFmpeg 是一款音视频编解码工具,同时也是一组音视频编解码开发套件,为音视频开发者提供了丰富的音视频处理的调用接口。
FFmpeg中的“FF”指的是“Fast Forward”,“mpeg”则是人们通常理解的Moving Picture Experts Group(动态图像专家组)。

FFmpeg的下载

作为一套开源音视频编解码套件,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的基础组成

FFmpeg的基本组成包含:AVFormat、AVCodec、AVFilter、AVDevice、swscale、swresample等
下图是FFmpeg文件截图
FFmpeg基础简介_第1张图片
(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是开源的,所以使用者可根据自己的需要修改、增加或者减少相关功能,并进行手动编译。
FFmpeg是通过configure命令选择打开或者关闭一些功能,然后通过configure创建所需要编译功能的Makefile文件,configure成功后执行make,最后执行make install完成FFmpeg的安装。
通过configure命令查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议等。

(base) $ ./configure --help

FFmpeg基础简介_第2张图片
FFmpeg基础简介_第3张图片
FFmpeg基础简介_第4张图片

  1. 通过Help options可以知道FFmpeg支持的编解码格式、封装格式、封装协议有哪些,比如想知道支持的解码器有哪些,可以使用命令
./configure --list-decoders
  1. 通过Individual component options,可以知道怎样打开或者关闭某个组建的编译
  2. 通过External library support,可以知道打开某个库,还需要依赖哪些第三方库

MAC编译

下面,我们在Mac电脑上编译一个FFmpeg。要求是:支持MP4、FLV、M3U8的封装和解封装,支持H264、H265格式的编码和解码,支持aac、mp3编码和解码,支持RTMP、HLS、HTTP-FLV的传输协议,支持基本filter的能力,支持图像格式的转换和音频重采样,编译ffmpeg、ffplay、ffprobe。

  1. brew install yasm
    ffmpeg的编译过程依赖yasm
  2. brew install sdl2
    ffplay依赖于sdl2
  3. brew install fdk-aac
    aac编解码库
  4. brew install x264
    h264编码库
  5. brew install x265
    h265编码库

configure

然后执行源码目录下的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

FFmpeg基础简介_第5张图片
FFmpeg基础简介_第6张图片
FFmpeg基础简介_第7张图片
FFmpeg基础简介_第8张图片
通过配置后的面板信息可知:编码、封装、协议、滤镜都满足了我们的需求。

编译

make -j8

安装

将编译好的库安装到指定的位置:/usr/local/ffmpeg3.3

make install

安装完毕后,/usr/local/ffmpeg3.3的目录结构如下所示
FFmpeg基础简介_第9张图片

你可能感兴趣的:(ffmpeg,git,github)