在C#中用MediaInfo获取视频或音频的属性
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获取视频或音频的属性的更多相关文章
- .NET 处理视频-MediaInfo 获取视频信息
获取视频信息的组件很多,本节介绍的是:MediaFile. 第一步.添加 MediaInfoDotNet 在项目上右键,选择“管理 NuGet 程序包”,浏览以选中 MediaInfoDotNet,然 ...
- Python3.6_x86通过FFpmeg获取视频或音频的时长和分辨率
前言 前段时间公司在做流媒体服务,与许多厂家合作拿了许多视频过来,现在要对这些视频文件进行整理,通过特殊的编码排列,获取他们的时长以及分辨率,这里我遇到一个大坑,请往下面看. # -*- coding ...
- MediaInfo用来分析视频和音频文件的编码和内容信息的超好用工具
转载:http://blog.csdn.net/ameyume/article/details/6718705 MediaInfo简介 MediaInfo 用来分析视频和音频文件的编码和内容信息. M ...
- 视频和音频播放的演示最简单的例子6:OpenGL广播YUV420P(T经exture,采用Shader)
===================================================== 最简单的视频和音频播放的演示样品系列列表: 最简单的视音频播放演示样例1:总述 最简单的视音 ...
- H5多媒体(用面向对象的方法控制视频、音频播放、暂停、延时暂停)
视频,音频播放器会是我们在工作中用到的一些h5新标签,它自带一些属性,比如暂停播放,快进快退,但是,我们经常不用原生的样式或者方法,我们需要自定义这些按钮来达到我们需要的样式,也需要我们自定义来实现一 ...
- 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频
[源码下载] 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频 作者:webabcd 介绍与众不同 win ...
- Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放
一,VideoJS介绍 引用脚本,videojs很为你着想,直接cdn了,你都不需要下载这些代码放入自己的网站 <link href=”http://vjs.zencdn.net/c/video ...
- FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据
如何使用FFmpeg抽取音视频的音频数据,代码如下: void adts_header(char *szAdtsHeader, int dataLen); // 使用FFmpeg从视频中抽取音频 vo ...
- js的视频和音频采集
js的视频和音频采集 今天要写的,不是大家平时会用到的东西.因为兼容性实在不行,只是为了说明下前端原来还能干这些事. 大家能想象前端是能将摄像头和麦克风的视频流和音频流提取出来,再为所欲为的么.或者说 ...
随机推荐
- 使用oVal进行Java Bean 验证的注意事项
如果需要不同条件验证不同的属性的时候,需要使用profiles属性,每个校验注解符中都有.注意:oVal默认是启用所有的profiles,所以在对单独一个profile进行启用的时候,需要先disab ...
- 转:评估指标MAP
转:http://www.zhenv5.com/?p=1079 MAP可以由它的三个部分来理解:P,AP,MAP 先说P(Precision)精度,正确率.在信息检索领域用的比较多,和正确率一块出现的 ...
- CF1093F Vasya and Array DP
题面 题面 \(\Delta\)题面有点问题,应该是数列中没有长度大于等于\(len\)的连续数字才是合法的. 题解 设\(f[i][j]\)表示DP到\(i\)位,以\(j\)为结尾的方案数, \( ...
- CentOS 7.0 作为服务器注意事项
配置防火墙,开启80端口.3306端口: CentOS 7.0默认使用的是firewall作为防火墙 关闭firewall: systemctl stop firewalld.service #停止 ...
- 【bzoj3811】【清华集训2014】玛里苟斯
3811: 玛里苟斯 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 500 Solved: 196[Submit][Status][Discuss] ...
- 洛谷P1396 营救
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...
- C++11中对容器的各种循环遍历的效率比较
#include "CycleTimeTst.h" #include <string> #include <vector> #include <lis ...
- Libevent学习笔记(五) 根据例子学习bufferevent
libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的. 这个例子在Sample中 这个例子之前讲解过,这次主要看下buf ...
- Android 统一配置依赖管理
Android Studio中默认就是使用Gradle来构建管理工程的,当我们在工程构建过程中创建了多个Module时,就可能存在一个问题,那就是每个Module以及Module中一些公用库的依赖存在 ...
- Ant Design Upload 组件上传文件到云服务器 - 七牛云、腾讯云和阿里云的分别实现
在前端项目中经常遇到上传文件的需求,ant design 作为 react 的前端框架,提供的 upload 组件为上传文件提供了很大的方便,官方提供的各种形式的上传基本上可以覆盖大多数的场景,但是对 ...