java获取视频第一帧

<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
<dependency>
   <groupId>org.bytedeco</groupId>
   <artifactId>javacv</artifactId>
   <version>1.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
<dependency>
   <groupId>org.bytedeco</groupId>
   <artifactId>javacv-platform</artifactId>
   <version>1.5.1</version>
</dependency>
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.opencv_core.IplImage;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/** @Author: laogao @Date: 2019/7/17 13:52 */
public class VideoProcessing {

  /**
   * @param file 视频路径
   * @param targerFilePath 第一帧图片存储位置
   * @param targetFileName 图片名称
   * @throws Exception
   */
  public static void randomGrabberFFmpegImage(
      File file) throws Exception {

    FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(file);
    ff.start();
    String rotate = ff.getVideoMetadata("rotate");
    Frame f;
    int i = 0;
    while (i < 1) {
      f = ff.grabImage();
      IplImage src = null;
      if (null != rotate && rotate.length() > 1) {
        OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
        src = converter.convert(f);
        f = converter.convert(rotate(src, Integer.valueOf(rotate)));
      }
      doExecuteFrame(f, "C:\\Users\\Administrator\\Desktop\\aa", "123");
      i++;
    }

    ff.stop();
  }

  /*
   * 旋转角度的
   */
  public static IplImage rotate(IplImage src, int angle) {
    IplImage img = IplImage.create(src.height(), src.width(), src.depth(), src.nChannels());
    opencv_core.cvTranspose(src, img);
    opencv_core.cvFlip(img, img, angle);
    return img;
  }

  public static void doExecuteFrame(Frame f, String targerFilePath, String targetFileName) {

    if (null == f || null == f.image) {
      return;
    }
    Java2DFrameConverter converter = new Java2DFrameConverter();
    String imageMat = "jpg";
    String FileName = targerFilePath + File.separator + targetFileName + "." + imageMat;
    BufferedImage bi = converter.getBufferedImage(f);
    System.out.println("width:" + bi.getWidth());
    System.out.println("height:" + bi.getHeight());
    File output = new File(FileName);
    try {
      ImageIO.write(bi, imageMat, output);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
发布了31 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Jonny_jun_gao/article/details/96307533