首先添加依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.2</version>
</dependency>
传入视频所在地址,以及保存图片所在地址。
可改成传入 inputstream 流格式的视频
static public void getTempPath(String videoPath, String imagePath) {
String tempPath = imagePath;//保存的目标路径
File targetFile = new File(tempPath);
if (!targetFile.getParentFile().exists()) {
targetFile.getParentFile().mkdirs();
}
try {
File file2 = new File(videoPath);
InputStream inputStream = new FileInputStream(file2);
if (file2.exists()) {
logger.info("文件存在,路径正确!" + videoPath);
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(inputStream);
ff.start();
int ftp = ff.getLengthInFrames();
int flag = 0;
Frame frame = null;
while (flag <= ftp) {
//获取帧
frame = ff.grabImage();
//过滤前100帧,避免出现全黑图片
//一秒大约等于24帧左右,视情况而定
if ((flag > 100) && (frame != null)) {
break;
}
flag++;
}
OutputStream outputStream = new FileOutputStream(targetFile);
ff.close();
ff.stop();
ImageIO.write(FrameToBufferedImage(frame), "jpg", outputStream);
logger.info("生成图片了================" + imagePath);
}
} catch (Exception e) {
// log.error("获取预览图失败",e)
}
}