最好的方法是什么?
我有一个用户上传视频的字段。
点击上传按钮后,视频会上传。这完美无缺。
我需要物理路径的视频持续时间,我试过了:
using WMPLib;
WindowsMediaPlayer wmp = new WindowsMediaPlayerClass();
IWMPMedia mediaInfo = wmp.newMedia(Server.MapPath("~/Uploads/test.mp4"));
double duration = mediaInfo.duration;
但它没有用,我收到错误:
类型'WMPLib.WindowsMediaPlayerClass'没有定义构造函数Interop类型'WMPLib.WindowsMediaPlayerClass'无法嵌入。
如何捕捉持续时间?
答案 0 :(得分:10)
您可以使用此nuget包:
Install-Package Xabe.FFMpeg
我正在尝试使用易于使用的跨平台FFmpeg包装器。
您可以在Xabe.FFmpeg
找到有关此内容的更多信息IMediaInfo mediaInfo = await MediaInfo.Get("videofile.mkv");
var videoDuration = mediaInfo.VideoStreams.First().Duration;
有关获取视频文件持续时间的详细信息,请访问: https://xabe.net/product/xabe_ffmpeg/#documentation
答案 1 :(得分:2)
使用DirectShow.Net包装器库,您可以使用DirectShow API MediaDet
对象。方法get_StreamLength
是以秒为单位获取视频长度的方法,可以使用确定性算法将其转换为分钟/小时。要使用此API,请确保已在操作系统上安装了MPEG-4依赖项。
或者您可以选择Media Info库来获取视频文件中的信息。
使用DirectShow.NET包装器库查看实现:Getting length of video
答案 2 :(得分:2)
我们以多种方式获取视频持续时间
方法1:Shell 32 API
方法2:WMPLib(Windows Media Player库)
方法3:FFMpeg Wrapper
检查以下链接
方法1和方法2链接get-the-length-of-a-video-in-c#
方法3参考链接video file time duration in ffmpeg
在这个用于获取视频属性和duraion的方法中,所有这三个我之前已经被检查过了。在文件属性中的一些自定义属性中没有显示在前2个方法中。
方法3无法在共享主机中使用。这是专用服务器所必需的。
答案 3 :(得分:2)
您的代码看起来不错,但是如果您可以查看媒体信息的attributes,例如:
using WMPLib; // this file is called Interop.WMPLib.dll
WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();
string FilePath = "yourFilePath";
IWMPMedia mediaInfo = wmp.newMedia(FilePath);
// write duration
Console.WriteLine("Duration = " + mediaInfo.duration);
// write named attributes
for (int i=0; i < mediaInfo.attributeCount; i++)
{
Console.WriteLine(mediaInfo.getAttributeName(i) + " = " + mediaInfo.getItemInfo(mediaInfo.getAttributeName(i)) );
}
答案 4 :(得分:0)
以下代码段可能对您有所帮助:
using WMPLib;
// ...your code here...
var player = new WindowsMediaPlayer();
var clip = player.newMedia(VideoFilePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));
并且不要忘记添加
wmp.dll
的引用 存在于System32
文件夹中。