c# - 从视频中提取帧的最快方法

标签 c# c++ wpf video

有人测试过从视频中提取帧的最快方法是什么吗?

-Aforge

-Emgu CV (OpenCV)

-AviFile

-ffmpeg

使用哪种视频格式和编解码器?

假设我需要在更少的时间内捕获全高清视频文件 (1920 x 1080) 的随机帧 超过 10 毫秒...这可能吗?

我已经尝试使用 Aforge 和 Avifile 库来完成它。 如果提取帧 1,2,3,4,5,... 就可以了

但是如果您想要像这样的随机帧 1,2,200,40000,... 有时需要 500 毫秒。 (在指针在流中找到位置之前)。

如有任何建议,我们将不胜感激。

最佳答案

访问随机帧的关键因素是使用的编解码器、它的时间压缩、寻找 I 帧的能力以及您是否可以寻找最近的 I 帧而不是精确地寻找您感兴趣的时间戳。由于时间压缩,您可能需要[通常在内部对您透明,但这显然会增加处理开销]寻找最近的关键帧,然后它们从那里逐帧前进到请求的位置。

AForge、EmguCV、OpenCV 只是直接处理文件的 API 之上的包装器,因此它们不是最快的(它们是底层访问方法 + 额外开销)。 FFmpeg 和 Windows API(AVIFile、DirectShow、Media Foundation)对于给定的格式/编解码器可能更好或更差,具体取决于实现质量。

关于c# - 从视频中提取帧的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259123/

相关文章:

c# - 使用 httpcontext 打开附件

c# - c# 阅读和组合框中的 arraylist

c# - 代码没有错误,数据库已连接,但更新条目时发生错误。详细信息请参见内部异常

c# - 如何使用其列和行索引值设置数据网格单元格的值?

c# - 插入图像作为多边形内容

c# - 页眉和页脚在 log4net 日志中出现两倍以上

c++ - 使用 system() 函数在 Ubuntu 中播放声音文件

c++ - Win32 - 从标准输入读取超时

c++ - 基于输入文件的未知大小数组

c# - 任务的返回类型错误