我正在尝试从视频中提取所有帧。
通过下面的代码,我想获取视频的前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; }
}

现在,如何从视频中获取所有帧?

最佳答案

Android SDK中的视频支持受到限制,并且仅可对关键帧进行H264编码视频的帧提取。为了提取任意帧,您需要使用FFmpegMediaMetadataRetriever之类的库,该库使用 native 代码从视频中提取数据。它非常快速,带有预编译的二进制文件(适用于ARM和x86),因此您无需深入研究C++和makefile,它已在Apache 2.0下获得许可,并随附一个演示Android应用。

还有一个纯Java库JCodec,但速度较慢,去年我使用它时,提取的框架的颜色失真了。

关于android - 从Android中的视频中提取位图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15114153/

10-12 00:38
查看更多