在C#中用MediaInfo擷取視頻或音訊屬性

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.