繁体   English   中英

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

[英]Android: Get all the frames of a video (any video file)

早安,

我正在研究一个连接编辑视频的简单应用程序。

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

全部获取后,我需要编辑帧(位图),然后在imageview中显示它(尽管我要做的是,将所有图像像视频一样循环播放。)

我尝试使用

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。

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

请帮助我,或直接引导我走正确的道路。

非常感谢 :)

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

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

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

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

尝试使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM