MediaInfo编程指南

MediaInfo全平台安装与使用指南:从GUI到CLI的媒体文件分析利器 媒体文件元数据是数字内容处理中的基础技术概念,它记录了视频、音频等文件的编码格式、分辨率、码率等核心参数。其原理是通过解析文件封装结构,提取出音视频流、字幕轨等组件的技术信息。掌握元数据分析技术对于媒体资产管理、内容制作和播放兼容性排查具有重要价值,能帮助用户快速确认文件规格、排查播放问题。在实际应用中,无论是视频剪辑师检查素材,还是运维工程师批量处理媒体库,都需要高效的工具支持。MediaInfo作为一款开源工具,通过提供GUI和CLI两种模式,完美覆盖了从直观查看到批量自动化的不同场景需求,其跨平台特性 阅读详情

        近期需要写一个对媒体文件的解析类,用到了MediaInfo这个工具,但是在命令行下进行使用的话,需要做比较多的文本过滤工作,于是想到了基于其SDK进行开发,下面列出学习的一些总结。

        首先了解下MediaInfo工具的输出

       

        其输出包含了文件中各个流的信息,此例为5个流,分别为基本信息、视频轨道信息、音频轨道信息、字幕轨道信息、节目轨道信息。每个流下面都对应着许多不同的参数 说明 ,由于现在音视频领域编解码工具比较多,但却无有统一的标准,因此每个工具都会打上一些基本说明信息,众多工具在参数的说明上都有一定的风格,因而MediaInfo在解析时基本是遍历所有可能的值去列出其认识的参数信息,若一个新工具打的参数信息没有包含在MediaInfo所支持的参数中,则就不能被识别出来。

        有了这些基础知识,下面我们介绍开发方法。

        要进行开发,要到官网上下载其源码或SDK包,解压会得到MediaInfo.dll及对应的头文件,如何搞个VS工程不在这里介绍,只介绍库的使用。

        DLL导出了一个MediaInfo类,这个类可以完成解析一个媒体文件的所有功能,其有如下方法:

        int  Open(string& file)  打开指定路径的文件,若成功返回1,失败返回0

        void Close()                  释放打开的资源

        string Inform()              解析文件并将输出返回

        string option(string& key, string& value="")    设定选项,或获取配置信息。

           设定方面的选项有Complete=1,设置是否输出完全信息

           获取方面的选项有"Info_Version", "Inf_Codecs" , "Info_Parameters"分别获取库版本,支持的编码信息,支持的所有参数

        string  get( StreamKind, StreamNumber, Parameter,InfoKind)   获取指定流类型的参数特定信息,这个函数比较重要,重点介绍

          StreamKind:流类型,如Steam_General,Stream_Audio,Stream_Video,Stream_Text之类的;

          StreamNumber:指特定类型流的序号,如果有n个字幕,则字幕由0编号开始到n-1。

          Parameter:指定参数名或参数的序号,参数名可以通过Option方法获得所有支持的参数。由于不同的流类型对应的参数是不同的,因而MediaInfo针对不同的流类型定义了众多的参数值,这个值的最大值可以通过取每个流的Count参数获得。然后我们就可以从0-count-1去遍历所有可能的值。

          InfoKind:获取的信息类型,定义的有Info_Text,这个是默认值,可以不用指定。其他有Info_Name等。

       int Count_Get(StreamKind , StreamNumber)  若指定StreamNumber,则获取指定流的可遍历参数个数,功能类似于Get(Count)。若不指定,则返回此类流的个数,功能类似于Get($type_Count)。但执行效率更高。

       下面通过一个例子看此库如何使用

#ifdef MEDIAINFO_LIBRARY
    #include "MediaInfo/MediaInfo.h" //Staticly-loaded library (.lib or .a or .so)
    #define MediaInfoNameSpace MediaInfoLib;
#else //MEDIAINFO_LIBRARY
    #include "MediaInfoDLL/MediaInfoDLL.h" //Dynamicly-loaded library (.dll or .so)
    #define MediaInfoNameSpace MediaInfoDLL;
#endif //MEDIAINFO_LIBRARY
#include <iostream>
#include <iomanip>
using namespace MediaInfoNameSpace;

int main ()
{
    //Information about MediaInfo
    MediaInfo MI;
    String To_Display=MI.Option(__T("Info_Version"), __T("0.7.13;MediaInfoDLL_Example_MSVC;0.7.13")).c_str();

    To_Display += __T("\r\n\r\nInfo_Parameters\r\n");
    To_Display += MI.Option(__T("Info_Parameters")).c_str();

    To_Display += __T("\r\n\r\nInfo_Codecs\r\n");
    To_Display += MI.Option(__T("Info_Codecs")).c_str();

    //An example of how to use the library
    To_Display += __T("\r\n\r\nOpen\r\n");
    MI.Open(__T("example.mp4"));

    To_Display += __T("\r\n\r\nInform with Complete=false\r\n");
    MI.Option(__T("Complete"));
    To_Display += MI.Inform().c_str();

    To_Display += __T("\r\n\r\nInform with Complete=true\r\n");
    MI.Option(__T("Complete"), __T("1"));
    To_Display += MI.Inform().c_str();

    To_Display += __T("\r\n\r\nCustom Inform\r\n");
    MI.Option(__T("Inform"), __T("General;Example : FileSize=%FileSize%"));
    To_Display += MI.Inform().c_str();

    To_Display += __T("\r\n\r\nGet with Stream=General and Parameter=\"FileSize\"\r\n");
    To_Display += MI.Get(Stream_General, 0, __T("FileSize"), Info_Text, Info_Name).c_str();

    To_Display += __T("\r\n\r\nGetI with Stream=General and Parameter=46\r\n");
    To_Display += MI.Get(Stream_General, 0, 46, Info_Text).c_str();

    To_Display += __T("\r\n\r\nCount_Get with StreamKind=Stream_Audio\r\n");
  
    toStringStream SS;
    SS << std::setbase(10) << MI.Count_Get(Stream_Audio);
    To_Display += SS.str();


    To_Display += __T("\r\n\r\nGet with Stream=General and Parameter=\"AudioCount\"\r\n");
    To_Display += MI.Get(Stream_General, 0, __T("AudioCount"), Info_Text, Info_Name).c_str();

    To_Display += __T("\r\n\r\nGet with Stream=Audio and Parameter=\"StreamCount\"\r\n");
    To_Display += MI.Get(Stream_Audio, 0, __T("StreamCount"), Info_Text, Info_Name).c_str();

    To_Display += __T("\r\n\r\nClose\r\n");
    MI.Close();

    std::cout  << To_Display;

    return 0;
}

        自己在使用的时候,建议做下封装,提供更便捷的接口,因为我们通常并不需要遍历所有的参数,只需要取我们经常用的几个参数。







Windows环境编译MediaInfo源码详细过程 阅读详情

相关推荐

F1.11 MediaInfo简介

MediaInfo简介MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款自由软件,可以免费使用、免费获得源代码,许可协议是GNU GPL/LGPL。

福优学苑@音视频+流媒体 257

使用MediaInfo.dll获取是媒体文件信息

MediaInfo是一款专门用来分析音视频文件编码和内容信息的开源软件,提供的形式有多种:桌面应用程序,命令行下的使用,动态库。 动态库的下载方式: 官网地址MediaInfo 下载完成之后解压后有一下文件,主要用的东西在MediaInfoLib中,剩下两个文件是辅助库。 找到MediaInfo.dll 和MediaInfoDLL.h文件(可能文件下面没有dll文件,这是可以自己打开里面已有的vs工程,自己主动编译一遍就有了)。 下面介绍一下简单的使用: #include <iostream&

prerfect_cat的博客 2531

掌握MediaInfo.dll:音视频元数据提取与分析

MediaInfo.dll的主要功能包括但不限于:- 提取音视频文件的各种技术参数和格式信息。- 支持多种音频编码格式和视频编码格式的解析。- 提供多种语言界面,方便不同用户使用。- 支持跨平台使用,可以在不同的操作系统上运行。- 提供丰富的API接口,方便开发者在自己的项目中集成。API,即应用程序编程接口,是软件系统不同组成部分衔接的约定。它允许一个软件组件向其他组件提供服务。在编程领域,API定义了各种例程、协议和工具,使得开发者可以构建软件应用。

weixin_36173034的博客 849

音视频开发常用工具

我们在进行音视频开发过程中不可避免的需要使用一些工具进行协助开发,本文重点讲解音视频开发过程中常用工具以及常用功能。VLC 支持多种常见音视频格式,支持多种流媒体传输协议,也可当做本地流媒体服务器使用,功能十分强大。MediaInfo 用来分析视频和音频文件的编码和内容信息。①、使用 MediaInfo 可以获得多媒体文件的哪些信息?内容信息: 标题, 作者, 专辑名, 音轨号, 日期, 总时间……视频: 编码器, 长宽比, 帧频率, 比特率……音频。

明天你好的博客 5555

MediaInfoLib:方便统一显示视频和音频文件中最相关的技术和标签数据

MediaInfoLib自述文件 MediaInfo(Lib)是视频和音频文件最相关的技术和标签数据的便捷统一显示。 MediaInfoLib- 版权所有(c)MediaArea.net SARL。 版权所有。 该程序在BSD-2-条款许可条件下为免费软件。 有关更多信息,请参见License.html。

MediaInfo_DLL

MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件。这是它的Dll,通过Dll可以把它的功能嵌入JAVA,C++,VB等等工程中

MediaInfo安装与配置完全指南

MediaInfo是一款强大的开源软件,专为视频和音频文件提供一个方便统一的方式来展示最重要的技术参数和标签数据。它支持多种文件格式,让用户能够轻松获取容器格式、编码信息、持续时间、比特率等关键信息。此项目主要使用C++作为开发语言,并且部分辅助工具可能涉及Pascal、Objective-C、Kotlin等其他语言。 ## 关键技术和框架 MediaInfo依赖于ZenLib库来处理文件结构,...

gitblog_09513的博客 2265

手把手教你用Simulink+CANoe+Carsim搭建硬件在环仿真环境(避坑指南)

本文是一份详细的硬件在环仿真环境搭建指南,重点讲解如何将Simulink、CANoe和CarSim三大工具进行实战融合。内容涵盖软件版本兼容性、授权避坑、环境配置,并分步演示了从离线联合仿真到实现软实时同步的完整流程,旨在帮助汽车电子工程师高效构建稳定的HIL测试平台。

weixin_29092579的博客 404

MediaInfo源代码分析 1:整体结构

MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用、免费获得源代码)。之前编程的时候,都是直接调用它提供的Dll,这次突然来了兴趣,想研究一下它内部究竟是怎么实现的。 MediaInfo的源文件可以从Sourceforge上面下载,地址:http://sourceforge.net/projects/mediainfo/ 在这里我使用的是 Media Pl

雷霄骅(leixiaohua1020)的专栏 3万+

VSAN闪存缓存磁盘故障处理指南-RAID0模式实战解析

本文详细解析了VSAN集群中RAID0模式下的闪存缓存磁盘故障处理全流程。通过模拟真实故障场景,从告警识别、数据重建策略到磁盘组重构,提供了手把手的实战操作指南,并深入探讨了RAID0缓存故障的独特影响与风险,为运维人员应对此类高性能存储架构的突发问题提供了专业解决方案。

assembly8low的博客 444

AI编码的“黑箱危机”终结者:OpenSpec如何让你的代码从“猜谜”变“契约”?

OpenSpec的真正价值,在于它将AI编码从"经验驱动"推向"契约驱动"——当人类与AI对"目标是什么"达成显式共识,编码就从"猜谜游戏"变成了"工程实现"。这种转变不仅提升效率,更重塑了开发者与AI的关系:AI从"替代者"回归"协作者",而人类则聚焦于"定义正确的事"而非"正确地做事"。对于开发者,OpenSpec提供了驾驭AI的缰绳;对于团队,它构建了协作的基石;对于行业,它预示着AI编码工业化的开端。

haolove527的专栏 1348

使用mediainfo库取得媒体文件的tag

mediainfo的官网:http://mediaarea.net/ #ifdef MEDIAINFO_LIBRARY #include "MediaInfo.h" //Staticly-loaded library (.lib or .a or .so) #define MediaInfoNameSpace MediaInfoLib; #else //MEDIAINFO

u012297136的专栏 1035

提示deepseek生成完整的json用于对接外部API

通过精准的提示词设计(字段过滤、格式约束)、动态验证机制(自检与修正)和官方模板参考,可有效确保DeepSeek生成的JSON纯净无冗余。

神棍之路 2307

PHP-MediaInfo 项目常见问题解决方案

PHP-MediaInfo 项目常见问题解决方案 1. 项目基础介绍 PHP-MediaInfo 是一个 PHP 语言编写的开源项目,它是一个对 MediaInfo 命令行工具的封装,使得用户可以在 PHP 环境中方便地获取多媒体文件的信息,例如视频、音频、字幕等。 主要编程语言 PHP 2. 新手常见问题及解决步骤 问题一:如何安装 PHP-MediaInfo? 解决步骤: 确保你的系统中...

gitblog_00281的博客 768

UE5.5使用ControlRig实现MetaHumanNPC看向玩家

本文介绍了在虚幻引擎中实现NPC自然看向玩家的技术方案。通过MetaHuman的ControlRig系统,采用面部动画曲线+全身动画Montage的表演方式,结合ControlRig驱动CTRL_lookat控制器实现视线追踪。

平常心 1302

基于STM32LXXX的模数转换芯片ADC(CMS24AD2001)驱动C程序设计

/ 电压 = (原始值 / 2^23) * Vref (注意:24位有符号数范围为 -2^23 到 2^23-1)//---------------- 硬件端口映射 (请根据实际电路修改) ----------------ADC_SCLK_HIGH();- PGA 放大倍数可选:1、2、4、8、16、32、64、128、256;//---------------- 宏定义操作 -------------------//---------------- 函数声明 -------------------

myron6688的博客 160

MediaInfo源代码分析 1 整体结构

MediaInfo源代码分析 1 整体结构

hffgjh的博客 178

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

MediaInfo_DLL 资源文件介绍

MediaInfo_DLL 资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 概述 MediaInfo_DLL 是一款功能强大的资源文件,它为开发者提供了MediaInfo的动态链接库(DLL)。MediaInfo 是一款自由软件,主要用于分析视频和音频文件的编码格式以及内容信息。通过使用这个DLL,您可以轻松地将MediaInfo的功能集成到JAVA、C++、VB等...

gitblog_06777的博客 392

AutoSAR系列讲解(入门篇)2.1-AppL概述

该章主要是讲解SWC是如何在ECU中分布的

雪云飞星的博客 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MediaInfo源代码分析 4:Inform()函数

我们来看一下MediaInfo中的Inform()函数的内部调用过程 首先Inform()函数封装了MediaInfo_Internal类中的Inform()函数 //返回文件信息 String MediaInfo::Inform(size_t) { //封装了一层 return Internal->Inform(); } 查看一下MediaInfo_Internal

雷霄骅(leixiaohua1020)的专栏 6145

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MediaInfo 项目常见问题解决方案

MediaInfo 是一个开源项目,旨在提供一个统一的界面,用于显示视频和音频文件的最相关技术数据和标签信息。该项目的主要编程语言是 C++,它能够解析多种媒体格式,并提取出诸如编码格式、比特率、分辨率等详细信息。 ## 新手使用注意事项及解决方案 ### 1. 编译环境配置问题 **问题描述**:新手在尝试编译 MediaInfo 时,可能会遇到编译环境配置不正确的问题,导致编译失败。 ...

gitblog_09514的博客 831

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

探索MediaInfo:一款强大的多媒体元数据解析工具

探索MediaInfo:一款强大的多媒体元数据解析工具 项目地址:https://gitcode.com/gh_mirrors/me/MediaInfo 项目简介 是一个开源项目,由MediaArea团队开发,旨在提供一种简单易用的方式来获取多媒体文件(如视频、音频和图像)的各种元数据信息。通过此工具,开发者和普通用户可以深入了解媒体文件的编码细节,从而更好地理解和处理它们。 技术分析 Media...

gitblog_00085的博客 1818

C#使用MediaInfo查看媒体信息

网上关于MediaInfo相关的使用经验很少,而且官方Demo介绍也只是输出INFO,没有每一项信息的调用参数,今天,将自己总结的经验备份下,省得以后又得找。 1.将MediaInfo.dll放入可执行目录。 2.将官网Demo里的MediaInfoDLL.cs放入项目中。 View MediaInfoDLL.cs Code 1 using System; 2

星精灵的新世纪 2985
上一篇: 你应该知道的16个Linux服务器监控命令
下一篇: 《程序员的职业素养》读后
zzulp
博客等级 码龄19年 464粉丝 176原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值