我们怎样才能在mvc控制器中获取上传视频的持续时间?当我上传视频时,它只提供content-type
,content-length
等详细信息,但不包括视频的持续时间。
那么我们如何才能在mvc中获得视频的持续时间?
感谢您的帮助!
答案 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
文件夹中。