美文网首页安卓开发博客
安卓平台生成视频缩略图的几种方法

安卓平台生成视频缩略图的几种方法

作者: vb12 | 来源:发表于2018-09-26 10:24 被阅读30次

方法一

使用MediaMetadataRetriever 的getFrameAtTime()方法, 如下:

private Bitmap createThumbnailAtTime(String filePath, int timeInSeconds){
        MediaMetadataRetriever mMMR = new MediaMetadataRetriever();
        mMMR.setDataSource(filePath);
        //api time unit is microseconds
        return mMMR.getFrameAtTime(timeInSeconds*1000000, MediaMetadataRetriever.OPTION_CLOSEST);
    }

getFrameAtTime方法有几个重载形式, 其中type参数有如下几种取值:

public static final int OPTION_PREVIOUS_SYNC  
public static final int OPTION_NEXT_SYNC 
public static final int OPTION_CLOSEST_SYNC
public static final int OPTION_CLOSEST

可以根据需要选择是否选取关键帧. 以及优先取前面的还是后面的.
还提供了指定尺寸的重载方法.

这种方法效率最高, 速度最快!

需要注意的是, 这个办法对很多格式不规整的视频文件不能很好的支持, 有些文件只有一个关键帧, 或者关键帧很少. 导致很难获取到正确的截图.

方法二

使用MediaExtractor,MediaCodec和opengl抽取mp4视频文件的帧缩略图.
具体实现可以参考https://www.jianshu.com/p/567d7ce47f52
这个方法速度中等, 但是对视频文件的格式支持兼容性较好, 只要能播放, 基本都能搞定.

方法三

将视频渲染到TextureView上, 然后通过将TextureView内容转换为bitmap来获得指定时间点的截图.
具体实现参考: https://www.jianshu.com/p/0f6578362e58
这个方法效率最低, 必须要把视频在TextureView上播放出来, 才能截图. 虽然可以通过调节播放倍速来加快截图效率, 但是这种方式仍然是最慢的.

方法四

通过ffmpeg实现, 这个能做, 但是没用过, 不多说了.

相关文章

网友评论

    本文标题:安卓平台生成视频缩略图的几种方法

    本文链接:https://www.haomeiwen.com/subject/ezhdoftx.html