背景介绍

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
* masterremotes/origin/HEAD -> origin/master... ...remotes/origin/release/3.1remotes/origin/release/3.2remotes/origin/release/3.3remotes/origin/release/4.1remotes/origin/release/4.2remotes/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文件截图

(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



  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





通过配置后的面板信息可知:编码、封装、协议、滤镜都满足了我们的需求。

编译

make -j8

安装

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

make install

安装完毕后,/usr/local/ffmpeg3.3的目录结构如下所示

FFmpeg基础简介相关推荐

  1. VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略

    VideoTool之FFmpeg:FFmpeg的简介.安装.使用方法之详细攻略 目录 FFmpeg的简介 FFmpeg的安装 1.Windows下安装 第一步,下载软件 第二步,解压文件 第三步,将文 ...

  2. FFmpeg 基础知识

    第一.FFmpeg 简介和基础知识 1.1 FFmpeg 简介 FFmpeg的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward",FF ...

  3. 网络分析概述之网络基础简介

    网络分析概述之网络基础简介 本文转载自小白名的生统笔记,原文链接:https://mp.weixin.qq.com/s/Bp-u663WUhFxPfeP7pBh0w 从本节开始介绍网络分析.本篇暂且对 ...

  4. Linux下Web服务器应用之基础简介

    Linux下Web服务器应用之基础简介 一.web服务器基本知识: WWW 是 World Wide Web 的缩写 URL:<协定>://<主机地址或主机名>[:port]/ ...

  5. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  6. jQuery基础简介

    jQuery基础简介 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 开发工具与关键技术:Visual Studio 2015 jQuery ...

  7. Python基础—简介、变量、运算符

    文章目录 一.基础简介 1.Python简介 2.执行过程 二.变量 三.数据类型 1.数字 2.字符串 3.布尔bool 4.空值对象None 5.列表 6.字典 7.数据类型转换 重点 四.格式化 ...

  8. Maven基础简介+安装说明

    Maven基础简介 Maven简介 Maven是什么 下载与安装 小节 Maven简介 问题: 传统项目管理状态分析 jar包不统一,jar包不兼容 工程升级维护过程操作繁琐 Maven是什么 Mav ...

  9. 使用FFMPEG——4.2.2版本实现提取视频编码解码文件,ffmpeg基础学习。

    FFMPEG基础学习 视频解码,并且输出到文件. 我通过雷霄骅的博客学习FFMPEG,在学习过程中发现"雷神"的代码由于版本的问题,很多代码已经无法在FFMPEG--4.2.2版本 ...

最新文章

  1. linux netstat端口占用,Linux系统使用 netstat 查看和检查系统端口占用情况
  2. PyTorch中的数据输入和预处理
  3. mysql数据库入门教程(9):数据的常见约束
  4. jquery.cookie 使用方法
  5. 如何在MyBatis中优雅的使用枚举
  6. Spring Boot系列(一) Spring Boot介绍和基础POM文件
  7. Golang实践录:调用C++函数
  8. python new_python __new__中单例的作用
  9. python基础语法加爬虫精进_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...
  10. (2)I/O流对象-----FilterInputStream与FilterOutputStream
  11. linux 安装vlc源码包,linux Centons 6.5 下yum安装vlc
  12. 无人驾驶全局路径规划之A星算法
  13. UI设计流程是什么?来看看UI设计完整的设计流程吧
  14. java读文件在页面输出_Java读取html页面以文件流方式输出显示在页面
  15. python 图像扭曲 opencv仿射变换 cv2.getAffineTransform() cv2.warpAffine()应用实例
  16. 三原色图(最小生成树 kruskal)
  17. uni-app 分享给好友,生成小程序二维码海报
  18. 亚马逊中国公布2020年第一季度付费电子书畅销榜名单
  19. 百果园港交所上市:市值近百亿港元 80%营收来自加盟店
  20. 浅析安全启动(Secure Boot) —写得很好

热门文章

  1. CUDA向量加法示例
  2. 花指令,LLVM简介
  3. 1、时光一去不复返,珍惜当下
  4. java培训爆破专栏之Spring Security系列教程之实现CAS单点登录上篇-概述
  5. Good Videos
  6. web前端学习笔记——锚点跳转
  7. 【学习摘记】马士兵bbs改良版_课时37_搜索与最后残留问题解决
  8. 虚拟现实技术在神经外科教学中的应用
  9. iOS 屏幕尺寸、分辨率、适配、UI规范
  10. Django QuerySet浅析