<!--start:视频获取某一帧的图片-->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.3</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.0.2-1.4.3</version>
</dependency>
<!--end:视频获取某一帧的图片-->
package com.test.example;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class VedioTest {
//视频帧图片存储路径
public static void main(String[] args){
String vedioPath="D:\\test.mp4";
grabberVideoFramer(vedioPath);
}
/**
* 将视频文件帧处理并以“jpg”格式进行存储。
* 依赖FrameToBufferedImage方法:将frame转换为bufferedImage对象
*
* @param videoFileName(视频文件的路径)
*/
public static void grabberVideoFramer(String videoFileName) {
//Frame对象
Frame frame = null;
//标识
int flag = 0;
/*
获取视频文件
*/
FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(videoFileName);
try {
//开始转换
try {
fFmpegFrameGrabber.start();
} catch (Exception e) {
e.printStackTrace();
}
int ftp = fFmpegFrameGrabber.getLengthInFrames();
int count=0;
while (count < ftp) {
//文件绝对路径+名字
String fileName = "D:\\img\\test_" + count + ".jpg";
//文件储存对象
File outPut = new File(fileName);
if(!outPut.getParentFile().exists()){
outPut.getParentFile().mkdirs();
outPut.createNewFile();
}else{
outPut.createNewFile();
}
//获取帧
try {
frame = fFmpegFrameGrabber.grabImage();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
//根据条件生产图片flag值可以任意修改,根据1s=24帧或者30帧
if (frame != null) {
ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut);
}
flag++;
count++;
}
try {
// 转换结束
fFmpegFrameGrabber.stop();
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException E) {
}
}
/**
* 创建BufferedImage对象
*
*
*/
public static BufferedImage FrameToBufferedImage(Frame frame) {
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bufferedImage = converter.getBufferedImage(frame);
//bufferedImage=rotateClockwise90(bufferedImage);
return bufferedImage;
}
/**
* 处理图片,将图片旋转90度。
*
*
*/
public static BufferedImage rotateClockwise90(BufferedImage bi) {
int width = bi.getWidth();
int height = bi.getHeight();
BufferedImage bufferedImage = new BufferedImage(height, width, bi.getType());
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
bufferedImage.setRGB(j, i, bi.getRGB(i, j));
return bufferedImage;
}
}