第 2 章:FFmpeg简介

2.1 历史

历史
一些相关术语介绍:

  • 容器(Container)格式:一种文件封装格式,里边主要包含了流,一般会使用一个特定的后缀名标识,例如.mov、.avi、.wav等。
  • 流 (Stream):在容器中存储音频(Audio)或者视频(Video)、字幕(Subtitle)等数据。
  • 元数据(Metadata):一般位于容器之中,告诉我们一些额外信息,一个常见的例子是MP3文件中的ID3 tag。
  • 编解码器(Codec):它实际上是enCOder与DECoder这两个词的混搭。大部分情况下我们指的是一种压缩标准,如我们所说的AVC/H.254、HEVC/H.265、VVC/H.266、AV1等。

2.2 FFmpeg的基本组成

  FFmpeg框架可以简单分为两层,上层是以ffmpeg、ffplay、ffprobe为代表的命令行工具;其底层支撑是一些基础库,包含AVFormat、AVCodec、AVFilter、AVDevices、AVUtils等模块库。细节结构如下图所示:
在这里插入图片描述

2.2.1 封装/解封装模块AVFormat

  AVFormat中实现了目前多媒体领域中绝大多数媒体封装格式和流媒体协议,包括封装(Muxer)和解封装(Demuxer)器, 包括如:

  • MP4FLVMKVTS文件封装格式,
  • RTMPRTSPMMSHLS等网络协议。

  FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。

2.2.2 编/解码模块AVCodec

  AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了以原生方式支持H.264、AAC、MJPEG等编解码格式之外,还支持第三方的编解码器,如:

  • H.264(AVC)编码,需要使用x264编码器;
  • H.265(HEVC)编码,需要使用x265编码器;
  • MP3(mp3lame)编码,需要使用libmp3lame编码器

2.2.3 滤镜模块AVFilter

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

  这个例子将输入的视频切割成两部分流,一部分流抛给crop与vflip滤镜处理模块,另一部分保持原样;当crop与vflip处理完后,将流合并到overlay图层中,并显示在最上一层,输出新视频。对应命令如下:

ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:00, vflip [flip]; [main] [flip] overlay=0:H/2" OUTPUT

处理前后如下:上半部分保留,上半部分同时做镜像运动到下边,合成后输出。
在这里插入图片描述

 下面简单说下滤镜的构成规则

  • 相同滤镜的线性链用逗号分割
  • 不同滤镜的线性链使用分号分隔

2.2.4 设备模块AVDevice

  AVDevice提供了一些常用的输入输出设备的处理框架。比如在macOS上和iOS上,一般使用AVFoundation调用底层的音视频及共享桌面输入。在Windows上,常用dshow作为音视频输入。在Linux上有更多选择,:音频输入输出设备有oss、alsa等,视频设备有opengl、video4linux2、x11grab等。sdl和sdl2是一个跨平台的输出设备的不同版本,在大多数平台都能用。

2.2.5 图像转换模块swscale

  swscale模块提供了底层的图像转换API接口,它允许进行图像缩放和像素格式转换,通常转换是有损的。

2.2.6 音频转换模块swresmaple

  swresample模块提供了音频重采样、格式转换、Rematrixing(改变通道布局)等

2.2.7 编解码工具ffmpeg

  • 解封装,或称解复用
  • 解码
  • 编码
  • 封装,或称复用

其中,整体处理的工作流程如下图所示。
在这里插入图片描述

2.2.8 播放器ffplay

ffmplay主要作为播放测试工具使用,也能显示音频的波形信息等。注意编译安装ffplay依赖于sdl。

2.2.9 多媒体分析器ffprobe

ffprobe是一个强大的多媒体分析工具,可以从媒体文件或者媒体流中获取音频格式,视频宽高,时长等信息。下一章具体讲。

2.3 不同平台的编译

建议谷歌

2.4 FFmpeg特性选择与定制

使用configure --help查看第三方外部库支持

./configure --list -encoders 查看编码器
./configure --list -decoders 查看解码器
./configure --list -muxers 查看封装支持
./configure --list -demuxers 查看解封装支持
./configure --list -protocols 查看通信协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/635935.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习/复习25---函数指针/函数指针数组/函数指针数组指针的判断、快排中的函数指针和回调函数实现任意数据类型比较的案例

一、函数指针数组 1.什么是函数指针数组 2.函数指针数组的定义 案例1:函数指针与函数指针数组 注意事项:( )>[ ]>*,先与[ ] 结合就是数组,先与*结合就是指针 二、指向函数指针数组的指针 注意事项1:( )>[ ]>*,先与[ ]…

在PostgreSQL中,如何创建一个触发器并在特定事件发生时执行自定义操作?

文章目录 解决方案示例代码1. 创建自定义函数2. 创建触发器 解释 在PostgreSQL中,触发器(trigger)是一种数据库对象,它能在特定的事件(如INSERT、UPDATE或DELETE)发生时自动执行一系列的操作。这些操作可以…

【网站项目】高校毕业论文管理系统小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

硬件工程中的RMA是什么意思?

RMA是Return Material Authorization的英文缩写,即退料审查。是处理用户不良产品退货、换货的主要流程。 当用户所使用某产品或部件不能正常工作时,将发起一个RMA流程,首先用户必须填写RMA申请单,然后RMA的处理人员将对该RMA申请…

力扣---填充每个节点的下一个右侧节点指针 II

给定一个二叉树: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。 初始状态下,所有 next 指针都…

数据结构––kmp算法(串)

kmp算法作为串的一个重要内容,必然有一定的难度,而在看到各类教辅书里的概念与解释后,其晦涩难懂的内容直接劝退一部分人,现在,让我们来看看吧 KMP解决的问题类型 KMP算法的作用就是在一个已知的字符串中查找子串的位…

【JS】js数字转k、w结尾 | 1000 = 1k

问题 数字转k、w结尾 如&#xff1a;10001k 100001w 码 /*** 数字转k,w* param {Number} num * returns String*/ const numberTokw num > {if (num < 1000) return numlet endStr w,numVal 10000;if (num > 999 && num < 10000) {endStr knumVal …

第十四届蓝桥杯省赛C/C++大学B组真题-飞机降落

思路&#xff1a;根据数据范围N<10猜测用DFS剪枝&#xff0c;因为菜狗不会状压dp。根据题目&#xff0c;一般这种飞机的题都会用到贪心的思想。思想是每架飞机都要卡极限最早降落时间&#xff0c;从而保证后面的飞机能够有充足时间降落。 代码参考博客MQy大佬有详细解答 #i…

Docker - 入门基础

原文地址&#xff0c;使用效果更佳&#xff01; Docker - 入门基础 | CoderMast编程桅杆https://www.codermast.com/dev-tools/docker/docker-basic.html Docker架构 Docker 使用的是客户端-服务端&#xff08;C/S&#xff09;架构模式&#xff0c;使用远程 API 来管理和创建…

【Web】DASCTF X GFCTF 2024|四月开启第一局 题解

目录 EasySignin cool_index web1234 web4打破防了&#x1f92e;&#xff0c;应该很接近解出来了&#xff0c;感兴趣的师傅续上吧 EasySignin 先随便注册个账号登录&#xff0c;然后拿bp抓包改密码(username改成admin) 然后admin / 1234567登录 康好康的图片功能可以打SS…

ssh-key关于authorized_keys电脑与linux互相认证

思路&#xff1a; 在A上生成公钥私钥。将公钥拷贝给server B&#xff0c;要重命名成authorized_keys(从英文名就知道含义了)Server A向Server B发送一个连接请求。Server B得到Server A的信息后&#xff0c;在authorized_key中查找&#xff0c;如果有相应的用户名和IP&#xf…

type-cDP输入转双type-cDP输出,加type-c接口充电管理同时接两台显示器或者VR投屏,龙迅LT8712SX方案,龙迅桥接芯片方案

type-c的应用在各种设备上更加广泛&#xff0c;包括手机&#xff0c;电脑&#xff0c;游戏掌机&#xff0c; 因为type-c的功能非常强大&#xff0c;可以做到PD快充&#xff0c;DP信号输出&#xff0c;USB信号输出&#xff0c;所以很多设备为了做得更简洁都开始把其他的如HDMI接…