我正在尝试复制视频的一部分,并将其作为GIF保存到磁盘中。视频可以是本地视频或远程视频,副本最多为2秒。我不需要保存每一帧,而是每隔一帧(12-15 fps)。我有“框架到gif”部分工作,但“获取框架”部分不是很好。
这是我到目前为止所做的尝试:
- MediaMetadataRetriever
:速度太慢(Nexus4每帧约1秒),仅适用于本地文件
- FFmpegMediaMetadataRetriever
:相同的延迟,但适用于远程视频
- TextureView.getBitmap()
:我正在使用ScheduledExecutorService
并且每60分钟抓住Bitmap
(在播放时......)它适用于小尺寸getBitmap(100, 100)
,但是对于更大的那些(> 400),整个过程变得非常慢。正如文档所说Do not invoke this method from a drawing method
无论如何。
似乎最好的解决方案是在解码时访问每一帧,并保存它们。我尝试了OpenCV for Android,但找不到在特定时间抓取帧的API。
现在,我正在调查那些samples以了解如何使用MediaCodec
,但在运行ExtractMpegFramesTest.java
时,我似乎无法提取任何帧(“没有输出来自解码器可用“)。
我是否在正确的轨道上?还有其他建议吗?
编辑:ExtractMpegFramesTest.java
更进一步,感谢您post。
编辑2:只是为了澄清,我在这里想要实现的是播放视频,然后按一个按钮开始捕捉帧。