我见过许多像我一样的类似问题,但我有一点不同,我需要在java中做这个而不是在c / c ++中,我需要它在Android设备上工作。
我找到了使用" MediaMetadataRetriever"的方法。
但是我需要花费太长时间来分隔帧(约1秒到帧),我需要读取600帧,所以只需要10分钟就可以在没有图像处理的情况下读取图像。
我想知道是否有另一种方法可以从视频中分割帧,或者操纵MediaMetadataRetriever并使其快速工作。
非常感谢!
答案 0 :(得分:3)
听起来你想使用MediaCodec
解码器。有一些例子here。
特别是,如果查看DecodeEditEncodeTest代码,checkVideoFile()
函数会将先前创建的流解码为外部纹理,然后使用OpenGL ES对其进行处理。 (要从.mp4文件执行此操作,您需要通过MediaExtractor
访问它。)
MediaMetadataRetriever#getFrameAtTime()
实际上是用于提取缩略图,并不特别适合提取大量的帧。
更新:现在sample code使用MediaExtractor
,MediaCodec
和GLES(API 16 +)提取视频帧。