添加maven依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.3.1</version>
</dependency>
加入以下方法
/**
* 截取视频第六帧的图片
*
* @param filePath 视频路径
* @param dir 文件存放的根目录
* @return 图片的相对路径 例:pic/1.png
* @throws FrameGrabber.Exception
*/
public static String videoImage(String filePath, String dir) throws FrameGrabber.Exception {
String pngPath = "";
FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
ff.start();
int ffLength = ff.getLengthInFrames();
Frame f;
int i = 0;
while (i < ffLength) {
f = ff.grabImage();
//截取第6帧
if ((i > 5) && (f.image != null)) {
//生成图片的相对路径 例如:pic/uuid.png
pngPath = getPngPath();
//执行截图并放入指定位置
doExecuteFrame(f, dir + pngPath);
break;
}
i++;
}
ff.stop();
return pngPath;
}
/**
* 生成图片的相对路径
*
* @return 图片的相对路径 例:pic/1.png
*/
private static String getPngPath() {
return "pic/" + getUUID() + ".png";
}
/**
* 生成唯一的uuid
*
* @return uuid
*/
private static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 截取缩略图
*
* @param f Frame
* @param targerFilePath:封面图片存放路径
*/
private static void doExecuteFrame(org.bytedeco.javacv.Frame f, String targerFilePath) {
String imagemat = "png";
if (null == f || null == f.image) {
return;
}
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bi = converter.getBufferedImage(f);
File output = new File(targerFilePath);
try {
ImageIO.write(bi, imagemat, output);
} catch (IOException e) {
e.printStackTrace();
}
}
最后调用videoImage("E:\\BaiduDownload\\云中心堡垒机使用视频.mp4", "E:\\BaiduDownload\\");
方法,经过测试,支持MP4和AVI