在android中从video中提取位图

我正在尝试从video中提取所有帧。
通过下面的代码,我想获取video的前30帧,但我只有第一帧30次。

private ArrayList<Bitmap> getFrames(String path) { try { ArrayList<Bitmap> bArray = new ArrayList<Bitmap>(); bArray.clear(); MediaMetadataRetriever mRetriever = new MediaMetadataRetriever(); mRetriever.setDataSource("/sdcard/myvideo.mp4"); for (int i = 0; i < 30; i++) { bArray.add(mRetriever.getFrameAtTime(1000*i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); } return bArray; } catch (Exception e) { return null; } } 

现在,我怎样才能从video中获取所有帧?

Solutions Collecting From Web of "在android中从video中提取位图"

Android SDK中的video支持有限,H264编码video的帧提取仅适用于关键帧。 为了提取任意帧,您需要使用像FFmpegMediaMetadataRetriever这样的库,它使用本地代码从video中提取数据。 它速度非常快,配有预编译的二进制文件(用于ARM和x86),因此您不需要深入研究C ++和makefile,在Apache 2.0中获得许可,并且附带了演示Android应用程序。

还有一个纯Java库JCodec,但速度较慢,去年我使用它时,提取的帧的颜色被扭曲了。

getFrameAt以毫秒为单位获取数据,但在for循环中递增0.001毫秒。

  for(int i=1000000;i<millis*1000;i+=1000000) // for incrementing 1s use 1000 { bArray.add(mRetriever.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); } 

像上面那样改变它。 以上是创build你想要的样本。 我也在这里回答