视频学习笔记之 MediaInfo

解码一直用的 FFmpeg,最近想在解码之前读取帧数,发现FFmpeg只能采用遍历的方式获得帧数。

网上查了一下,MediaInfo 貌似是一款不错的库。

下载 MediaInfo 库文件,解压得到 MediaInfoDLL.h  头文件和 MediaInfo.dll
文件。

开始编译出现错误,换了一个别人用的 MediaInfo.dll ,正常运行,不明所以。估计是 dll 编译生成的问题吧。

控制台下 SDK 开发,C++语言,有例程:

#include "MediaInfoDLL.h"
#include <iostream>
#include <iomanip>
#include <string>

using namespace MediaInfoDLL;

int main ( )
{
    //Information about MediaInfo
    MediaInfo MI;
    String To_Display=MI.Option(__T("Info_Version"), __T("0.7.61.0;MediaInfoDLL_Example_MSVC;0.7.61.0")).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("d:\\picture\\video.avi"));
    //MI.Open(__T("Example.ogg"));

    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::wcout << To_Display;

    return 0;
}

运行结果如图:

上面获取的视频的完整信息,绝大部分情况下不需要活得这么详尽的信息,只关心自己想要的信息,在MFC下试了一下。

void CMediaInfo1Dlg::OnBnClickedRead()
{
	// TODO: 在此添加控件通知处理程序代码
	MediaInfo MI;
	CString width,height,count,rate,duration;
	MI.Open("D:\\picture\\video.avi");
	width = MI.Get(stream_t::Stream_Video,0,"Width").c_str();
	height = MI.Get(stream_t::Stream_Video,0,"Height").c_str();
	count = MI.Get(stream_t::Stream_Video,0,"FrameCount").c_str();
	rate = MI.Get(stream_t::Stream_Video,0,"FrameRate").c_str();
	duration = MI.Get(stream_t::Stream_Video,0,"Duration").c_str();
	MI.Close();
	AfxMessageBox(width+height+count+rate+duration);
}

依次为宽,高,帧数,帧频,时长。

时间: 2024-07-29 09:17:06

视频学习笔记之 MediaInfo的相关文章

韩顺平视频学习笔记-简易qq

1 package myclient; 2 3 import java.net.*; 4 import java.util.Date; 5 import java.text.SimpleDateFormat; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.io.*; 9 import java.awt.*; 10 11 import javax.swing.*;

Spring视频学习笔记(二)

Spring视频学习笔记(二) XML配置里的Bean自动装配(三个来测试实现) /** * Person类 * */ public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Ad

老男孩视频第二部视频学习笔记(第二部)之一:命令(1)

命令:chkconfig  cat ls tail ln find wc tar cut grep egrep 一.如何过滤出已知当前目录下的所有一级目录 如何区分目录和文件:   1.利用颜色(这个依赖与CRT等工具)   2.利用 开头字母 · ls –l | grep ^d (正则表达式中一个字符 在[]中是非,在[]外面就是以什么开头) · ls –lF | grep / · ls –lF | grep /$  小结: 1.通过ls –l 以长格式显示文件属性,然后过滤以d开关的行,就是

马哥教育视频学习笔记-shell脚本完成磁盘分区格式化

马哥教育视频学习笔记-shell脚本完成磁盘分区格式化-http://edu.51cto.com/lesson/id-28201.html 以下是脚本内容,内容比较简单,不做详解 在Linux上准备一块空闲的磁盘即可,如何分区可以在脚本内改下 #!/bin/bash # echo "Initial a disk..." echo -e "\033[31mWarning: \033[0m " #开始的说明信息,其中Warning以红色字体显示 fdisk -l 2&g

私房库视频学习笔记-小清新BBS系统开发技术归纳

自己一直在学习PHP开发,前一段时间在51cto上看到私房库孙胜利老师的视频,下载了他的小清新BBS系统开发视频学习.现在把里面的好的运用收集到这儿. 在看了这套视频后先了解整个web项目开发的过程. 公共配置参数: <?php date_default_timezone_set('Asia/Shanghai');//设置时区session_start();header('Content-type:text/html;charset=utf-8');if(version_compare(PHP_

How to use the Custom Material node and create Metaballs 官方视频学习笔记

这个视频Youtube没有字幕着实蛋疼,本人英语很渣,几乎听不懂,里面有很多文档没讲的重要信息(文档讲的东西太少了). 不过学习过后你可以解锁好几个姿势.这个视频主要是教你做DistanceField来写Shader,以下是最终效果: 一开始需要通过 r.ShaderDevelopmentMode 1,r.DumpShaderDebugInfo 1开启着色器开发模式(不过本人没感觉有什么用,可能到了用RHI写HLSL会比较有用) 为了方便之后的各位,本人在此贴上视频以及材质节点: 第一段代码:

“Linux Shell编程”视频学习笔记

一.Linux Shell基础编程 视频1 1.1.查看你系统shell信息 $ cat /etc/shell 命令可以获取Linux系统里面有多少种shell程序 $ echo $SHELL 命令可以查看当前你所使用的shell是哪一个 1.2.查看文件信息,ls $ ls -l 查看文件信息:文件类型.文件权限.文件硬链接数.文件所属用户.文件所属组.文件大小.文件最近修改时间.文件名 1.3.改变文件权限,chmod 只有root用户或者文件的所有者能改变文件的权限 例子:$ chmod

黑马程序员_Java基本数据的自动拆装箱及享元设计模式视频学习笔记

装箱:把基本数据类型装成java类(被托管?). 拆箱:把java类拆成基本数据类型(取消托管?). java新版本增加了自动装箱拆箱的特性,使得java基本类和基本数据类型可以无需转换直接参与计算.如: Integer iObj = 3 //自动装箱. system.out.println(iObj + 12);//自动拆箱. 在较早版本中不支持自动装箱拆箱,以上两句语句是错误的.  知识点1: 在装箱时,将基本数值类型装成java类Integer对象, 如: Integer i1 = 13:

智传播客hadoop视频学习笔记(共2天)

第一天:1.答疑解惑•  就业前景•  学习hadoop要有什么基础•  hadoop会像塞班一样,热一阵子吗•  hadoop学习起来容易还是困难•  课堂上的学习方法(所有实验必须按照要求做,重原理.重实践)•  通过本课程能学到什么 2. 课程简介•  以真实的电信详单分析程序为主线,讲解Hadoop,Hbase,Hive在大数据处理的应用场景与过程•  通过此课程,你能     •  掌握Hadoop基本知识,进行HadoopHDFS和MapReduce应用开发,搭建Hadoop集群