java获取视频第一帧

本文介绍了如何使用Java从视频文件中提取并显示第一帧图像,涵盖了必要的库引入、文件读取、图像处理等关键步骤,帮助开发者实现基本的视频处理功能。
摘要由CSDN通过智能技术生成
<!-- 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();
    }
  }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值