04.ffmpeg打印音视频媒体信息
目录
1、相关头文件
2、相关结构体
3、相关函数
4、函数详解
5、源码附上
1、相关头文件
#include <libavformat/avformat.h> 包含格式相关的函数和数据结构
#include <libavutil/avutil.h> 包含一些通用实用函数
2、相关结构体
AVFormatContext 用于存储媒体文件的信息
3、相关函数
1、void av_register_all(void);
解释:初始化所有的编解码器、解码器、分离器和复用器。在使用任何其他 libav* 函数之前,必须调用此函数一次。在 FFmpeg 4.0 之后的版本中,这个函数已经被弃用,不再需要调用。
2、int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
- 参数:
AVFormatContext **ps:指向格式上下文指针的指针。成功打开文件后,它将指向一个已初始化的AVFormatContext。const char *filename:输入文件的文件名。AVInputFormat *fmt:指定输入格式。通常传递NULL以自动检测格式。AVDictionary **options:包含输入选项的字典。通常传递NULL。- 返回值:返回 0 表示成功,负值表示错误。
- 解释:打开输入文件并读取文件头,创建并初始化
AVFormatContext。
3、int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
- 参数:
AVFormatContext *ic:指向已打开的AVFormatContext。AVDictionary **options:包含选项的字典。通常传递NULL。- 返回值:返回 0 表示成功,负值表示错误。
- 解释:读取媒体文件的数据以获取流信息。
4、void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output);
- 参数:
AVFormatContext *ic:指向AVFormatContext的指针。int index:流的索引,通常传递 0。const char *url:输入文件的 URL。int is_output:如果是输入文件,传递 0;如果是输出文件,传递 1。- 解释:打印
AVFormatContext的详细信息,主要用于调试。
5、void avformat_close_input(AVFormatContext **s);
- 参数:
AVFormatContext **s:指向格式上下文指针的指针。- 解释:关闭一个打开的输入文件并释放相关资源,调用之后,
s将被设置为 NULL。
4、函数详解
av_register_all:
此函数在程序开始时调用,注册所有可用的文件格式、编解码器和网络协议。尽管在较新的 FFmpeg 版本中不再需要,但在旧版本中这是必要的一步,确保库中所有功能可用。
avformat_open_input:
这个函数尝试打开一个媒体文件,并读取文件头来填充AVFormatContext。如果文件打开成功,AVFormatContext将包含有关文件格式的信息。它不仅处理本地文件,也支持通过 URL 访问网络上的媒体流。
avformat_find_stream_info:
在成功打开媒体文件后,FFmpeg 还需要更多信息来正确解码数据。此函数读取更多的数据包以获取关于文件中每个流的信息(如视频和音频流),并填充AVFormatContext中的流信息。
av_dump_format:
这是一个非常有用的调试工具,可以打印出媒体文件的详细信息,包括每个流的格式、比特率、分辨率等。对于开发者来说,这是验证 FFmpeg 是否正确解析文件的好方法。
avformat_close_input:
在处理完媒体文件后,需要调用此函数来关闭文件并释放与AVFormatContext相关的所有资源。这是资源管理的一个重要部分,确保没有内存泄漏或资源占用。
5、源码附上
#include <stdio.h>
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>int main(int argc, char *argv[]) {if ( argc < 2 ) {fprintf(stderr, "Usage: %s <input_file>\n", argv[0]);return -1;}AVFormatContext *fmt_ctx = NULL;const char *input_filename = "input.mp4";input_filename = argv[1];// 初始化所有编解码器, 我使用的ffmpeg版本以及弃用该函数// av_register_all();// 打开输入文件并且读取文件头int ret = avformat_open_input( &fmt_ctx, input_filename, NULL, NULL );if ( ret ) {fprintf( stderr, "avformat_open_input open %s error!!!\n", input_filename );return -1;}// 读取媒体文件数据以获取流信息ret = avformat_find_stream_info( fmt_ctx, NULL );if ( ret ) {fprintf( stderr, "avformat_find_stream_info error!!!\n" );return -1;}// 打印AVFormatContext信息av_dump_format( fmt_ctx, 0, input_filename, 0 );// 关闭文件, 并设置AVFormatContext指针为NULLavformat_close_input( &fmt_ctx );return 0;
}

相关文章:
04.ffmpeg打印音视频媒体信息
目录 1、相关头文件 2、相关结构体 3、相关函数 4、函数详解 5、源码附上 1、相关头文件 #include <libavformat/avformat.h> 包含格式相关的函数和数据结构 #include <libavutil/avutil.h> 包含一些通用实用函数 2、相关结构体 AV…...
微信开发授权登录梳理总结
授权登录流程对比 微信公众号/网页 微信文档地址:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 流程图如下: 特殊说明: 步骤1拼接的微信地址是:https://open.weixin.qq…...
HTML5实现我的音乐网站源码
文章目录 作者:[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作…...
UNI_App平台调试指南 debug(十五)
App平台调试指南 debug 常规开发里,在 HBuilderX 的运行菜单里运行 App,手机端的错误或 console.log 日志信息会直接打印到控制台。 如果需要更多功能,比如审查元素、打断点 debug,则需要启动调试模式。自 HBuilderX 2.0.3+ 版本起开始支持 App 端的调试。 #打开调试窗口…...
LLM之RAG实战(四十一)| 使用LLamaIndex和Gemini构建高级搜索引擎
Retriever 是 RAG(Retrieval Augmented Generation)管道中最重要的部分。在本文中,我们将使用 LlamaIndex 实现一个结合关键字和向量搜索检索器的自定义检索器,并且使用 Gemini大模型来进行多个文档聊天。 通过本文,我…...
【错题集-编程题】AOE还是单体?(贪心)
牛客对应链接:AOE还是单体? (nowcoder.com) 一、分析题目 如果使用一次 AOE 造成的伤害比消耗的蓝量多,那就使用。否则就一直使用单体伤害。 二、代码 //值得学习的代码 #include <iostream> #include <algorithm>using namespa…...
怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~
怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~ 文章目录 怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~0. 在开始清理之前1. 推荐执行的操作1.1 清理系统缓存文件1.2 磁盘清…...
react启用mobx @decorators装饰器语法
react如果没有经过配置,直接使用decorators装饰器语法会报错: Support for the experimental syntax ‘decorators’ isn’t currently enabled 因为react默认是不支持装饰器语法,需要做一些配置来启用装饰器语法。 step1: 在 tsconfig.js…...
计算机如何学习
1. 不要只盯着计算机语言学习,你现在已经学习了C语言和Java,暑假又规划学习Python,最后你掌握的就是计算机语言包而已。 2. 建议你找一门想要深挖的语言,沿着这个方向继续往后学习知识就行。计算机语言是学不完的,而未…...
【Python 基础】函数 - 1
函数 从前面的章节中,你已经熟悉了 print()、input()和 len()函数。Python 提供了这样一些内建函数,但你也可以编写自己的函数。“函数”就像一个程序内的小程序。 为了更好地理解函数的工作原理,让我们来创建一个 函 数 。 在 文 件 编 辑器 中 输 入 下 面 的 程 序 , …...
从0到1开发一个Vue3的新手引导组件(附带遇到的问题以及解决方式)
1. 前言: 新手引导组件,顾名思义,就是强制性的要求第一次使用的用户跟随引导使用应用,可以让一些第一次使用系统的新手快速上手,正好我最近也遇到了这个需求,于是就想着开发一个通用组件拿出来使用(写完之后才发现element就有,后悔了哈哈哈😭😭) 示例图…...
概率统计(二)
二维离散型 联合分布律 样本总数为16是因为,两封信分别可以放在4个信箱 边缘分布律 条件分布律 独立性 选填才能用秒杀 联合概率乘积不等于边缘概率的乘积则不独立 二维连续型 区间用一重积分面积用二重积分 离散型随机变量 常见6个分布的期望和方差 离散型随机变…...
文件类:如何将excel文件转为csv文件(且保留时间格式)?
最近有个场景,在ftp服务器上,读取csv文件并入库,但是客户提供的一部分文件却是xls文件,就得搞个将excel转为csv文件的方法,话不多说直接开干。 方法 public static void convertExcelToCSV(String excelFilePath, Str…...
FiddlerScript Rules修改-更改发包中的cookie
直接在fiddler script editor中增加如下处理代码即可 推荐文档oSession -- 参数说明 测试笔记 看云...
直升机停机坪的H代表什么
可为什么直升机的停机坪为什么要用“H”来表示呢? Helicopter 直升机停机坪的“H”来自直升机的英文Helicopter的首字母,也是停机坪的识别标志,表示可用于直升机的垂直起降,方便于直升机飞行员在空中能快速识别降落位置。 另外…...
hyperworks软件许可优化解决方案
Hyperworks软件介绍 Altair 仿真驱动设计改变了产品开发,使工程师能够减少设计迭代和原型测试。提升科学计算能力扩大了应用分析的机会,使大型设计研究能够在限定的项目时间完成。现在,人工智能在工程领域的应用再次改变了产品开发。基于物理…...
四川赤橙宏海商务信息咨询有限公司抖音电商服务靠谱吗?
在数字化浪潮席卷全球的今天,电商行业蓬勃发展,各种新兴电商平台层出不穷。其中,抖音电商以其独特的社交属性和庞大的用户基础,迅速崛起为行业新星。四川赤橙宏海商务信息咨询有限公司,作为专注于抖音电商服务的佼佼者…...
鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥派生(C/C++)】
密钥派生(C/C) 以HKDF256密钥为例,完成密钥派生。具体的场景介绍及支持的算法规格,请参考[密钥生成支持的算法]。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生成密钥 指定密钥别名。 初始化密钥属…...
【ARMv8/v9 GIC 系列 6 -- 中断优先级详细介绍】
请阅读【ARM GICv3/v4 实战学习 】 文章目录 Interrupt prioritizationInterrupt Priority ValueSGI And PPI Priority SetSecure And Non-secure Priority AccessInterrupt prioritization 在ARM GICv3和GICv4架构中,中断的优先级化(prioritization)是通过以下几种方式来描…...
【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案
🔥 个人主页:空白诗 文章目录 一、CORS错误的常见原因二、解决方案1. Vue3 Vite项目下的解决方案创建Vue3 Vite项目配置Vite的代理发送请求 2. jQuery项目下的解决方案使用CORS请求头使用JSONP 3. 其他环境下的解决方案使用服务器端代理设置CORS头使用…...
Adafruit Fritzing元件库安装与使用指南:提升硬件设计效率
1. 项目概述:为什么你需要Adafruit Fritzing元件库?如果你玩过Arduino或者树莓派,肯定对Adafruit这家公司不陌生。他们出品的各种传感器、显示屏和扩展板,几乎成了开源硬件项目的“标准件”。但每次在Fritzing里画电路图ÿ…...
Python 中的 @property:像访问属性一样调用方法
# Python 中的 property:像访问属性一样调用方法在写类的时候,我们经常会遇到一个问题: 对象的属性如果可以被随便修改,就可能出现一些不合理的数据。比如一个人的年龄:python class Person:def __init__(self, age)…...
别再死记硬背了!用Vivado 2022.1和Vitis搭建ZYNQ工程,这份避坑清单帮你省下3小时
ZYNQ开发实战:从Vivado到Vitis的高效避坑指南 当第一次打开Vivado和Vitis的开发者,往往会被复杂的界面和繁琐的配置流程所困扰。本文将以"按键控制LED"这一经典案例为主线,揭示ZYNQ开发中最容易踩中的12个深坑,并提供经…...
对比直接使用官方api体验taotoken在计费透明性与灵活性上的优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用官方 API 体验 Taotoken 在计费透明性与灵活性上的优势 在开发基于大模型的应用时,除了模型效果和稳定性&…...
ESP32玩转1.8寸LCD屏:用TFT_eSPI库做个桌面小时钟(附完整代码)
ESP32打造高颜值桌面时钟:从TFT_eSPI库到完整项目实战 在创客的世界里,将硬件与代码结合创造出实用又有趣的项目总是令人兴奋。今天我们要用ESP32开发板和1.8寸ST7735驱动的LCD屏幕,打造一个功能完善、界面美观的桌面电子时钟。这个项目不仅适…...
Cursor + Claude Code 双栈协作:3 种项目级配置同步方案落地实录
1. 项目级配置同步不是“配完就跑”,而是让 AI 真正理解你的项目语义 大多数人把 Cursor + Claude Code 当成一个“更聪明的自动补全”,装完插件、填个 API Key、点几下设置,就以为双栈协作完成了。我试过三个不同规模的项目——一个 2000 行的 Python 数据处理脚本集、一个…...
避坑指南:CubeMX配置STM32F429三重ADC时,ADC2/3的DMA请求为啥点不了?附手动开启代码
STM32F429三重ADC配置疑难解析:当CubeMX无法启用ADC2/3的DMA请求时如何手动突破限制 在嵌入式开发中,STM32系列微控制器因其丰富的外设资源而备受青睐,其中ADC(模数转换器)模块的性能直接影响信号采集系统的精度与速度…...
探索NVMe管理工具的未来:v2.12版本如何重新定义存储控制边界
探索NVMe管理工具的未来:v2.12版本如何重新定义存储控制边界 【免费下载链接】nvme-cli NVMe management command line interface. 项目地址: https://gitcode.com/gh_mirrors/nv/nvme-cli NVMe-CLI作为现代NVMe固态存储设备的核心管理工具,在v2.…...
3步打造你的专属Minecraft领地世界:PlotSquared终极指南
3步打造你的专属Minecraft领地世界:PlotSquared终极指南 【免费下载链接】PlotSquared PlotSquared - Reinventing the plotworld 项目地址: https://gitcode.com/gh_mirrors/pl/PlotSquared 还在为Minecraft服务器管理混乱而烦恼吗?想要创建一个…...
Nintendo Switch文件管理终极指南:NSC_BUILDER如何成为你的游戏库管家
Nintendo Switch文件管理终极指南:NSC_BUILDER如何成为你的游戏库管家 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase title…...
