• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

在C#中用MediaInfo获取视频或音频的属性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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上那用起来就更加方便了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c++/c遇到的warnings、errors(更新中)发布时间:2022-07-14
下一篇:
POJC++程序设计编程题#1List发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap