什么是命令行参数形式_命令行参数是什么

ffmpeg命令行功能强大,本文简单介绍一下命令行解析过程。

命令行解析函数如下

什么是命令行参数形式_命令行参数是什么

我们以下面命令行为例

ffmpeg -y -ss 4 -i 1.ts -vframes 1 -f image2 -s 640x360 out.jpg

在ffmpeg_opt.c文件中通过两个函数split_commandline、parse_optgroup解析命令行参数并保存在OptionParseContext结构体中。

typedef struct OptionParseContext { OptionGroup global_opts; OptionGroupList *groups; int nb_groups; /* parsing state */ OptionGroup cur_group; } OptionParseContext;

OptionParseContext中global_opts保存全局参数,比如-y参数。

nb_groups表示有多少个OptionGroupList选项组列表,数据保存在groups数组中。

按输入参数还是输出参数进行分组,groups保存输出参数选项组列表,

groups保存输入参数选项组列表

什么是命令行参数形式_命令行参数是什么

typedef struct OptionGroupList { const OptionGroupDef *group_def; OptionGroup *groups; int nb_groups; } OptionGroupList;

选项组列表保存一系列选项组,选项组个数保存在nb_groups字段,groups是选项组数组首地址。

从上面调试截图可以看出针对举例的命令行,输出和输入选项组都只有一个。

typedef struct OptionGroup { const OptionGroupDef *group_def; const char *arg; Option *opts; int nb_opts; AVDictionary *codec_opts; AVDictionary *format_opts; AVDictionary *sws_dict; AVDictionary *swr_opts; } OptionGroup;

选项组包含若干选项,每一个选项都是保存在Option结构体中。

什么是命令行参数形式_命令行参数是什么

输出选项组包含3个选项,

什么是命令行参数形式_命令行参数是什么

从key/value值可以看出和我们在命令行里设置的输出参数一样, -vframes 1 -f image2 -s 640×360。

什么是命令行参数形式_命令行参数是什么

输出选项组包含1个选项,

什么是命令行参数形式_命令行参数是什么

从key/value值可以看出和我们在命令行里设置的输入参数一样,-ss 4。

typedef struct Option { const OptionDef *opt; const char *key; const char *val; } Option;

typedef struct OptionDef { const char *name; int flags; define OPT_BOOL 0x0002 define OPT_STRING 0x0008 define OPT_AUDIO 0x0020 define OPT_FLOAT 0x0100 define OPT_INT64 0x0400 define OPT_DATA 0x1000 define OPT_OFFSET 0x4000 /* option is specified as an offset in a passed optctx */ define OPT_TIME 0x10000 define OPT_INPUT 0x40000 #define OPT_OUTPUT 0x80000 union { void *dst_ptr; int (*func_arg)(void *, const char *, const char *); size_t off; } u; const char *help; const char *argname; } OptionDef;

选项主要数据保存在OptionDef结构体中。name是选项名,flags是选项标志(比如选项值类型、是否包含参数、输入参数还是输出参数、视频参数还是音频参数还是字幕参数等),联合体u中可以包含三种数据之一,

dst_ptr

全局控制变量的地址

func_arg

选项对应的处理函数

off

OptionsContext结构体中对应的字段

本文【什么是命令行参数形式_命令行参数是什么】由作者: 悲观锁 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4270.html

(0)
上一篇 2023-03-12 08:07:07
下一篇 2023-03-12 08:16:22

相关推荐

  • c语言程序是由什么组成_C语言源程序的扩展名是

    1、源代码文件 存放程序代码的文件,即我们编辑代码的文件,称为源代码文件。 C语言源程序文件的扩展名为“.c”。源代码文件是相对目标文件和可执行文件而言的,一般是用高级语言写出来的。 2、目标文件 源代码经过编译所得到的二进制代码,称为目标文件。 目标文件的扩展名为“.obj”(Windows)或“.o”(Linux)。目标文件已经是机器指令,但还不能运行,…

    2023-03-09
    700
  • 开放端口扫描怎么设置

    以下是使用端口扫描时会发现的一些常见端口: 端口 21 – FTP(文件传输协议) 端口 22 – SSH(安全外壳) 端口 23 – Telnet 端口 25 – SMTP(简单邮件传输协议) 端口 53 – DNS(域名服务器) 端口 80 – HTTP(超文本传输协议) 端口 110 – POP3(邮局协…

    2023-03-13
    400
  • 无限制搜索器不好用了

    现如今我们需要买什么东西时,习惯在京东或淘宝这样的电商平台上搜,而不会首先打开搜索引擎。即便你用搜索引擎搜,很多时候也是搜不到的。 这种现象当然不限于在淘宝、京东,也一样存在于很多以内容见长的 App,比如今日头条、抖音、快手,当然还包括拥有大量公众号文章的微信等等。 互联网上的全部信息都可以通过搜索引擎搜到的年代早已过去,许多内容来源都形成了对搜索引擎封闭…

    2023-03-21
    000
  • udp协议和tcp协议在哪一层_tcp和udp协议

    你是否感觉 Http、Https、TCP、UDP这些协议很耳熟,经常听到但不知道是怎么回事;或是很了解,但让你解释又容易解释不清? 一起来看看他们之间的区别和联系吧~ 一、先有个基础的认知 HTTP和HTTPS是应用层协议,该层协议负责主机间数据传输; TCP和UDP是传输层协议,该层协议负责网络连接。 二、HTTP和HTTPS HTTPS = HTTP +…

    2023-03-12
    500
  • jsp注释方法_jsp调用Java中的一个方法

    前言:在CGI(通用网关接口)编程风行的日子,人们纷纷寻思简化并让其更加灵活的新方法和新技术,包括PHP、JSP、ASP。1997年SUN公司推出了servlet,1999年初,SUN公司推出了JSP,实际上在servlet基础上修改而成。JSP即Java服务器页面(Java Server Page),将HTML和JAVA代码使用某种方式结合起来,完成前后端…

    2023-03-09
    300
  • c语言学生管理系统流程图(学生成绩管理系统C语言代码)

    1.题目与要求 1.1问题提出 设计学生成绩管理系统,有N个学生,每个学生的数据包含姓名、年龄、编号和籍贯,试设计一学生管理系统 1.2本系统涉及的知识点 C语言文件操作、数组、函数、链表、头插法、尾插法等等 1.3 功能要求 1、学生信息录入:输入学生的姓名、年龄、编号和籍贯; 2、信息查询:(至少一种查询方式)。按编号查询学生记录,或查询同名学生的记录;…

    2023-03-18
    100
  • 高级程序员是什么职称

    计算机专业中级职称有哪些?那些高级软件工程师职称是怎么来的? 一、计算机专业中级职称考试可以考: 1、计算机软件专业:软件评测师、软件设计师、软件过程能力评估师 2、计算机网络专业:网络工程师 3、计算机应用技术专业:多媒体应用设计师、嵌入式系统设计师、计算机辅助设计师、电子商务设计师 4、信息系统专业:系统集成项目管理工程师、信息系统监理师、数据库系统工程…

    2023-03-12
    300
  • mysql 教学_史上最全的mysql基础教程

    本文将介绍MySQL的一些基本概念,及常用基础SQL命令,最后奉上一个可以动手练习的小例子。 我们通常所说的数据库是指数据库软件,例如MySQL、Oralce、SQL Server等,而本文提到的数据库(databases)是指数据库软件中的一个个用于存储数据的容器。 在正式开始写SQL代码前,需要说明两点: SQL语句不区分大小写。 每条SQL语句以分号;…

    2023-03-09
    800
  • cad二次开发的一些简单入门实例

    AutoCad二次开发-AutoLisp零基础入门 第七节 第2个程序: Autolisp功能: 画两圆切线 用法: (COPY此行以下文字,保存为文本文件,修改后缀为.lsp, 再拖入或加载到AutoCad即可) ; ======================================================== ; | 请关注西瓜视频号:…

    2023-03-20
    100
  • 图形用户界面操作系统借助于

    操作系统 现代操作系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。计算机操作系统是一个复杂的系统。 然而,程序员不会直接和这些硬件打交道,而且每位程序员不可能会掌握所有操作系统的细节,这样我们就不用再编写代码了,所以在硬件的基础之上,计算机安装了一层软件,这层软件能够通过响应用户输入的指令达到控制硬件的效果,从而…

    2023-03-21
    000

发表回复

登录后才能评论
返回顶部
错说博客上线啦!