提取.avi文件的帧

时间:2013-07-24 05:12:12

标签: c# video video-processing

我正在尝试编写一个c#代码来提取.avi文件的每一帧并将其保存到提供的目录中。你知道任何合适的图书馆用于此目的吗?

注意:无论安装的编解码器或系统架构如何,最终版本都必须适用于所有系统。它不能要求机器上存在其他程序(如MATLAB)。

提前致谢。 Tunc

2 个答案:

答案 0 :(得分:15)

除非您对输入avi文件添加一些限制或控制用于创建它们的编码器,否则这是不可能的。要获取图像,您必须先对其进行解码,为此您需要在应用程序中安装或部署适当的编解码器。我怀疑是否有可能考虑到那里的每个编解码器或安装/部署它们。所以不,你将无法打开任何 avi文件。但是,您可以支持最流行的(或在您的上下文中常见)编解码器。

最简单的方法是使用FFMPEG,因为它的alredy包括一些最常见的编解码器(如果你不介意额外的30 + Mb添加到你的应用程序)。对于包装器,我过去使用AForge包装器并且非常喜欢它,因为它的使用非常简单。以下是其文档中的示例:

// create instance of video reader
 VideoFileReader reader = new VideoFileReader( );
// open video file
reader.Open( "test.avi" );
// read 100 video frames out of it
for ( int i = 0; i < 100; i++ )
{
    Bitmap videoFrame = reader.ReadVideoFrame( );

    videoFrame.Save(i + ".bmp")

    // dispose the frame when it is no longer required
    videoFrame.Dispose( );
}
reader.Close( );

如果你想在不涉及外部库的情况下保持简单,那么在AForge中还有一个VfW(默认情况下包含在Windows中)包装器。您仍然需要安装VfW兼容的编解码器(默认情况下,其中一些包含在Windows中,大多数都没有)。

答案 1 :(得分:1)

您可以查看FFmpeg:http://www.ffmpeg.org/

一些C#相关信息:Using FFmpeg in .net?

或:http://www.ffmpeg-csharp.com/