上传后获取视频的持续时间

时间:2017-08-09 11:38:03

标签: c# asp.net video duration

最好的方法是什么?

我有一个用户上传视频的字段。

点击上传按钮后,视频会上传。这完美无缺。

我需要物理路径的视频持续时间,我试过了:

using WMPLib;
WindowsMediaPlayer wmp = new WindowsMediaPlayerClass();
IWMPMedia mediaInfo = wmp.newMedia(Server.MapPath("~/Uploads/test.mp4"));
double duration = mediaInfo.duration;

但它没有用,我收到错误:

  

类型'WMPLib.WindowsMediaPlayerClass'没有定义构造函数Interop类型'WMPLib.WindowsMediaPlayerClass'无法嵌入。

如何捕捉持续时间?

5 个答案:

答案 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 文件夹中。