ffmpeg命令行工具源码之结构体分析1-命令行参数(未完结,持续更新)

news/2025/2/18 11:48:43/

前言

ffmpeg作为多媒体文件转换工具,至少需要有一个要转换的输入文件信息(不仅仅是普通文件,还可以是摄像头设备,网络流等),和通常至少需要一个输出格式的文件(输出文件不仅仅指普通的文件,网络协议比如RTP协议,RTSP协议都可以理解为输出文件),ffmpeg的文件的转换过程主要由以下几个流程
(1)解封装
(2)解码
(3)过滤器
(4)编码
(5)封装

因此ffmpeg工具涉及的结构体主要就从这几个方面来说明这些结构体的含义。

参数信息相关的结构体

Ffmpeg工具虽然强大,但是没有界面,是一个命令行的工具,想要熟悉ffmpeg的操作,就要熟悉ffmpeg的各种参数信息,因此我们首先说下ffmpeg中涉及的参数结构体的作用

参数解析上下文 OptionParseContext

这个结构体用于ffmpeg将用户输入的命令行的参数进行分组,一共分为了3种类型的参数,包括全局参数组(仅仅只有1个),输入参数组(可以有多个),输出参数组(可以有多个)
一个OptionParseContext包含以下参数
(1)一个全局参数组 OptionGroup
(2)输入参数组列表:有多少个输入文件就有多少个输入参数组列表 OptionGroupList(包含多个输入参数组OptionGroup)
(3)输出参数组列表:有多少个输出文件就有多少个输出参数组列表 OptionGroupList(包含多个输出参数组OptionGroup)

参数组列表 OptionGroupList

参数组列表用于表示输入参数组列表和输出参数组列表,包括参数组定义,OptionGroup列表

参数组 OptionGroup

一个参数组描述了一个输入文件或者输出文件的参数集合,比如输入文件格式,文件名等
包括参数组定义,参数信息和参数个数,编解码参数字典(AVDictionary),文件上下文参数字典(AVDictionary),sws_dict(AVDictionary),swr_opts字典(AVDictionary)

参数信息 Option

用于描述一个参数信息,包括参数定义,key和val。
其中ffmpeg工具定义了参数定义数组(包括参数名和参数值,以及flag,解释等,argname,help,其中flag决定了将参数的类型和存放的位置,初始化参数数组时,会告知参数类型,以及参数存放到某个内存位置(属性输入输出上下文OptionContext结构体的某个属性内存地址),当解析命令行相应的参数时,会将参数信息拷贝到属性输入输出上下文参数中(OptionsContext)。

属性输入输出上下文 OptionContext

OptionContext描述了输入文件或者输出文件的所有属性,当用户没有指定相应的属性时,会设置默认值,其中用户指定的信息是从参数信息 Option中拷贝过来的。一个输入/输出文件对应一个输入输出上下文,
OptionContext包含很多属性,分为输入和输出共用属性,以及输入,输出的特有属性,
其中比如共用属性包含 start_time(开始时间),format(文件格式),codec_names(编解码名称信息),输出属性stop_time(停止时间)等。

写到后面:本来说还没完结的,结果发现一篇强大的介绍FFMPEG的文章,文章很多很全,直接上链接:ffmpeg源码及其API介绍


http://www.ppmy.cn/news/75263.html

相关文章

【SQL】MySQL的数据类型

MySQL的数据类型 MySQL是一种广泛使用的关系型数据库管理系统,它支持各种数据类型,包括数字、字符串、日期和时间等。在MySQL中,数据类型是用来定义表中列的类型,它决定了表中的数据如何被存储和操作。 数字类型 MySQL支持多种…

完犊子!原单位的离职证明丢了,下周要入职了,用AI做一个行不行?

弄丢了离职证明怎么办? 一位网友哀叹: 完犊子!原单位的离职证明丢了,下周要入职了,现在怎么办?用AI做一个行不行? 有相同经历的网友安慰他,离职证明没了没事,新公司会要求…

格式化数据写入sprintf的用法

sprintf 是一个常见的 C 语言函数,用于将格式化的数据写入字符串缓冲区中。它的原型如下: int sprintf(char *str, const char *format, …); sprintf 函数将按照指定的格式 format 将数据写入字符串 str 中,并返回写入的字符数(不…

linux动态库版本控制

文章目录 1. 动态库相关概念2. ldd 查看依赖项3. 动态链接器 ld.so的加载路径4. 动态版本库版本控制5. ldconfig自动更新soname到linkname6. 可执行程序的执行过程 linux 动态库版本控制 1. 动态库相关概念 Soname、linkname和realname都是在Linux系统下与共享库(s…

firewalld防火墙

文章目录 firewalld概述firewalld 与 iptables 的区别firewalld 区域的概念firewalld防火墙预定义了9个区域 firewalld数据处理流程firewalld检查数据包的源地址的规则 firewalld防火墙的配置方法常用的firewall-cmd 命令选项区域管理服务管理端口管理设置地址转换 firewalld概…

大学4年做出来这个算不算丢人

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

【计算机网络基础】辨析专题④ 网络层

文章目录 重要简写重要概念重要简写 1.IP——网际协议 2.APR——地址解析协议 3.ICMP——网际控制报文协议 4.IGMP——网际组管理协议 5.HLB——集线器 6.ICANN——互联网名字和数字分配机构 7.CIDR——无分类域间路由选择 8.RARP——逆地址解析协议 9.IGP——内部网关…

Vue安全

vue的安全措施 HTML内容 不论使用模板还是渲染函数&#xff0c;内容都会被自动转义。也就是说对于这份模板&#xff1a; <h1>{{ userProvidedString }}</h1>如果 userProvidedString 包含了&#xff1a; <script>alert("hi")</script>则…