zoukankan      html  css  js  c++  java
  • 在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: est.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上那用起来就更加方便了。

  • 相关阅读:
    如何保证 Redis 缓存与数据库双写一致性?
    如何合理地估算线程池大小?
    不用装工具,一条 Linux 命令就能实现文件上传下载!
    看了 Google 大神 Jeff Dean 的传说,我拜服了~
    div设置水平垂直居中
    "起用"与"启用"
    徇私舞弊
    精选排比金句20例
    一笔画图推
    一笔画
  • 原文地址:https://www.cnblogs.com/yechangzhong-826217795/p/7218027.html
Copyright © 2011-2022 走看看