如何从mp4、wmv、flv、movvideo获取视频时长其实我主要需要mp4格式。但是,如果有可能获得其他类型,那就太好了。我只需要读取文件的持续时间。我如何使用C#4.0执行此操作?所以我需要的是这样的视频:13分12秒我还可以使用3个第三方exe。就像他们将有关文件的信息保存到文本文件中一样。我可以解析那个文本文件。谢谢。您可以通过DirectShow.NET包装器库使用DirectShowAPIMediaDet对象。有关代码示例,请参见获取视频长度,get_StreamLength以秒为单位获取持续时间。这假设Windows安装了MPEG-4解复用器(需要7之前的Windows的第3方组件,我相信这同样适用于cezor的其他答案,尽管可以随意重新分发组件)。您也可以使用WindowsMediaPlayer,但它不支持您使用WMPLib请求的所有文件类型;publicDoubleDuration(Stringfile){WindowsMediaPlayerwmp=newWindowsMediaPlayerClass();IWMPMedia媒体信息=wmp.newMedia(文件);返回媒体信息。期间;}}Shell32的P/Invoke的回答让我想起了使用WindowsAPI代码包来访问常见的WindowsVista/7/2008/2008R2API。使用包含的示例中的PropertyEdit演示,可以很容易地找出Shell32API来获取各种媒体文件属性,例如持续时间。我假设相同的先决条件适用于安装正确的多路分解器,但它非常简单,因为它只需要添加对Microsoft.WindowsAPICodePack.dll和Microsoft.WindowsAPICodePack.Shell.dll的引用以及以下代码:usingMicrosoft.WindowsAPICodePack。壳;使用Microsoft.WindowsAPICodePack.Shell.PropertySystem;使用(ShellObjectshell=ShellObject.FromParsingName(filePath)){//或者:shell.Properties.GetProperty("System.Media.Duration");IShellPropertyprop=shell.Properties.系统.媒体.持续时间;//Duration将被格式化为00:44:08stringduration=prop.FormatForDisplay(PropertyDescriptionFormatOptions.None);}其他东西MPEG-4/AAC音频媒体文件的一些常见属性:System.Audio.Format={00001610-0000-0010-8000-00AA00389B71}System.Media.Duration=00:44:08System.Audio.EncodingBitrate=?56kbpsSystem.Audio.SampleRate=?32kHzSystem.Audio.SampleSize=?16位System.Audio.ChannelCount=2(立体声)System.Audio.StreamNumber=1System.DRM.IsProtected=无System.KindText=音乐系统.Kind=Music如果您正在寻找可用的元数据,您可以轻松地遍历所有属性:using(ShellPropertyCollectionproperties=newShellPropertyCollection(filePath)){foreach(IShellPropertypropinproperties){stringvalue=(prop.ValueAsObject==null)?"":prop.FormatForDisplay(PropertyDescriptionFormatOptions.None);Console.WriteLine("{0}={1}",prop.CanonicalName,value);恕我直言,您可以使用MediaInfo,它可以为您提供很多有关媒体文件的信息,它有一个CLI,因此您可以从代码中使用它并获取所需的信息。你可以看看这个链接。我认为您正在寻找FFMPEG-http://www.ffmpeg-csharp.com/还有一些免费的替代品,您可以在这个问题中阅读它们-UsingFFmpegin.net?FFMpeg.NETFFMpeg-SharpFFLib.NET您可以在此链接中查看使用FFMPEG和查找持续时间的示例–http://jasonjano.wordpress.com/2010/02/09/a-simple-c-wrapper-for–ffmpeg/publicVideoFileGetVideoInfo(stringinputPath){VideoFilevf=null;尝试{vf=newVideoFile(inputPath);}catch(Exceptionex){抛出ex;}GetVideoInfo(vf);返回vf;VideoFileinput){//设置视频信息参数stringParams=string.Format("-i{0}",input.Path);字符串输出=RunProcess(Params);输入.RawInfo=输出;//获取持续时间Regexre=newRegex("[D|d]uration:.((\d|:|\.)*)");匹配m=re.Match(input.RawInfo);如果(m.Success){字符串持续时间=m.Groups[1].Value;string[]timepieces=duration.Split(newchar[]{':','.'});如果(timepieces.Length==4){input.Duration=newTimeSpan(0,Convert.ToInt16(timepieces[0]),Convert.ToInt16(timepieces[1]),Convert.ToInt16(timepieces[2]),Convert.ToInt16(timepieces[3]));FFMPEG项目有一个名为ffprobe的工具,它可以为您提供有关多媒体文件的信息,并查看此答案以获取以精确格式的JSON输出信息的示例。同样使用WindowsMediaPlayer组件,我们可以获得视频的持续时间。以下片段可能对您有所帮助:使用WMPLib;//...varplayer=newWindowsMediaPlayer();varclip=player.newMedia(文件路径);Console.WriteLine(TimeSpan.FromSeconds(clip.duration));并且不要忘记添加对wmp.dll的引用,它将出现在System32文件夹中。我发现NReco.VideoInfo库是最好的选择,它比上面的一些库简单得多。这是提供库的文件路径并吐出元数据的简单方法:以上是C#学习教程:如何从mp4、wmv、flv、movvideo获取视频时长共享的全部内容,如果有用给大家,需要了解更多C#学习教程,希望大家多多关注——varffProbe=newFFProbe();varvideoInfo=ffProbe.GetMediaInfo(blob.Uri.AbsoluteUri);返回videoInfo.Duration.TotalMilliseconds;StreamReader错误阅读器;stringInterviewID=txtToolsInterviewID.Text;进程ffmpeg=newProcess();ffmpeg.StartInfo.UseShellExecute=false;ffmpeg.StartInfo.ErrorDialog=false;ffmpeg.StartInfo.RedirectStandardError=true;ffmpeg.StartInfo.FileName=Server.MapPath("ffmpeg.exe");.Arguments="-i"+Server.MapPath("videos")+"\226.flv";ffmpeg.开始();errorreader=ffmpeg.StandardError;ffmpeg.WaitForExit();字符串结果=errorreader.ReadToEnd();stringduration=result.Substring(result.IndexOf("Duration:")+("Duration:").Length,("00:00:00.00").Length);本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
