几种获取音视频播放时间长度的方法 ( shell32, WMP, ffmpeg )
代码如下:
string path="******";
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));
//时间长度格式:00:00:00
string duration folder.GetDetailsOf(folderitem, 21);
优缺点:
优点是Windows自己的系统组件,比较方便,获取到的文件属性就是你右键看到的文件属性,不要加载其它工
具,没有兼容性等问题,缺点是对于很多格式的文件获取不到文件属性,也就是只能获取支持的文件格式。
2.使用com组件WindowsMediaPlayer
,缺点同第一种方法一样,觉得WindowsMediaPlayer是不是就是用第一种
方法里的shell32.dll获取文件信息的。
string inputFile="*******";
WMPLib.WindowsMediaPlayer wmPlayer = new WMPLib.WindowsMediaPlayerClass();
wmPlayer.currentPlaylist.clear();
WMPLib.IWMPMediaCollection mediacollection = wmPlayer.mediaCollection;
WMPLib.IWMPMedia media = mediacollection.add(inputFile);
wmPlayer.currentPlaylist.appendItem(media);
//时间长度格式:00:00:00
string duration = media.durationString;
//wmPlayer.Ctlcontrols.currentPosition = sec;
//wmPlayer.Ctlcontrols.play();
3.使用ffmpeg.exe获取文件属性信息,ffmpeg是java开发的用于多媒体文件编辑的命令行工具,有多个版本
,功能比较强大,C#中可以在进程外异步调用这个工具
using (System.Diagnostics.Process pro = new System.Diagnostics.Process())
{
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.ErrorDialog = false;
pro.StartInfo.RedirectStandardError = true;
pro.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory +
"ffmpeg.exe";
pro.StartInfo.Arguments = " -i " + fileName;
pro.Start();
System.IO.StreamReader errorreader = pro.StandardError;
pro.WaitForExit(1000);
string result = errorreader.ReadToEnd();
if (!string.IsNullOrEmpty(result))
{
result = result.Substring(result.IndexOf("Duration: ") +
("Duration: ").Length, ("00:00:00").Length);
duration = result;
}
}