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

问题描述 投票:1回答:4

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

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

谢谢您的帮助 !

c# video asp.net-core asp.net-core-mvc
4个回答
1
投票

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


2
投票

你可以使用这个nuget包:

Install-Package Xabe.FFMpeg

我正在尝试使用易于使用的跨平台FFmpeg包装器。

你可以在Xabe.FFmpeg找到更多相关信息

IMediaInfo mediaInfo = await MediaInfo.Get("videofile.mkv");
var videoDuration = mediaInfo.VideoStreams.First().Duration;

有关在documentation获取视频文件持续时间的更多信息


0
投票

首先,我尝试使用FFMPEG Wrapper,但在找到一个简单的解决方案后它会出错。

你可以使用这个nuget包:

 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中存储秒数,因此它直接给出小时:分钟:秒。


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;
© www.soinside.com 2019 - 2024. All rights reserved.