如何取得视频(MP4)文件的时长

cceon 2012-01-29 03:44:55
如题,谢谢
...全文
828 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cceon 2012-01-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happy09li 的回复:]

由于需要用到实时读取影音文件(mp3、wma、wmv …)播放时间长度的功能,搜索到的结果有:

(1)   硬编码分析影音文件,需要分析各种媒体格式,代价最大;

(2)   使用wmlib sdk,需要熟悉sdk各个接口,且不同版本的wm接口有别,代价次之;

(3)   使用系统shell32的com接口,直接访问媒体文体属性,取其特定内容,代价最小。

显然第3种方案见效……
[/Quote]
谢谢,不过针对的是F4V(MPEG4)格式的。SHELL无法读取的到
hwbox 2012-01-29
  • 打赏
  • 举报
回复
偶记得FFMEPG中有相应方法的,mencoder也行,关注过一段时间,没太深入。
熙风 2012-01-29
  • 打赏
  • 举报
回复
由于需要用到实时读取影音文件(mp3、wma、wmv …)播放时间长度的功能,搜索到的结果有:

  (1)   硬编码分析影音文件,需要分析各种媒体格式,代价最大;

  (2)   使用wmlib sdk,需要熟悉sdk各个接口,且不同版本的wm接口有别,代价次之;

  (3)   使用系统shell32的com接口,直接访问媒体文体属性,取其特定内容,代价最小。

  显然第3种方案见效最快,立即操刀:

  ①   引用shell32底层接口c:windowssystem32shell32.dll,vs自动转换成interop.shell32.dll(注:64位系统和32位系统生成的interop.shell32.dll不一样)

  ②   编码读取播放时间长度:


        /// <summary>
        /// 获取媒体播放时间长度,格式00:00:00。
        /// </summary>
        /// <param name="path">媒体路径</param>
        /// <returns>播放时间长度</returns>
        public static string getmediaduration(this 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));
                return folder.getdetailsof(folderitem, 21);
            }
            catch (exception ex)
            {
                ex.error();
                return null;
            }
        }

  ③   调用结果,在win2003上应使用folder.getdetailsof(folderitem, 21) ,而在vista上应使用folder.getdetailsof(folderitem, 27) ,主要是因为不同系统下文件属性索引顺序不同造成。只要右键单击文件属性,能看到的媒体属性都能取到,可以换不同的索引值来取。如下所示,取出的时间长度是 00:03:52,目标完成。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧