我正在尝试编写 ac# 代码来提取 .avi 文件的每一帧并将其保存到提供的目录中。你知道有什么合适的图书馆可以用于这种目的吗?
注意:无论安装的编解码器或系统架构如何,最终版本都必须适用于所有系统。它不能要求机器上存在另一个程序(如 MATLAB)。
提前致谢。通克
我正在尝试编写 ac# 代码来提取 .avi 文件的每一帧并将其保存到提供的目录中。你知道有什么合适的图书馆可以用于这种目的吗?
注意:无论安装的编解码器或系统架构如何,最终版本都必须适用于所有系统。它不能要求机器上存在另一个程序(如 MATLAB)。
提前致谢。通克
这是不可能的,除非您对输入的 avi 文件添加一些限制或控制用于创建它们的编码器。要获取图像,您必须首先对其进行解码,为此您需要安装或部署应用程序的适当编解码器。而且我怀疑是否有可能解释那里的每个编解码器或全部安装/部署它们。所以不,您将无法打开任何avi 文件。但是,您可以支持最流行(或在您的上下文中常见)的编解码器。
最简单的方法确实是使用 FFMPEG,因为它已经包含一些最常见的编解码器(如果您不介意向您的应用程序添加额外的 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 中,大多数不包含)。
你可以看看 FFmpeg:http ://www.ffmpeg.org/
一些 C# 相关信息:Using FFmpeg in .net?