引入依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.17</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.7</version>
</dependency>
视频拆帧处理
public static void main(String[] args) {
File file = new File("C:\\Users\\EDY\\Desktop\\frame");
File[] files = file.listFiles();
System.out.println("files.length = " + files.length);
long millis = System.currentTimeMillis();
try (FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("https://a803.hmgreat.com:9001/sucaiwang/2025-03-07/170bdbb2-72d0-49a3-9705-0b55d8bd6719.mp4")) {
grabber.start();
int length = grabber.getLengthInVideoFrames();
System.out.println("length = " + length);
Java2DFrameConverter converter = new Java2DFrameConverter();
int frameCount = 0;
Frame frame;
while ((frame = grabber.grabImage()) != null) {
//计数小于文件夹图片数量则表示已做过处理,需跳过不进行重复处理
if (frameCount < files.length) {
frameCount++;//计数
continue;
}
frameCount++;//计数
BufferedImage img = converter.getBufferedImage(frame);
//压缩图片并且保存
Thumbnails.of(img).scale(0.5).toFile(new File(file.getPath() + File.separator + "frame_" + frameCount + ".jpg"));
}
grabber.stop();
System.out.println("耗时: " + ((System.currentTimeMillis() - millis) / 1000));
} catch (IOException e) {
e.printStackTrace();
}
}
执行效果