我试图复制视频的一部分,并将其保存为GIF格式写入磁盘。 视频可以是本地或远程,以及副本应2S最大。 我并不需要保存每一个帧,但每隔一帧(12-15 fps)的。 我有“帧GIF”的一部分工作,但“得到帧”的部分并不大。
以下是我试过到目前为止:
- MediaMetadataRetriever
:太慢(每帧〜1S上Nexus4),只有本地文件的工作原理
- FFmpegMediaMetadataRetriever
:相同的延迟,但可与远程视频
- TextureView.getBitmap()
我使用ScheduledExecutorService
每60ms的,抢Bitmap
(同时播放...)它具有体积小效果很好getBitmap(100, 100)
但对于那些较大(> 400)时,整个过程变得很慢。 而作为医生说Do not invoke this method from a drawing method
反正。
看来,最好的办法是访问,而解码每一帧,并保存它们。 我试图OpenCV的针对Android ,但无法找到一个API在特定时间抢框架。
现在,我寻找到的样品 ,以了解如何使用MediaCodec
,但在运行ExtractMpegFramesTest.java
,我似乎无法提取任何框架(“从现有的解码器不输出”)。
我在正确的轨道上? 任何其他建议?
编辑:有更进一步ExtractMpegFramesTest.java
,感谢这个职位 。
编辑2:我只想澄清,我想在这里实现的是播放视频,并按下按钮,开始捕捉帧。