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