MediaInfo是一个开源的获取视频或音频的信息的非常便利的工具,它本身就带有一个GUI界面,可以非常方便我们查看视频信息。但是,当我们写一些转码程序时,往往需要在程序中获取视频信息的时候。

以前我经常使用的方式是通过命令行调用MediaInfo.exe,通过--Output=XML参数来将其输出为一个XML文件,然后通过解析XML文件来获取视频信息。这种常规的做法虽然思路比较简单,但是如果需要解析的属性比较多的时候,则就显得比较繁琐了。便打算直接调用MediaInfo.dll中的api接口,直接获取其属性。

虽然MediaInfo是开源的,但由于它不是.net语言编写的,在C#中是无法直接使用的,但仍然是可以通过Pinvoke的方式来调用的。不过Nuget上已经有这种封装好了的库供我们直接使用的:

我试用过一下,本身这个封装是没有什么问题的,但不知道为什么作者对于属性是采用的首字母小写的方式,感觉很不习惯。便找了Sourceforge上的另一个库MediaInfoNET,该库的说明地址如下:http://teejeetech.blogspot.com/2013/01/mediainfo-wrapper-for-net-projects.html。但由于看这个地址不爽,只有在火星上才能访问这个网站,因此我就把原文的例子转录了下来,使用起来还是非常简单的:

static void Main(string[] args)
    {
        MediaFile aviFile = new MediaFile(@"r:\test.avi");

Console.WriteLine();
        Console.WriteLine("General ---------------------------------");
        Console.WriteLine();
        Console.WriteLine("File Name : {0}", aviFile.Name);
        Console.WriteLine("Format : {0}", aviFile.General.Format);
        Console.WriteLine("Duration : {0}", aviFile.General.DurationString);
        Console.WriteLine("Bitrate : {0}", aviFile.General.Bitrate);

if (aviFile.Audio.Count > 0)
        {
            Console.WriteLine();
            Console.WriteLine("Audio ---------------------------------");
            Console.WriteLine();
            Console.WriteLine("Format : {0}", aviFile.Audio[0].Format);
            Console.WriteLine("Bitrate : {0}", aviFile.Audio[0].Bitrate.ToString());
            Console.WriteLine("Channels : {0}", aviFile.Audio[0].Channels.ToString());
            Console.WriteLine("Sampling : {0}", aviFile.Audio[0].SamplingRate.ToString());
        }

if (aviFile.Video.Count > 0)
        {
            Console.WriteLine();
            Console.WriteLine("Video ---------------------------------");
            Console.WriteLine();
            Console.WriteLine("Format : {0}", aviFile.Video[0].Format);
            Console.WriteLine("Bit rate : {0}", aviFile.Video[0].Bitrate.ToString());
            Console.WriteLine("Frame rate : {0}", aviFile.Video[0].FrameRate.ToString());
            Console.WriteLine("Frame size : {0}", aviFile.Video[0].FrameSize.ToString());
        }

Console.ReadLine();
    }

这个库貌似并没有在Nuget上发布,要是该作者把它也传到Nuget上那用起来就更加方便了。

在C#中用MediaInfo获取视频或音频的属性的更多相关文章

  1. .NET 处理视频-MediaInfo 获取视频信息

    获取视频信息的组件很多,本节介绍的是:MediaFile. 第一步.添加 MediaInfoDotNet 在项目上右键,选择“管理 NuGet 程序包”,浏览以选中 MediaInfoDotNet,然 ...

  2. Python3.6_x86通过FFpmeg获取视频或音频的时长和分辨率

    前言 前段时间公司在做流媒体服务,与许多厂家合作拿了许多视频过来,现在要对这些视频文件进行整理,通过特殊的编码排列,获取他们的时长以及分辨率,这里我遇到一个大坑,请往下面看. # -*- coding ...

  3. MediaInfo用来分析视频和音频文件的编码和内容信息的超好用工具

    转载:http://blog.csdn.net/ameyume/article/details/6718705 MediaInfo简介 MediaInfo 用来分析视频和音频文件的编码和内容信息. M ...

  4. 视频和音频播放的演示最简单的例子6:OpenGL广播YUV420P(T经exture,采用Shader)

    ===================================================== 最简单的视频和音频播放的演示样品系列列表: 最简单的视音频播放演示样例1:总述 最简单的视音 ...

  5. H5多媒体(用面向对象的方法控制视频、音频播放、暂停、延时暂停)

    视频,音频播放器会是我们在工作中用到的一些h5新标签,它自带一些属性,比如暂停播放,快进快退,但是,我们经常不用原生的样式或者方法,我们需要自定义这些按钮来达到我们需要的样式,也需要我们自定义来实现一 ...

  6. 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频

    [源码下载] 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频 作者:webabcd 介绍与众不同 win ...

  7. Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放

    一,VideoJS介绍 引用脚本,videojs很为你着想,直接cdn了,你都不需要下载这些代码放入自己的网站 <link href=”http://vjs.zencdn.net/c/video ...

  8. FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据

    如何使用FFmpeg抽取音视频的音频数据,代码如下: void adts_header(char *szAdtsHeader, int dataLen); // 使用FFmpeg从视频中抽取音频 vo ...

  9. js的视频和音频采集

    js的视频和音频采集 今天要写的,不是大家平时会用到的东西.因为兼容性实在不行,只是为了说明下前端原来还能干这些事. 大家能想象前端是能将摄像头和麦克风的视频流和音频流提取出来,再为所欲为的么.或者说 ...

随机推荐

  1. C++函数中的那些坑

    平时写程序时,我们可能或多或少对一些用法感到朦胧,下面我对一些易困惑大家,或者易用错的地方作点介绍. 一.函数的一些注意点 1.函数返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针. 2 ...

  2. 洛谷 P1560 蜗牛的旅行

    明显这是一道搜索题,其他题解写的有点复杂,我有更简便的写法 既然题目说走到不能再走,那我们就干脆一点,一条路走到黑,不到南墙不回头,一下把要走的路都走完,不但效率高,也好写,关键是大大节省了系统栈 一 ...

  3. CPP 替代 PIL 图片处理(缩略图生成)

    python中使用PIL(Pyhton Image Library)进行图片处理,好处就是编写简单方便,但是不能很好利用机器多核的特点,于是在项目中决定使用cpp来实现图片处理. 项目中的图片处理主要 ...

  4. 洛谷P3938 斐波那契

    题目戳 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子 ...

  5. 两种方法实现TAB菜单及文件操作

    1,自定义属性的方法实现----TAB菜单操作 cursor:pointer; 鼠标的小手 <!DOCTYPE html> <html lang="en"> ...

  6. BZOJ 3786: 星系探索 解题报告

    3786: 星系探索 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅 ...

  7. 使当前对象相对于上层DIV 水平、垂直居中定位

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  8. 服务器上 tomcat 配置了 tomcat-users 但是还是 403 的问题

    默认情况下,tomcat 限制了只能本机访问 如果我们想要修改这个设置: 编辑 webapps/manager/META-INF/context.xml <!--<Valve classN ...

  9. jinja2 中的 Template 批量替换json字符串中的内容

    项目中用到elasticsearch,使用Json格式查询方式,一个查询语句中有好几个地方需要替换,且替换的值都相同.最开始把json转为字符串发方式,利用format函数处理,发现再转回json时无 ...

  10. PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件

    PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件 简介: 在应用系统软件开发过程中,如果软件由很多对象组成,它的结构仅仅凭借分析很难理清,同时为了有利于软件的开发及重用, ...