从 Android 中的视频中获取视频帧

Posted

技术标签:

【中文标题】从 Android 中的视频中获取视频帧【英文标题】:Getting video frames from a video in Android 【发布时间】:2013-07-20 02:35:10 【问题描述】:

我正在编写一个从 android 设备的摄像头捕获视频的应用。我试图在不重复帧的情况下获取视频的所有帧并将它们存储在某种列表中。 “不重复帧”是指:

如果我调用MediaMetadataRetriever.getFrameAtTime(time, OPTION),如果time 没有太大变化,那么两次调用此方法可能会返回相同的帧。我想在下次调用getFrameAtTime() 之前将time 增加足够的值,这样我就不会再得到相同的帧了。

显然,我还想确保不会错过任何帧。

一种方法是获取视频的每秒帧数,并以帧捕获频率递增time。但是如何获取我捕获的视频的每秒帧数?

或者我该怎么做呢?

【问题讨论】:

想解释一下为什么它跑题了?我可以做出适当的改变。 摄像头在哪里? (这不是关闭的理由,从您的描述中根本不清楚) 顺便说一句,我认为'java'标签不相关。 视频是使用 Android 相机拍摄的。我想它可能会让那些对相机感兴趣的人感兴趣,他们可能知道如何回答这个问题。 Java 标记已删除。谢谢。 为什么不直接从相机捕捉帧? 【参考方案1】:

您可以注册一个PreviewCallback 处理程序。该接口声明了 onPreviewCallback() 方法,该方法完全按照您的需要调用:每个不同的视频帧调用一次。参数为原始相机图像。

【讨论】:

即使我不编写自己的相机功能也可以使用它吗?我只是使用 MediaStore.ACTION_VIDEO_CAPTURE 意图来允许用户录制视频,当我的活动重新获得焦点时,录制的视频会通过 Intent 数据传递给我的应用程序。 不,你不能。但是您可以并行启动记录器。

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

Android - 获取视频帧的 FFmpeg 替代方案。 (由于许可)

从 iPhone 中的视频帧中获取图像

使用 JS 从视频中获取帧

如何从 Flutter 中的 Jitsi Meet Conference 获取视频帧

如何使用来自外部设备的 setVideoURI 流从 android videoview 获取帧?

使用 flex 从视频中获取随机(或第一)帧