统计《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最新课程

相关文章
相关标签/搜索