gpt4 book ai didi

c# - 使用 C# 从 ASP.Net MVC 中的视频文件获取视频元数据的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 08:31:45 25 4
gpt4 key购买 nike

我已经在 Google 和 StackOverflow 上搜索了几个小时。 StackOverflow 上似乎有很多类似的问题,但它们都是 3-5 岁左右。

如今,使用 FFMPEG 仍然是从 .NET 网络应用程序中的视频文件中提取元数据的最佳方式吗?如果是这样,最好的 C# 包装器是什么?

我已经尝试过 MediaToolkit、MediaFile.dll,但没有成功。我看到了 ffmpeg-csharpe,但看起来它已经有几年没有被触及了。

我还没有找到关于这个主题的任何当前数据。现在最新版本的 .NET 中内置了从视频中提取元数据的功能吗?

此时我基本上在寻找任何方向。

我应该补充一点,无论我使用什么,每小时都可能被调用数千次,因此它需要高效。

最佳答案

查看 MediaInfo 项目 ( http://mediaarea.net/en/MediaInfo )

它获取有关大多数媒体类型的广泛信息,并且该库与易于使用的 c# 帮助程序类捆绑在一起。

您可以从这里下载适用于 windows 的库和帮助程序类:

http://mediaarea.net/en/MediaInfo/Download/Windows (没有安装程序的 DLL)

帮助程序类位于 Developers\Source\MediaInfoDLL\MediaInfoDLL.cs,只需将其添加到您的项目并将 MediaInfo.dll 复制到您的 bin。

用法

您可以通过向库请求特定参数来获取信息,这是一个示例:

[STAThread]
static void Main(string[] Args)
{
var mi = new MediaInfo();
mi.Open(@"video path here");

var videoInfo = new VideoInfo(mi);
var audioInfo = new AudioInfo(mi);
mi.Close();
}

public class VideoInfo
{
public string Codec { get; private set; }
public int Width { get; private set; }
public int Heigth { get; private set; }
public double FrameRate { get; private set; }
public string FrameRateMode { get; private set; }
public string ScanType { get; private set; }
public TimeSpan Duration { get; private set; }
public int Bitrate { get; private set; }
public string AspectRatioMode { get; private set; }
public double AspectRatio { get; private set; }

public VideoInfo(MediaInfo mi)
{
Codec=mi.Get(StreamKind.Video, 0, "Format");
Width = int.Parse(mi.Get(StreamKind.Video, 0, "Width"));
Heigth = int.Parse(mi.Get(StreamKind.Video, 0, "Height"));
Duration = TimeSpan.FromMilliseconds(int.Parse(mi.Get(StreamKind.Video, 0, "Duration")));
Bitrate = int.Parse(mi.Get(StreamKind.Video, 0, "BitRate"));
AspectRatioMode = mi.Get(StreamKind.Video, 0, "AspectRatio/String"); //as formatted string
AspectRatio =double.Parse(mi.Get(StreamKind.Video, 0, "AspectRatio"));
FrameRate = double.Parse(mi.Get(StreamKind.Video, 0, "FrameRate"));
FrameRateMode = mi.Get(StreamKind.Video, 0, "FrameRate_Mode");
ScanType = mi.Get(StreamKind.Video, 0, "ScanType");
}
}

public class AudioInfo
{
public string Codec { get; private set; }
public string CompressionMode { get; private set; }
public string ChannelPositions { get; private set; }
public TimeSpan Duration { get; private set; }
public int Bitrate { get; private set; }
public string BitrateMode { get; private set; }
public int SamplingRate { get; private set; }

public AudioInfo(MediaInfo mi)
{
Codec = mi.Get(StreamKind.Audio, 0, "Format");
Duration = TimeSpan.FromMilliseconds(int.Parse(mi.Get(StreamKind.Audio, 0, "Duration")));
Bitrate = int.Parse(mi.Get(StreamKind.Audio, 0, "BitRate"));
BitrateMode = mi.Get(StreamKind.Audio, 0, "BitRate_Mode");
CompressionMode = mi.Get(StreamKind.Audio, 0, "Compression_Mode");
ChannelPositions = mi.Get(StreamKind.Audio, 0, "ChannelPositions");
SamplingRate = int.Parse(mi.Get(StreamKind.Audio, 0, "SamplingRate"));
}
}

您可以通过调用Inform()轻松获取字符串格式的所有信息:

        var mi = new MediaInfo();
mi.Open(@"video path here");
Console.WriteLine(mi.Inform());
mi.Close();

如果您需要有关可用参数的更多信息,您可以通过调用 Options("Info_Parameters") 简单地查询所有这些信息:

        var mi = new MediaInfo();
Console.WriteLine(mi.Option("Info_Parameters"));
mi.Close();

关于c# - 使用 C# 从 ASP.Net MVC 中的视频文件获取视频元数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com