我正在寻找一种从视频文件中获取图像数据的有效方法。我目前正在图书馆进行测试FilgraphManagerClass.GetCurrentImage()
。Interop.QuartzTypeLib
这可以满足我的需要,但速度非常慢。我需要处理每个视频的所有帧。我有什么更好的选择?
要求
- 必须是帧准确的。<-- 很重要!
- 让我可以访问解码的像素缓冲区(
int
或的数组byte[]
),最好是 RGB24 或 RGB32。 - 可以实时或更快地抓取缓冲区。我不需要显示视频,我只需要分析像素。
- 处理 mp4 文件 (h264/aac)。如果需要,我可以通过 AviSynth 重新包装或帧服务,但不涉及重新转码。
欢迎大家提出意见。
根据要求的一些代码:
FilgraphManagerClass graphClass = new FilgraphManagerClass();
graphClass.RenderFile(@"C:\tmp\tmp.avs");
int sz = (graphClass.Width * graphClass.Height + 10) * 4;
int[] buffer = new int[sz - 1];
然后我逐步浏览每一帧。我在循环中有这样的东西:
graphClass.GetCurrentImage(ref sz, out buffer[0]);
//DoStuff(buffer);
graphClass.CurrentPosition += graphClass.AvgTimePerFrame;