文章目录

  • 前言
  • 一、FFmpeg的定义
  • 二、FFmpeg的基本组成模块
    • (1)FFmpeg的封装模块AVFormat
    • (2)FFmpeg的编解码板块AVCodec
    • (3)FFmpeg的滤镜模块AVFilter
    • (4)FFmpeg的视频图像转换计算模块swscale
    • (5)FFmpeg的音频转换计算模块swresample
  • 三、FFmpeg的主要工作流程
  • 四、FFmpeg的相关术语
    • 媒体流(Stream)
    • 数据帧/数据包(Frame/Packet)
    • 编解码器
    • 前面介绍的术语,就是 FFmpeg 中抽象出来的概念。其中:
      • 1. AVFormatContext
      • 2. AVStream
      • 3. AVCodecContext 与 AVCodec
      • 4. AVPacket 与 AVFrame
      • 5. AVFilter
  • 五、FFmpeg的一些应用场景
    • 使用 FFmpeg 作为内核视频播放器
    • 使用 FFmpeg 作为内核的 Directshow Filter
    • 使用 FFmpeg 作为内核的转码工具
  • 总结

前言

笔者才开始学习音视频开发,主要是通过阅读刘歧、赵文杰编著的《FFmpeg从入门到精通》以及雷霄骅博士博客总结写的入门心得体会。

官方文档资料

FFmpeg官方文档:https://ffmpeg.org/documentation.html

FFmpeg官方wiki:http://trac.ffmpeg.org/wiki

中文经典资料

雷霄骅博士csdn链接:https://blog.csdn.net/leixiaohua1020

ChinaFFmpeg:http://bbs.chinaffmpeg.com

除了以上这些信息,还可以通过 Google、百度等搜索引擎获得大量相关资料。

本文这里简单介绍一下 FFmpeg 是什么?

一、FFmpeg的定义

FFmpeg 既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频的调用接口。

FFMpeg 提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等;FFmpeg 框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。

FFmpeg 中的 “FF” 指的是 “Fast Forward”,FFmpeg 中的 “mpeg” 则是 “Moving Picture Experts Group(动态图像专家组)”。

PS:有不少人不清楚 “FFmpeg” 应该怎么读。它读作 “ef ef em peg”。

二、FFmpeg的基本组成模块

FFmpeg 框架的基本组成包括 AVFormat、AVCodec、AVFilter、AVDevice、AVUtil 等模块库。下面针对这些模块做一个大概的介绍。

(1)FFmpeg的封装模块AVFormat

AVFormat 中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如 MP4、FLV、KV、TS 等文件封装格式,RTMP、RTSP、MMS、HLS 等网络协议封装格式。
FFmpeg 是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。
根据实际需求,可进行媒体封装格式的拓展,增加自己定制的封装格式,即在 AVFormat 中增加自己的封装处理模块。

(2)FFmpeg的编解码板块AVCodec

AVCodec 中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。
AVCodec 除了支持 MPEG4、AAC、MJPEG 等自带的媒体编解码格式之外,还支持第三方的编解码器,如 H.264(AVC)编码,需要使用 x264 编码器;H.265(HEVC)编码,需要使用 X265 编码器;MP3(mp3lame)编码,需要使用 libmp3lame 编码器。
如果希望增加自己的编码格式,或者硬件编解码,则需要在 AVCodec 中增加相应的编解码模块。

(3)FFmpeg的滤镜模块AVFilter

AVFilter 库提供了一个通用的音频、视频、字幕等滤镜处理框架。
在 AVFilter 中,滤镜框架可以有多个输入或多个输出。

(4)FFmpeg的视频图像转换计算模块swscale

swscale 模块提供了高级别的图像转换 API,例如它允许进行图像缩放和像素格式转换,常见于将图像从 1080p 转换成 720p 或者 480p 等的缩放,或者将图像数据从 YUV420P 转换成 YUYV,或者 YUV 转 RGB 等图像格式转换。

(5)FFmpeg的音频转换计算模块swresample

swresample 模块提供了高级别的音频重采样 API。例如它允许操作音频采样、音频通道布局转换与布局调整。

三、FFmpeg的主要工作流程

FFmpeg 的主要工作流程相对比较简单,具体如下:

1)解封装(Demuxing)

2)解码(Decoding)

3)编码(Encoding)

4)封装(Muxing)

其中需要经过 6 个步骤,具体如下:

1)读取输入源

2)进行音视频的解封装

3)解码每一帧音视频数据

4)编码每一帧音视频数据

5)进行音视频的重新封装

6)输出到目标

FFmpeg 整体处理的工作流程与步骤如下图所示:

四、FFmpeg的相关术语

媒体流(Stream)

表示在时间轴上的一段连续的数据,比如一段声音数据、一段视频数据或者一段字母数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。

数据帧/数据包(Frame/Packet)

通常一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。

编解码器

编解码器是以帧为单位实现压缩数据和原始数据之间的相互转换的。

前面介绍的术语,就是 FFmpeg 中抽象出来的概念。其中:

1. AVFormatContext

就是对容器或者媒体文件层次的抽象。

2. AVStream

在文件中(容器里面)包含了多路流(音频流、视频流、字幕流),AVStream 就是对流的抽象。

3. AVCodecContext 与 AVCodec

在每一路流中都会描述这路流的编码格式,对编解码器格式以及编解码器的抽象就是 AVCodecContext 与 AVCodec。

4. AVPacket 与 AVFrame

对于编码器或者解码器的输入输出部分,也就是压缩数据以及原始数据的抽象就是 AVPacket 与 AVFrame。

5. AVFilter

除了编解码之外,对音视频的处理肯定是针对于原始数据的处理,也就是针对 AVFrame 的处理,使用的就是 AVFilter。

五、FFmpeg的一些应用场景

下面介绍一下 FFmpeg 都用在了哪里(在这里仅列几个我所知的,其实远比这个多)。说白了就是为了说明:FFmpeg 是非常重要的。

使用 FFmpeg 作为内核视频播放器

Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音…

使用 FFmpeg 作为内核的 Directshow Filter

ffdshow,lav filters…

使用 FFmpeg 作为内核的转码工具

ffmpeg,格式工厂…

总结

事实上,FFmpeg 的音视频编解码功能确实太强大了,几乎囊括了现存所有的音视频编码标准,因此只要做音视频开发,几乎离不开它。

参考:刘歧、赵文杰编著的《FFmpeg从入门到精通》第1章

参考文章1:FFmpeg 是什么?

参考文章2:ffmpeg、ffplay、ffprobe 常用命令详解(音视频必备)

FFmpeg是什么?(Fast Forward Moving Picture Experts Group)(AVFormat、AVCodec、AVFilter、AVDevice、AVUtil)相关推荐

  1. Git- Fast Forward和no fast forward

    Git 很是强大,在体验过rebase的华丽之后,再次发现之前在TFS上遇到的问题一下都有解了.但也印证了Git深入并非易事.这篇就谈下一个容易迷糊的概念:Fast forward. Fast-For ...

  2. git merge 的两种模式的区别 --no-ff与fast forward

    git merge 将名字为branchName的分支合并到当前分支 有两种模式 git merge <branchName>:fast forward模式,快速合并,看不出做过合并. 不 ...

  3. Git的Fast Forward和no fast foward合并模式对比

    详细版本见个人博客:Git的Fast Forward和no fast foward合并模式对比 通常,合并分支时,如果没有分歧解决,就会直接移动文件指针,这就是Fast forward模式. 举例来说 ...

  4. Git 的 Fast Forward 和 no fast foward

    原文地址 目录 Fast forward 概述 强制禁用 Fast forward 模式的具体方法 Fast Forward 和 no fast foward 合并模式对比 分支策略 小结 Fast ...

  5. Git – Fast Forward 和 no fast foward

    Git 很是强大,在体验过rebase的华丽之后,再次发现之前在TFS上遇到的问题一下都有解了.但也印证了Git深入并非易事.这篇就谈下一个容易迷糊的概念:Fast forward. Fast-For ...

  6. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext

    FFmpeg结构体详解 一.FFmpeg中最关键的结构体之间的关系 1.解协议(http,rtsp,rtmp,mms) 2.解封装(flv,avi,rmvb,mp4) 3.解码(h264,mpeg2, ...

  7. 音视频开发-ffmpeg介绍-系列一

    目录 一.简介 FFmpeg框架的基本组成包含: 二. FFmpeg框架梳理音视频的流程​编辑 基本概念: 三.ffmpeg.ffplay.ffprobe区别 4.1 ffmpeg是用于转码的应用程序 ...

  8. Ffmpeg框架结构解读

    1.    FFMEPG结构说明 1.1>介绍     ffmpeg(Fast Forward Moving Pictures Experts Group)是音视频的分离,转换,编码解码及流媒体 ...

  9. 自制Linux功能板-新增功能(基于RTMP流媒体传输协议的视频监控)

    目录 一.ffmpeg工具 1.简介 2.移植相关库 二.RTMP的nginx服务器 1.简介 2.移植 三.运行测试 1.启动nginx 2.使用 FFmpeg 推流 引言:小板子能联网还有摄像头, ...

最新文章

  1. 6 种不同情况下写的代码
  2. Java NIO原理 图文分析及代码实现
  3. 推荐系统去偏(Debiased Recommendation)研究进展概述
  4. TypeError: Cannot set property 'msg' of undefined
  5. 【OSChina-MoPaaS应用开发大赛】豪美创新后台业务管理系统
  6. 基于顺序存储结构的图书信息表的新图书的入库(C++)
  7. MariaDB 10.4.9 发布,MySQL 分支数据库
  8. 解决访问被拒绝:Microsoft.Web.UI.WebControls的问题
  9. 主机和虚拟机复制粘贴失效的解决方案
  10. 2014大学计算机操作系统,郑州大学软件学院2013-2014《计算机操作系统》试题及答案...
  11. DeepStyle(第2部分):时尚GAN
  12. [转]《编程之道》(很老的一篇文章)
  13. 高等代数——大学高等代数课程创新教材(丘维声)——3.5笔记+习题
  14. 电子科技大学《图论及其应用》复习总结--第一章 图的基本概念
  15. 数据中心基础设施运维有哪些项目?哪些系统?如何实施?
  16. Flutter-防京东商城项目-收货地址列表、增加 修改收货地址布局、弹出省市区选择器-39
  17. 基于AT89S52单片机的汽车LED尾灯控制器设计
  18. Jetson Nano 安装deepStream
  19. Stream操作666
  20. ContentProvider介绍

热门文章

  1. 杭电计算机组成实验4(四)寄存器堆设计实验
  2. Halcon 第四章『图像特征与提取』◆第1节:基于区域形状特征
  3. vue试按钮失去焦点_Vue中实现回车键切换焦点的方法
  4. 新版整理MT3换皮梦幻/久久西游源码+安卓苹果双端
  5. 在Excel中取汉字的英文首字母或者全拼
  6. MATLAB编程-excel文件操作
  7. svn: E000022: Can‘t convert string from ‘UTF-8‘ to native encoding 问题解决
  8. 网站建设如何做好页面布局合理
  9. java回顾:私服搭建
  10. ffmpeg av_read_frame返回AVERROR_EOF