c# - 比 ffmpeg 更快的帧提取

标签 c# .net video ffmpeg directshow

我有一个视频分析程序可以处理视频中的各种帧。 (好几个小时) 该视频可能会是 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/

相关文章:

java - 我可以创建一个直到媒体播放完毕才返回的函数吗?

javascript - 如何使用 jQuery 显示数据库中的图像而不是图像路径

c# - 接口(interface) "not marked with serializable attribute"异常

.net - 目录设计

.net - 在 C# 和 WPF 中使用 Aforge.NET 获取网络摄像头流

video - 比较两个视频的 PSNR,可能与 ffmpeg?

c# - 将这种字符串解析为 DateTime - "Friday 22nd March 2013"(C#)

c# - 带有 TranslateTransform 的 WPF Storyboard

c# - 在C#中获取一个国家的大陆

javascript - YouTube使用 Node js自动上传