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

简介: ffmpeg作为多媒体文件转换工具,至少需要有一个要转换的输入文件信息(不仅仅是普通文件,还可以是摄像头设备,网络流等),和通常至少需要一个输出格式的文件(输出文件不仅仅指普通的文件,网络协议比如RTP协议,RTSP协议都可以理解为输出文件),ffmpeg的文件的转换过程主要由以下几个流程(1)解封装(2)解码(3)过滤器(4)编码(5)封装因此ffmpeg工具涉及的结构体主要就从这几个方面来说明这些结构体的含义。

前言

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介绍


相关文章
|
6月前
|
编解码 API
ffmpeg.c(4.3.1)源码剖析(一)
ffmpeg.c(4.3.1)源码剖析(一)
119 2
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
140 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
5月前
|
编解码
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
《FFmpeg开发实战》书中3.4.3节讲解如何将H.264流封装成MP4。H.264流通常以SPS→PPS→IDR帧开始,这一说法通过雷霄骅的H264分析器得到验证。分析器能解析H.264文件但不支持MP4。ZLMediaKit服务器在遇到I帧时会自动插入SPS和PPS配置帧,确保流符合标准格式。若缺少这些帧,客户端拉流时会报错。FFmpeg开发实战:从零基础到短视频上线》书中提供了更多FFmpeg开发细节。
129 0
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
|
1月前
|
存储 编解码 网络协议
FFmpeg学习笔记(三):FFmpeg和FFplay参数介绍
这篇文章是关于FFmpeg和FFplay参数的介绍,包括如何使用这些参数进行视频流的捕获、处理和播放。
54 0
|
4月前
|
编解码
FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
《FFmpeg开发实战》书中讲解了音视频封装格式,重点介绍了TS,因其固定长度和独立解码特性,常用于HLS协议。HLS通过m3u8文件指示客户端播放TS分片。SRS服务器在转换MP4至TS时,会在每个TS包头添加SPS和PPS帧,保证解码完整性。这一过程在SrsIngestHlsOutput::on_ts_video函数中体现,调用write_h264_sps_pps和write_h264_ipb_frame完成。详细实现涉及SrsRawH264Stream::mux_sequence_header函数,遵循ISO标准写入SPS和PPS NAL单元。
80 0
FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
|
6月前
|
缓存 网络协议 Windows
FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
在国内访问GitHub不稳定时,可以采取三种解决方法。首先,通过网站(<https://ping.chinaz.com/github.com>)找到快速响应的GitHub IP,将其添加到本地hosts文件,然后刷新DNS缓存以正常访问。其次,使用代下载网站如(<https://d.serctl.com/>)下载GitHub上的压缩包。最后,可从国内镜像站点,如码云(<https://gitee.com/mirrors/ffmpeg>),下载FFmpeg等开源代码。这些方法有助于绕过访问限制,确保FFmpeg学习与开发的顺利进行。
149 3
FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
|
6月前
|
编解码 容器
ffmpeg.c(4.3.1)源码剖析(三)
ffmpeg.c(4.3.1)源码剖析(三)
51 1
|
6月前
|
存储 编解码 索引
了解FFmpeg音频通道布局结构:AVChannelLayout结构体解析
了解FFmpeg音频通道布局结构:AVChannelLayout结构体解析
229 1
|
6月前
|
机器学习/深度学习 编解码 API
FFmpeg命令行解析
FFmpeg命令行解析
385 1
|
6月前
ffmpeg.c(4.3.1)源码剖析(二)
ffmpeg.c(4.3.1)源码剖析(二)
92 0