MediaMetadataRetriever

MediaMetadataRetriever

我见过很多类似的问题,但我有一个区别,我需要在 java 中而不是在 c/c++ 中执行此操作,并且我需要它在 android 设备上运行。

我找到了一种使用“MediaMetadataRetriever”的方法。

但是我需要很长时间来分离帧(大约 1 秒到帧),我需要读取 600 帧,所以我只需要 10 分钟就可以在没有图像处理的情况下读取图像。

我想知道是否有另一种方法可以从视频中拆分帧,或操作 MediaMetadataRetriever 并使其快速工作。

非常感谢!

最佳答案

听起来您想使用 MediaCodec 解码器。有一些例子 here

特别是,如果您查看 DecodeEditEncodeTest 代码,checkVideoFile() 函数将先前创建的流解码为外部纹理,然后使用 OpenGL ES 对其进行操作。 (要从 .mp4 文件执行此操作,您需要通过 MediaExtractor 访问它。)
MediaMetadataRetriever#getFrameAtTime() 真正用于提取缩略图,并不特别适合提取大量帧。

更新: 现在有 sample code 用于使用 MediaExtractorMediaCodec 和 GLES (API 16+) 提取视频帧。

10-08 16:15