3

我有一个视频分析程序,可以处理视频中的各种帧。(长达几个小时)视频可能会是 MP4,但也可能是其他格式。

目前,我有一个围绕 ffmpeg 调用的 C# 包装器,用于在请求的时间提取单个帧。(我正在使用 ffmpeg.exe 二进制文件。不是直接使用库)目前,这一切都有效。但它很慢。非常慢。

我找到了提高速度的方法,方法是在处理提取的帧时将它们存储在 ramdisk 中。更改存储的图像格式等...

我只是想检查是否有人能想到任何方法来拉出单个框架。瞬间准确。我知道这可能与 DShow 等有关...我直接使用 FFMPEG,因为我以前使用过它。但如果 DShow 可能更快,我会很乐意改变!

4

2 回答 2

1

在 Windows 中,您可以使用本机 API 来处理,特别是从媒体文件中读取:

  • 直接秀
  • 媒体基金会

两者都提供对 MP4(H.264 视频)的支持,DirectShow 作为由第三方 MP4 Demultiplexer 和 H.264 解码器扩展的框架(需要,Windows 7 也提供构建它),以及 Media Foundation - 本机或由第三方扩展扩展取决于操作系统版本。

两者都可以分别通过开源包装器DirectShow.NET和 Media Foundation .NET 从 .NET 进行接口。对于单个帧,这比 FFmpeg CLI 更快。另请注意,您将能够以增量方式获取帧,而无需定位特定时间并进行过多的重复工作,更不用说进程启动/初始化开销了。或者,您可以通过包装器将 FFmpeg/Libav 二进制文件用于 C# 并获得类似的性能。

于 2013-01-23T11:50:07.583 回答
0

您可以更改偏移参数的位置。如果视频包含有效的元数据,则顺序对速度很重要,您可以更快地浏览视频。

如果将偏移量放在输入文件之前,偏移量将使用比特率计算,并非每次都准确(在可变比特率的情况下),但它要快得多。正确的方法是遍历视频(偏移参数在输入文件之后),但这需要时间。

于 2013-01-21T17:57:33.097 回答