方法一

使用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实现, 这个能做, 但是没用过, 不多说了.

android 视频 缩略图,安卓平台生成视频缩略图的几种方法相关推荐

  1. 短视频APP开发制作—生成视频封面、略缩图

    在短视频App开发中,编辑短视频有很多重点功能,如视频滤镜.音乐混音.静态贴纸.加水印等,今天讲一讲如何使用腾讯短视频sdk获取视频封面或略缩图. 首先,初始化控件,设置必要配置: mTXVideoE ...

  2. Android Platform Architecture 安卓平台架构

    Android Platform Architecture 安卓平台架构 Android is an open source, Linux-based software stack created f ...

  3. matlab 图像转视频教程,Matlab制作视频并转换成gif动态图的两种方法

    一.第一个方法比较简单,就是使用movie(f)直接取生成AVI视频文件. %% f(t)-->f(4*t+12) 并且验证%% function Signal_change() tic%记录程 ...

  4. android查ip地址,安卓手机查看IP地址的两种方法,  二、进入手机状态

    安卓手机查看IP地址的两种方法, 二.进入手机状态 无论是电脑链接宽带上网还是手机链接wifi上网,当我们在链接网络后,会自动分配一个独立的IP地址,对于电脑端的上网IP地址我们可通过ipconfig ...

  5. android系统通过图片绝对路径获取URI的三种方法

    老马的技术博客 android系统通过图片绝对路径获取URI的三种方法 最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在 android 4.1. ...

  6. Android 中设置线程优先级的正确方式(2种方法)

    Android 中设置线程优先级的正确方式(2种方法) 在 Android 中,有两种常见的设置线程优先级的方式: 第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级 ...

  7. php 自动生成查询密码,php自动生成新密码的两种方法

    php自动生成新密码的两种方法,方法一采用的是随机种子,方法是乱序数组,异曲同工吧. 有需要的朋友可以参考下. 方法1: 代码示例: /* * php自动生成新密码自定义函数 适用环境: PHP5.2 ...

  8. python requirements.txt_python生成requirements.txt的两种方法

    这篇文章主要介绍了python生成requirements.txt的两种方法,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 python项目如何在另一个环境上重新构建项目 ...

  9. 生成唯一id的几种方法

    生成唯一id的几种方法 生成唯一id的方式有很多,UUID,自动增长列,雪花算法,redis等等. 生成id的要求: 全局唯一 趋势递增 效率高(生成.使用.索引) 控制并发 1.雪花算法(twitt ...

  10. 产生随机字符java_java生成随机字符串的两种方法

    本文实例为大家分享了java生成随机字符串的具体代码,供大家参考,具体内容如下 import java.util.Random; public class CharacterUtils { //方法1 ...

最新文章

  1. 走近TCP/IP协议
  2. 贪吃蛇游戏(c/c++)
  3. 【CF913F】Strongly Connected Tournament 概率神题
  4. struts2框架入门
  5. ajax 的同步和异步
  6. Shell文件的排序、合并和分割
  7. Clubhouse的不可能三角
  8. Chrome 远程调试协议分析与实战
  9. 深度剖析Java数据结构之表(四)——LinkedList泛型类的实现
  10. 3.9-分区表fstab
  11. HttpClient、HttpURLConnection、OKHttp和Volley
  12. C# 设置图片背景色透明
  13. 探索SpringCloud+ES实现高性能全文检索
  14. 超简单全面的html图片自动轮播
  15. dummy像元概念定义
  16. 投稿状态(status)记录 IEEE wireless communications letters (IEEE WCL)
  17. openCV绘制简单Sierpinski(分形)图形
  18. 爱奇艺真的有1亿付费会员?十五扒了扒用户数据告诉你更多真相
  19. 网络安全攻防之IPC$攻击
  20. 瑞合信LED字幕WiFi卡使用教程(8.0版)

热门文章

  1. html在线生成字体,手写字体在线生成
  2. 东芝打印机共享怎么设置_理光打印机共享怎么设置?
  3. Servlet容器与Servlet的关系
  4. js时间差计算的几种方式
  5. 搭建基于 Nginx 的 RTMP 服务器,并用 ffmpeg 来进行推流和拉流
  6. 贴片电容耐压和额定电压
  7. 小程序UI与传统HTML5区别
  8. 分享一款手机最强Python编程神器,用手机运行Python。天秀!
  9. 无权访问同一网络的共享计算机,局域网共享文件夹无权访问怎么办
  10. mysql数据库自动备份软件SQLBackupAndFTP简介(图文)