2

我在 C# 中工作,需要捕获视频文件的各个帧。尽可能快(比实时更快),我希望寻找特定的帧号并将每第 n 帧捕获为图形文件格式,例如 BMP 或 JPEG。非常希望捕获的帧是可预测和可重复的,即不丢帧。

我对 DirectShow 有一些经验,但不知道这种技术是否最适合在现代 Windows .NET 环境中解决这个问题。理想情况下,我想找到一个 .NET 或基于 COM 的库来尽可能地抽象出来。我不需要在屏幕上实际显示视频文件,实际上我更希望没有用于视频播放的 Windows 用户界面。

有人对要研究的技术或特定产品有建议吗?它们需要与基于 MPEG-2 和 MPEG-4 的视频文件兼容,包括 DivX。QuickTime 支持将是一个不错的奖励。

4

3 回答 3

2

我看不出您需要“比实时更快”执行此操作的原因,因为您正在考虑进行某种处理而不显示任何视频。

我用DirectShow.Net和 .Net 2.0 写过类似的东西。使用 directshow 需要一些经验,否则您将很难尝试。

您还可以从 Windows 访问 IMediaDet 界面来进行帧捕获。这种方法比较简单,但是有一定的限制,比如支持MPEG2。我注意到它也不支持“某些”flv。查看CodeProject 上的示例 - FrameGrabber

Quicktime 支持意味着安装QuickTimeAlternative

我可以发布我使用 DirectShow.Net 编写的代码。让我知道您是否需要它(我需要在发布之前美化它:P)。

编辑:注意:至于您的“可预测”捕获,根本没有问题,因为视频不是实时播放,而是暂停,因此您可以寻找任何点,然后提取帧。

于 2008-12-19T07:38:52.600 回答
0

阿罗哈

(免费)程序 Image Grabber II.net 完全符合您的描述。我似乎记得来源也已发布,但现在找不到。它需要 .NET 框架。

-Edoode

于 2008-12-18T15:14:39.233 回答
0

万一其他人遇到此类问题,另一种选择是基于 Delphi 的 ActiveX 控件,称为TVideoGrabber。虽然它不是免费的,但它非常便宜,并且可以很好地作为 DirectShow 的薄包装。

TVideoGrabber 不适合我的问题,因为我的应用程序没有 GUI——它作为 Windows 服务运行。我确实让它工作,但实例化多个控件(可能不是线程安全的开始)并在假事件循环中运行,来自 .NET,作为 Windows 服务......好吧,有几件事可能会出错。即使我已确保仅从创建线程操作控件,我似乎仍然存在并发问题。但这是另一个问题...... :)

于 2008-12-22T14:07:21.903 回答