• 统计《ASP.Net特供视频教程》总长度


     忽然想统计一下我录制过的视频一共多长时间,由于视频文件很多,一共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最新课程

      

  • 相关阅读:
    Flask基础
    Scrapy框架(持久化,去重,深度控制,cookie)
    scrapy框架 简易整理
    BeautifulSoup 模块
    requests模块
    复习第三天
    在Django中使用原生Sql
    ajax跨域简单请求和复杂请求
    复习第二天
    IOS
  • 原文地址:https://www.cnblogs.com/rupeng/p/3456373.html
Copyright © 2020-2023  润新知