1、添加依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.4</version>
</dependency>
2、截图代码
/**
* 截取视频获得指定帧的图片
*
* @param video 源视频文件
* @param picPath 截图存放路径
*/
public static void getVideoPic(File video, String picPath) {
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video);
try {
ff.start();
String title = ff.getMetadata("title");
String comment = ff.getMetadata("comment");
System.out.println("title:"+title);
System.out.println("comment:"+comment);
Map<String, String> metadata = ff.getMetadata();
System.out.println(metadata.toString());
// 截取中间帧图片(具体依实际情况而定)
int i = 0;
int length = ff.getLengthInFrames();
int middleFrame = length / 2;
Frame frame = null;
while (i < length) {
frame = ff.grabFrame();
if ((i > middleFrame) && (frame.image != null)) {
break;
}
i++;
}
// 截取的帧图片
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage srcImage = converter.getBufferedImage(frame);
int srcImageWidth = srcImage.getWidth();
int srcImageHeight = srcImage.getHeight();
// 对截图进行等比例缩放(缩略图)
// int width = 480;
// int height = (int) (((double) width / srcImageWidth) * srcImageHeight);
int width = srcImageWidth;
int height = srcImageHeight;
BufferedImage thumbnailImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
thumbnailImage.getGraphics().drawImage(srcImage.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
File picFile = new File(picPath);
ImageIO.write(thumbnailImage, "jpg", picFile);
ff.stop();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用示例
*/
@Test
public void doSnapShot() {
String video = "G:\\zhang-class\\2020-10-19\\2020-10-19讲解流程图.mp4";
String picPath = "G:\\zhang-class\\2020-10-19\\2020-10-19讲解流程图.jpg";
File file = new File(video);
getVideoPic(file, picPath);
}
3、获取视频信息
public static void getMp4Info() {
File video = new File("G:\\zhang-class\\2020-10-19\\2020-10-19讲解流程图.mp4");
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video);
try {
ff.start();
String title = ff.getMetadata("title");
String comment = ff.getMetadata("comment");
System.out.println("title:" + title);
System.out.println("comment:" + comment);
ff.stop();
} catch (FrameGrabber.Exception e) {
e.printStackTrace();
}
}