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

问题描述 投票:0回答:3

我有一个可以接受并保存 MP4 视频文件的表单。我还需要能够获取视频的尺寸。这将在运行 ASP.NET 2.0 的服务器上运行,因此任何外部库都必须能够放置在 Bin 文件夹中,因为它们无法安装在服务器上。

有什么想法如何获取信息吗?如果同一个库可以让我将视频转码为 flv,那将是一个巨大的好处。

更新: 服务器是带有 .NET Framework 的 XP Service Pack 2 (2,0,50727,0)

c# asp.net video asp.net-2.0
3个回答
3
投票

有几种方法可以做到这一点,但没有库本身可以与 C# 一起用于任何/所有 .mp4 视频文件。这没有什么是 100% 可靠的。

两者都是命令行选项(某种意义上)。基本上,您要做的就是使用 System.Diagnostics.Process 从 ASP.NET 应用程序运行一个进程。

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

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

ffmpeg 也可以对您的视频进行转码。虽然我不明白从 mp4 转码的意义。 flv?


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;
}

0
投票

为什么每个处理视频的解决方案都需要 d*** 命令行 exe?

© www.soinside.com 2019 - 2024. All rights reserved.