統計《ASP.Net特供視頻教程》總長度

 突然想統計一下我錄製過的視頻一共多長時間,因爲視頻文件不少,一共72個,挨個打開進行累加不是程序員應該想起的辦法。因此就打算寫一個程序來完成這件事,最核心的問題就是「得到一個視頻文件的時長」。 ffmpeg是一個專業的音頻視頻處理開源技術,藉助於它能夠完成視頻轉碼、視頻截圖、視頻提取等工做,ffmepg也提供了獲取視頻長度的方法,不過想一想只是獲取視頻長度這麼一件事就要動用ffmpeg有點「殺雞用牛刀」的感受,因此就上網搜尋是否有其餘得到視頻文件長度的方法,很快就找到了這樣一篇文章《C# 獲取視頻文件播放時長》,使用下面的代碼就能夠得到視頻文件的長度:html

public string GetMediaTimeLen(string path)

{

    try

    {

        Shell32.Shell shell = new Shell32.ShellClass();

        Shell32.Folder folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\\")));

        Shell32.FolderItem folderitem =

                                     folder.ParseName(path.Substring(path.LastIndexOf("\\") + 1));

        if (Environment.OSVersion.Version.Major >= 6)

        {

            return folder.GetDetailsOf(folderitem, 27);

        }

        else

        {

            return folder.GetDetailsOf(folderitem, 21);

        }

 

    }

    catch (Exception ex)

    {

        return null;

    }

}

 

         把這段代碼放到VS中編譯,發現找不到Shell32.Shell等類,原來還須要手動引入Shell32這個Com組件,太麻煩。我想到藉助於C#中的dynamic新特性能夠簡化Com組件調用,就把代碼改寫成以下:程序員

public static string GetMediaTimeLen(string path)

{

    System.Type objType = System.Type.GetTypeFromProgID("Shell.Application");

    dynamic shell = System.Activator.CreateInstance(objType);

    //文件路徑

    dynamic folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\\")));

    //文件名稱

    dynamic folderitem = folder.ParseName(path.Substring(path.LastIndexOf("\\") + 1));

    if (Environment.OSVersion.Version.Major >= 6)

    {

        return folder.GetDetailsOf(folderitem, 27);

    }

    else

    {

        return folder.GetDetailsOf(folderitem, 21);

    }

}

 

         接下來的程序就很簡單了,遍歷文件夾下全部的.wmv文件,而後把每一個文件的時長累加便可:shell

string[] files = System.IO.Directory.GetFiles(@"F:\視頻教程\2013年末asp.net公開課\剪輯後", "*.wmv", System.IO.SearchOption.AllDirectories);

TimeSpan tsTotal = TimeSpan.Zero;

foreach (string file in files)

{

    string len = GetMediaTimeLen(file);

    TimeSpan tsLen = TimeSpan.Parse(len);

    tsTotal += tsLen;

}

 

Console.WriteLine(tsTotal);

 

         程序運行了一會就獲得告終果「16:27:35」!數據庫

         從ASP.Net零基礎到學生熟悉ASP.Net的本質、會使用ASP.Net實現增刪改查程序、掌握Cookie/Session的原理、掌握AJAX到最後使用ASP.Net開發一個企業網站系統,只用16個小時,這種自豪感瞬間爆棚!緩存

 

如鵬網.Net培訓班正在報名,有網絡的地方就能夠參加如鵬網的學習,學完就能高薪就業,點擊此處瞭解安全

 

 

 

    三年前只要懂「三層架構」就能夠說「精通分層架構」;如今則須要懂IOC(AutoFac等)、CodeFirst、lambda、DTO等才值錢;網絡

 

    三年前只要會SQLServer就能夠說本身「精通數據庫開發」;如今則需還須要掌握MySQL等開源數據庫才能說是「.Net開源」時代的程序員;架構

 

    三年前只要會進行用戶上傳內容的安全性處理便可;如今則須要熟悉雲存儲、CDN等才能在雲計算時代遊刃有餘;asp.net

 

    三年前只要掌握Lucene.Net就會說本身「熟悉站內搜索引擎開發」;如今你們都用ElasticSearch了,你還用Lucene.Net就太老土了;學習

 

    三年前發郵件仍是用SmtpClient;如今作大型網站發郵件必須用雲郵件引擎;

 

    三年前緩存就是Context.Cache;如今則是Redis、Memcached的天下;

 

    如鵬網再次引領.Net社區技術潮流!點擊此處瞭解如鵬網.Net最新課程

相關文章
相關標籤/搜索