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

  

统计《ASP.Net特供视频教程》总长度相关推荐

  1. arcgisengine计算线要素总长度_弱电监控工程报价清单中,线材及辅材该如何计算?...

    在做方案过程中,经常遇到线材配置如:线材长度计算.线材选型.管槽选型等,根据以上问题现整理出关于线材配置方法. 一.线缆长度的估算 线缆长度估算分为有图纸和没图纸两种情况: 1.有图纸情况 在图纸上找 ...

  2. 一条直线上N个线段所覆盖的总长度

    转自http://blog.csdn.net/bxyill/article/details/8962832 问题描述: 现有一直线,从原点到无穷大. 这条直线上有N个线段.线段可能相交. 问,N个线段 ...

  3. arcgis 分区 属性值_如何使用ArcGIS计算分区河流(管线)总长度

    1. 概述 已知有一个河流的线图层(HydroL)和多个不同用地类型的图层(WoodyA表示绿化用地,ResidentialA表示公共用地,BoundaryA表示其他类型用地),目标是获得每个分区内的 ...

  4. 【ArcGIS Pro微课1000例】0011:ArcGIS Pro范围内汇总工具的巧妙使用——以甘肃省各地区内河流总长度计算为例

    文章目录 问题描述 范围内汇总工具介绍 # 案例实现 问题描述 统计甘肃省各个地区界内河流的总长度,如下图所示. 范围内汇总工具介绍 在ArcMap中可以实现河流总长度的统计,具体操作可以参考:[Ar ...

  5. 【ArcGIS风暴】ArcGIS获取一个省各个地区界内的河流的总长度--以甘肃省为例

    [问题分析]实际工作中,我们经常需要进行统计分析,如统计甘肃省各个地区界内的河流.公路.铁路等的总长度,统计各个地区界内总人口.作物产量.村镇分布等等.ArcGIS提供了强大的空间统计功能,可以一次性 ...

  6. arcgisengine计算线要素总长度_ArcGIS |如何利用一个工具快速计算城市道路网密度...

    格网统计是为了从更精细的角度定量分析各种地理要素在空间上的分布特征,通常选择格网为研究单元,统计地理要素的一种手段.通俗的讲,使用四边形或者六边形组成的格网统计各类空间指标.它的使用范围相当广泛,比如 ...

  7. 如何使用ArcGIS计算分区河流(管线)总长度

    1. 概述 已知有一个河流的线图层(HydroL)和多个不同用地类型的图层(WoodyA表示绿化用地,ResidentialA表示公共用地,BoundaryA表示其他类型用地),目标是获得每个分区内的 ...

  8. 编码字符串,使得总长度最短

    字符串"liulishuo",我们需要对该字符串每个字符编码,使得编码后的字符串总长度最小. 我们可以通过哈夫曼树来对字符编码,累积树中非叶子节点的和即为所求总长度. 总长度也等于 ...

  9. 分享112个ASP信息管理源码,总有一款适合您

    分享112个ASP信息管理源码,总有一款适合您 112个ASP信息管理源码下载链接:https://pan.baidu.com/s/1kWkzvIrb9EmzAHNibqnHWw?pwd=2bt3  ...

最新文章

  1. html中item属性,项目id(属性) | itemid (attribute)
  2. 编辑Linux系统实验,linux操作系统实验vi编辑器的使用
  3. Android开发实战三之导入现有Android工程项目
  4. python pyecharts_Python数据可视化之pyecharts
  5. CVE-2012-1876调试要点
  6. PHP提取字符串中的数字
  7. CES 2017前瞻之AI:无人机依旧小巧,机器人主打家庭服务
  8. centos下mysql 命令_CentOS下mysql数据库常用命令总结
  9. EMNLP2021 “Transformer+预训练”再下一城,港科大开源高效的多模态摘要总结网络...
  10. 使用base标签后图片无法加载_Spring 源码学习(二)-默认标签解析
  11. 【Python】setup-转载
  12. 需要在html上引用脚本文件myjs,需要在 html 页面上引用脚本文件myJs.js,下列语句中,正确的是()...
  13. std::atomic_thread_fence
  14. Using Delegates with Data Readers to Control DAL Responsibility[转]
  15. 隐马尔可夫的知识要点
  16. 怎样在 SSASserver之间做同步
  17. git 还原某个文件到特定版本
  18. sort()函数之json对象数组排序
  19. 通过webService下载sharepoint文档库文件
  20. curl怎么输出赋值_伺服电动缸怎么控制?

热门文章

  1. 从 for of 聊到 Generator
  2. 【TJOI/HEOI2016】求和
  3. linux查找文件里面的内容
  4. 【iOS】NSNumberFormatter
  5. linux 配置 clang++ SDL 开发环境 (新手向)
  6. [常见错误]Python.h: No such file or directory
  7. Oracle数据库实用脚本
  8. 内存是拿来用的不是拿来看的
  9. 使用hibernate自动生成数据库表
  10. iOS开发:动态添加按钮