java获取视频第一帧图片

2018-10-10

用的jar包如下(用的版本比较新):

jar包链接:https://pan.baidu.com/s/1LI68r6H17sAA4Pfbnpm44g

  

 1 public static void fetchFrame(String videofile, String framefile)
 2             throws Exception {
 3         long start = System.currentTimeMillis();
 4         File targetFile = new File(framefile);
 5         FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videofile);
 6         ff.start();
 7         int lenght = ff.getLengthInFrames();
 8         int i = 0;
 9         Frame f = null;
10         while (i < lenght) {
11             // 过滤前5帧,避免出现全黑的图片,依自己情况而定
12             f = ff.grabFrame();
13             if ((i > 48) && (f.image != null)) {
14                 break;
15             }
16             i++;
17         }
18 //        IplImage img = f.image;
19         int owidth = f.imageWidth;
20         int oheight = f.imageHeight;
21         // 对截取的帧进行等比例缩放
22         int width = 300;
23         int height = (int) (((double) width / owidth) * oheight);
24         Java2DFrameConverter converter = new Java2DFrameConverter();
25         BufferedImage fecthedImage = converter.getBufferedImage(f);
26         BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
27         bi.getGraphics().drawImage(fecthedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),
28                 0, 0, null);
29         ImageIO.write(bi, "jpg", targetFile);
30         ff.stop();
31         System.out.println(System.currentTimeMillis() - start);
32     }

注:javacv0.8的方法有如下不同:

int owidth = img.width();
int oheight = img.height();

 

posted @ 2018-10-10 14:53  名扬天下  阅读(10345)  评论(0编辑  收藏  举报