如何获取mp4视频文件的尺寸?

8
我有一个可以接受并保存MP4视频文件的表单。我需要能够获取视频的尺寸。这将在运行ASP.NET 2.0的服务器上运行,因此任何外部库都必须能够放置在Bin文件夹中,因为它们不能安装在服务器上。
有什么想法如何获取信息?如果同一库可以让我转码视频到FLV,那将是一个巨大的奖励。
更新:服务器是XP Service Pack 2,带有.NET Framework(2,0,50727,0)。
2个回答

3
有几种方法可以做到这一点,但没有一个库能够与C#一起使用来处理任何/所有.mp4视频文件。这并不是100%可靠的。

两者都是命令行选项。基本上,你要做的就是使用System.Diagnostics.Process从ASP.NET应用程序运行进程。

其中之一是使用ffmpeg。使用ffmpeg,如果您只是提供了一个文件(作为命令行参数),它将返回有关该文件的各种元数据。可以解析此信息以提取尺寸。

另一个是使用MediaInfo。这是一个很好的工具。但同样,您必须使用命令行版本(CLI版本)并基本上将文件名作为命令行参数提供给它。它有一个产生xml响应的选项,因此您可以轻松地解析此信息和其他信息。

ffmpeg还可以转码您的视频。虽然我不明白从mp4转码的意义所在。flv?


我猜微软没有针对读取媒体文件的标准API集合,是吗? - Justin808
我认为微软没有义务提供这样的API。显然,他们有能力做到这一点,因为你可以在Windows资源管理器中看到它被使用。但是,处理数十万(如果不是数百万)个视频文件后,我可以告诉你,像这样简单的事情显然并不容易,因为没有一个工具可以完美地完成这项任务。 - Shiv Kumar
1
很失望。我无法在服务器上安装任何东西,只能安装网站,因此我将无法安装ffmpeg或MediaInfo来使用它们。希望有一个漂亮干净的API集来使用。 - Justin808
无需“安装”ffmpeg或Media info。只需将exe文件与所有文件一起复制即可。在Media info的情况下,您需要一个dll和exe。但实际上,这不是一个安装程序。它们不需要任何其他支持文件。所以我认为你应该能够使用它们。我会选择MediaInfo,因为我发现它几乎可以处理各种文件。 - Shiv Kumar

1

Alturos.VideoInfo是一个ffprobe的包装器,可以很容易地集成到C#项目中。

可以像这样从NuGet安装:

PM> Install-Package Alturos.VideoInfo

要使用它,您需要ffprobe.exe。如果它尚未在您的项目中,请运行此代码进行下载:

var ffmpegDownloader = new FileDownloader();
var ffmpegUrl = ffmpegDownloader.GetFfmpegPackageUrl();
var ffmpegDownloadResult = await ffmpegDownloader.DownloadAsync(ffmpegUrl, @"ffprobe\ffprobe.exe");
var ffprobePath = ffmpegDownloadResult.FfprobePath;

视频的尺寸可以通过获取视频流轻松地检索出来:
var videoAnalyzer = new VideoAnalyzer(ffprobePath);
var analyzeResult = videoAnalyzer.GetVideoInfo(/* your video file path here */);

if (analyzeResult.Successful)
{
    var videoStream = analyzeResult.VideoInfo.Streams.Single(o => o.CodecType == "video");

    var width = videoStream.Width;
    var height = videoStream.Height;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接