Android取视频第一帧作为预览图,官方有ThumbnailUtils这个缩略图工具类。封装一下直接用:

import android.graphics.Bitmap;
import android.media.ThumbnailUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* @Description: 视频处理相关工具
* @author: CTS
* @date: 2019/2/27 15:45
*/
public class VideoUtils {
private volatile static VideoUtils instance;

/**
* 单例(双重校验锁模式)
*/
public static VideoUtils getInstance() {
if (instance == null) {
synchronized (VideoUtils.class) {
if (instance == null) {
instance = new VideoUtils();
}
}
}
return instance;
}

/**
* 获取视频的缩略图
* 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。
* 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。
*
* @param videoPath 视频的路径
* @param width 指定输出视频缩略图的宽度
* @param height 指定输出视频缩略图的高度度
* @param kind 参照MediaStore.Images(Video).Thumbnails类中的常量MINI_KIND和MICRO_KIND。
* 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
* @return 指定大小的视频缩略图
*/
public Bitmap getVideoThumbnail(String videoPath, int width, int height, int kind) {
Bitmap bitmap;
// 获取视频的缩略图
bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind); //調用ThumbnailUtils類的靜態方法createVideoThumbnail獲取視頻的截圖;
if (bitmap != null) {
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
ThumbnailUtils.OPTIONS_RECYCLE_INPUT);//調用ThumbnailUtils類的靜態方法extractThumbnail將原圖片(即上方截取的圖片)轉化為指定大小;
}
return bitmap;
}

public String saveBitmap(Bitmap bitmap, String bitName) {
File file = new File(Utils.getMyApp().getExternalCacheDir() + bitName + “.png”);
if (file.exists()) {
file.delete();
}
FileOutputStream out;
try {
out = new FileOutputStream(file);
if (bitmap.compress(Bitmap.CompressFormat.PNG, 90, out)) {
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return file.getAbsolutePath();
}
}

 

调用代码如下:

Bitmap bitmap = VideoUtils.getInstance().getVideoThumbnail(path, 720, 1280, FULL_SCREEN_KIND)

 

注意注意注意:如果用七牛云存储视频的话,直接调用接口就可以取到缩略图:

七牛云的视频地址?vframe/jpg/offset/0

最后一个数字0是表示第一帧,可以自行修改。

————————————————
版权声明:本文为CSDN博主「TianShu Chu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014129886/article/details/90673942