我有一个视频分析程序可以处理视频中的各种帧。 (好几个小时) 该视频可能会是 MP4,但以后可能会是其他格式。
目前,我有一个围绕 ffmpeg 调用的 C# 包装器,用于在请求的时间提取单个帧。 (我正在使用 ffmpeg.exe 二进制文件。不是直接使用库) 目前,这一切都有效。但它很慢。很慢。
我找到了提高速度的方法,方法是在处理提取的帧时将它们存储在 ramdisk 中。更改存储的图像格式等...
我只是想看看是否有人能想出任何方法来拉出单个框架。瞬间准确。 我知道这可能与 DShow 等有关......我直接去了 FFMPEG,因为我以前用过它。但如果 DShow 可能更快,我会很乐意改变!
最佳答案
在 Windows 中,您可以使用 native API 来处理(尤其是读取)媒体文件:
- DirectShow
- 媒体基金会
两者都支持 MP4(H.264 视频)、DirectShow 作为由第三方 MP4 解复用器和 H.264 解码器扩展的框架(需要,Windows 7 也提供构建它),以及媒体基础 - native 或扩展取决于操作系统版本的第三方扩展。
两者都可以通过开源包装器从 .NET 连接 DirectShow.NET和 Media Foundation .NET 分别。对于单个帧,这比 FFmpeg CLI 快方式。另请注意,您将能够逐步获取帧,而无需定位特定时间并进行过多的重复工作,更不用说进程启动/初始化开销了。或者,您可以通过包装器将 FFmpeg/Libav 二进制文件用于 C# 并获得类似的性能。
关于c# - 比 ffmpeg 更快的帧提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444460/