引入依赖
<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();}}
执行效果