相关文章推荐
想旅行的梨子  ·  javascript - js ...·  2 月前    · 
愤怒的伤疤  ·  django设置模板时间格式·  1 月前    · 
英俊的紫菜  ·  MySQL :: MySQL 8.4 ...·  1 月前    · 
火星上的蚂蚁  ·  An Optimized ...·  11 月前    · 
乖乖的牛肉面  ·  Exam retake policy | ...·  1 年前    · 

试图在安卓系统上捕捉带有时间戳的视频

1 人关注

我想实现一个安卓应用,记录一段视频,同时写一个文件,包含每一帧的拍摄时间。我试着用MediaRecorder,达到了可以保存视频的程度,但我找不到获得时间戳的方法。我试着做了一些事情。

while (previous video file length != current video file length)
    write current time to text file;

但这似乎并不奏效,因为文件长度似乎更新得不够频繁(或者我错了吗?)

然后我尝试使用OpenCV,并设法逐帧捕捉图像(因此获得时间戳很容易),但我找不到将所有帧连接成一个视频的方法。我看到答案中提到了使用NDK和FFmpeg,但我觉得应该有一个更简单的解决方案(也许类似于我在顶部尝试的那个?)

android
opencv
video
dorverbin
dorverbin
发布于 2014-12-24
3 个回答
fadden
fadden
发布于 2020-12-18
已采纳
0 人赞同

You could use 媒体编解码 来捕捉视频,但这很快就会变得复杂,特别是如果你还想要音频的话。 你可以从一个视频文件中恢复时间戳,方法是用 媒体提取器 . 只要在每一帧上调用 getSampleTime() 就可以得到以微秒为单位的演示时间。

pegnose
pegnose
发布于 2020-12-18
0 人赞同

这个问题是老问题了,但我也需要同样的东西。有了camera2 api,你可以流向多个目标。所以你可以从一个相同的物理相机流向MediaRecorder,同时流向图像读取器。图像读取器有 图像读取器.OnImageAvailableListener ,"onImageAvailable "回调,你可以用它来查询帧的时间戳。

image = reader.acquireLatestImage();
long cameraTime = image.getTimestamp();

但不确定流向多个目标是否需要某些硬件能力(如多个图像处理器)。我想,现代设备有2-3个这样的处理器。

EDIT: This看起来每个具有摄像头2功能的设备都可以流向多达3个目标。

编辑:显然,你可以用一个图像读取器捕获单个帧和它们的时间戳,然后使用一个图像书写者将这些图像提供给下游的消费者,如媒体编解码, which records the video for you.

bk138
bk138
发布于 2020-12-18
0 人赞同

根据fadden的回答,最简单的方法是用以下方法来记录 媒体记录器 (the 相机2的例子 对我帮助很大)和 之后 通过以下方式提取时间戳 媒体提取器 . I want to add a working 媒体提取器 code sample:

MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(pathToVideo);