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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM