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

楊中科發表於2013-12-03

 忽然想統計一下我錄製過的視訊一共多長時間,由於視訊檔案很多,一共72個,挨個開啟進行累加不是程式設計師應該想起的辦法。所以就打算寫一個程式來完成這件事,最核心的問題就是“獲得一個視訊檔案的時長”。 ffmpeg是一個專業的音訊視訊處理開源技術,藉助於它可以完成視訊轉碼、視訊截圖、視訊提取等工作,ffmepg也提供了獲取視訊長度的方法,不過想想只是獲取視訊長度這麼一件事就要動用ffmpeg有點“殺雞用牛刀”的感覺,所以就上網搜尋是否有其他獲得視訊檔案長度的方法,很快就找到了這樣一篇文章《C# 獲取視訊檔案播放時長》,使用下面的程式碼就可以獲得視訊檔案的長度:

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檔案,然後把每個檔案的時長累加即可:

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等才能在雲端計算時代遊刃有餘;

 

    三年前只要掌握Lucene.Net就會說自己“熟悉站內搜尋引擎開發”;現在大家都用ElasticSearch了,你還用Lucene.Net就太老土了;

 

    三年前發郵件還是用SmtpClient;現在做大型網站發郵件必須用雲郵件引擎;

 

    三年前快取就是Context.Cache;現在則是Redis、Memcached的天下;

 

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

  

 

相關文章