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

Posted

技术标签:

【中文标题】从视频中提取帧的最快方法【英文标题】:Fastest way to extract frame from video 【发布时间】:2013-06-23 08:55:38 【问题描述】:

有人测试过是什么?

-Aforge

-Emgu CV (OpenCV)

-AviFile

-ffmpeg

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

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

我尝试使用 Aforge 和 Avifile 库来实现。 提取帧1,2,3,4,5,...就OK了

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

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于从视频中提取帧的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从视频中提取某一帧的图像

如何从视频中提取某一帧的图像

使用哪种方法从iphone中的视频中提取帧?

芹菜任务设置与视频帧的内存缓存作为python中的循环缓冲区策略

来自视频帧的画布中的drawImage改变色调

使用ffmpeg从视频中提取最终帧