c# - 提取 .avi 文件的帧

标签 c# video video-processing

<分区>

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

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

提前致谢。 通克

最佳答案

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

最简单的方法确实是使用 FFMPEG,因为它已经包含一些最常见的编解码器(如果您不介意向您的应用程序添加额外的 30+Mb)。至于 wrapper ,我使用了 AForge wrapper 过去非常喜欢它,因为它使用起来非常简单。这是其文档中的示例:

// 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 中,但大多数不包含)。

关于c# - 提取 .avi 文件的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17825677/

相关文章:

c++ - UWP 硬件视频解码 - DirectX12 vs Media Foundation

ffmpeg - 如果给定 M3U8 播放列表,如何按需创建 TS 片段

c# - 我如何找到启动我的进程的计划任务的实例 ID/相关 ID

c# - 平均分配资源列表

c++ - 如何将视频数据馈送到 DirectShow 过滤器以压缩/编码并保存到文件?

javascript - addEventListener 仅触发第一个事件

ffmpeg - ffmpeg 中的后处理以移动 MP4 文件中的 'moov atom' (qt-faststart)

c# - 在 WPF 中生成和绘制视频的快速方法是什么?

c# - oxyplot items源数据表

c# - 在本地访问 Azure Key Vault 'secrets' 以获取环境变量 - C#