在mvc中获取上传的视频时长

时间:2016-12-08 13:22:55

标签: c# video asp.net-core asp.net-core-mvc

我们怎样才能在mvc控制器中获取上传视频的持续时间?当我上传视频时,它只提供content-typecontent-length等详细信息,但不包括视频的持续时间。

那么我们如何才能在mvc中获得视频的持续时间?

感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

您可以使用此nuget包:

Install-Package Xabe.FFMpeg

我试图制作易于使用的跨平台FFmpeg包装器。

您可以在Xabe.FFmpeg

找到有关此内容的更多信息
IMediaInfo mediaInfo = await MediaInfo.Get("videofile.mkv");
var videoDuration = mediaInfo.VideoStreams.First().Duration;

有关获取视频文件的持续时间的详细信息 documentation

答案 1 :(得分:1)

Yuo可以使用FFMPEG Wrapper为.NET Core提取有关已上传视频的任何信息,但要小心,因为它仍处于测试阶段(https://github.com/lecode-official/ffmpeg-dotnet/blob/master/Source/FFmpegDotNet.Interop/Formats/AVDurationEstimationMethod.cs

答案 2 :(得分:0)

只适合那些不知道该怎么做的人

首先添加软件包

<PackageReference Include="Xabe.FFMpeg" Version="3.1.0" />

然后

 public static void Main(string[] args)
    {
        Load().Wait();

        BuildWebHost(args).Run();
    }


 public static async Task Load()
    {
        //Set directory where app should look for FFmpeg 
        FFmpeg.ExecutablesPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "FFmpeg");
        //Get latest version of FFmpeg. It's great idea if you don't know if you had installed FFmpeg.
        await FFmpeg.GetLatestVersion();
    }

和用法

   IMediaInfo mediaInfo = await MediaInfo.Get(@"C:\Users\username\source\repos\MyWebApp\uploads\videos\file1.mp4");
        var videoDuration = mediaInfo.VideoStreams.First().Duration;

答案 3 :(得分:0)

首先,我尝试 FFMPEG包装器,但是在找到简单的解决方案后却遇到了错误。

您可以使用此块包:

 Install-Package Microsoft.WindowsAPICodePack-Shell -Version 1.1.0

在您的项目中添加两个名称空间。

  

使用Microsoft.WindowsAPICodePack.Shell;       using.Microsoft.WindowsAPICodePack.Shell.PropertySystem;

ShellFile so = ShellFile.FromFilePath(your file path);
double nanoseconds;
double.TryParse(so.Properties.System.Media.Duration.Value.ToString(),
out nanoseconds);

if (nanoseconds > 0)
{
     double seconds = Convert100NanosecondsToMilliseconds(nanoseconds) / 1000;
     int ttl_seconds = Convert.ToInt32(seconds);
     TimeSpan time = TimeSpan.FromSeconds(ttl_seconds);
} 

public static double Convert100NanosecondsToMilliseconds(double nanoseconds)
{           
        return nanoseconds * 0.0001;
}

我在这里将秒存储在 TimeSpan 中,因此它可以直接提供小时:分钟:秒。

答案 4 :(得分:0)

还使用Windows Media Player组件,可以获取视频的时长。
以下代码段可能对您有所帮助:

using WMPLib;
// ...
var player = new WindowsMediaPlayer();
var clip = player.newMedia(filePath);
Console.WriteLine(TimeSpan.FromSeconds(clip.duration));
  

并且不要忘记添加 wmp.dll 的引用   出现在 System32 文件夹中。