Android:获取视频的所有帧(任何视频文件)

时间:2013-12-17 02:47:44

标签: android video bitmap frames

美好的一天,

我正在开发一个在编辑视频中连接的简单应用程序。

我需要的是获取视频的所有帧(就我所知,帧可以被视为位图)

得到它们之后

,我需要编辑帧(位图) 然后将其显示在图像视图中(尽管我要做的是,将所有图像循环,就像它们是视频一样。

我尝试使用

mediaMetadataRetriever.getFrameAtTime(0);

但问题是,在给定时间内捕获的帧不正确。

示例代码:

bm[1] = mediaMetadataRetriever.getFrameAtTime(0);
bm[2] = mediaMetadataRetriever.getFrameAtTime(50000);
bm[3] = mediaMetadataRetriever.getFrameAtTime(100000);
bm[4] = mediaMetadataRetriever.getFrameAtTime(150000);
bm[5] = mediaMetadataRetriever.getFrameAtTime(200000);

然后在imageview中循环位图。

我听说过ffmpeg并试图研究它。

问题是,我使用的是Windows而不是ubuntu或linux。

到目前为止,我真的很难过。

请帮助我或指导我走正确的道路。

感谢很多:)

2 个答案:

答案 0 :(得分:1)

注意MediaMetadataRetriever.getFrameAtTime方法使用表示时间偏移值的参数,以微秒为单位(1/1000000th of 1/1),而不是以毫秒为单位(1/1000)。

这可能至少解决了使用MediaMetadataRetriever捕获帧时遇到的问题。

无论如何,检查一些替代方案(如JavaCV可能会很有趣,它代表OpenCV,FFmpeg和其他一些流行的图像和视频处理库的包装器。 Windows,Linux,Mac OS和Android支持JavaCV。

JavaCV肯定缺乏更好的文档,但在他们的主页上有一些例子可能是一个很好的起点。 可以在Scala编写的Cookbook Examples中找到更高级的示例。通过对该语言的一些基本理解,即使对于纯Java开发人员来说,它也可能是宝贵的资

答案 1 :(得分:1)

尝试使用FFmpeg作为后端的FFmpegMediaMetadataRetriever

FFmpegMediaMetadataRetriever fmmr = new FFmpegMediaMetadataRetriever();
bm[1] = fmmr.getFrameAtTime(0);
bm[2] = fmmr.getFrameAtTime(50000);
bm[3] = fmmr.getFrameAtTime(100000);
bm[4] = fmmr.getFrameAtTime(150000);
bm[5] = fmmr.getFrameAtTime(200000);
fmmr.release();