我们怎样才能在mvc控制器中获取上传视频的持续时间?当我上传视频时,它只提供content-type
,content-length
等详细信息,但不包括视频的持续时间。
那么我们如何才能在mvc中获得视频的持续时间?
谢谢您的帮助 !
Yu可以使用FFMPEG Wrapper for .NET Core来提取有关上传视频的任何信息,但要小心,因为它仍处于测试阶段(https://github.com/lecode-official/ffmpeg-dotnet/blob/master/Source/FFmpegDotNet.Interop/Formats/AVDurationEstimationMethod.cs)
你可以使用这个nuget包:
Install-Package Xabe.FFMpeg
我正在尝试使用易于使用的跨平台FFmpeg包装器。
你可以在Xabe.FFmpeg找到更多相关信息
IMediaInfo mediaInfo = await MediaInfo.Get("videofile.mkv");
var videoDuration = mediaInfo.VideoStreams.First().Duration;
有关在documentation获取视频文件持续时间的更多信息
首先,我尝试使用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中存储秒数,因此它直接给出小时:分钟:秒。
只为那些不知道该怎么做的人
首先添加包
<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;