import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class VideoTranPicHelper {
// 获取要取得的帧数
private static final int GET_FRAMES_LENGTH = 5;
/**
* 获取一张视频截图并保存同名的jpg文件到视频同目录下
*
* @param filePath 视频文件全路径
* @return
*/
public String getScreenshot(String filePath) {
return getScreenshot(filePath, null);
}
/**
* 获取一张视频截图并保存同名的jpg文件到指定目录
*
* @param filePath 视频文件地址
* @param saveImagePath 截图的图片存放路径(绝对路径,不包含文件名称)
* @return
*/
public String getScreenshot(String filePath, String saveImagePath) {
System.err.println("视频文件{}截图开始"+ filePath);
String resultStr = "";
FFmpegFrameGrabber grabber;
try {
grabber = FFmpegFrameGrabber.createDefault(filePath);
// 第一帧图片存储位置(也是视频路径)
String targerFilePath = filePath.substring(0, filePath.lastIndexOf("\\"));
System.err.println("targerFilePath-----" + targerFilePath);
// 视频文件名
String fileName = filePath.substring(filePath.lastIndexOf("\\") + 1);
// 图片名称
String targetFileName = fileName.substring(0, fileName.lastIndexOf("."));
grabber.start();
// 视频总帧数
int videoLength = grabber.getLengthInFrames();
Frame frame = null;
int i = 0;
while (i < videoLength) {
// 过滤前5帧,避免出现全黑的图片,依自己情况而定(每循环一次取一帧)
frame = grabber.grabFrame();
if ((i > GET_FRAMES_LENGTH) && (frame.image != null)) {
break;
}
i++;
}
Java2DFrameConverter converter = new Java2DFrameConverter();
// 绘制图片
BufferedImage bi = converter.getBufferedImage(frame);
// 图片的类型
String imageMat = "jpg";
// 图片的完整路径
String imagePath = targerFilePath + File.separator + targetFileName + "." + imageMat;
if (null != saveImagePath && !"".equals(saveImagePath)) {
// 指定路径
imagePath = saveImagePath + "." + imageMat;
}
// 创建文件
File output = new File(imagePath);
ImageIO.write(bi, imageMat, output);
resultStr = imagePath;
grabber.stop();
System.err.println("视频文件[{}]截图结束,图片地址为[{}]" + filePath + "----------" + imagePath);
} catch (IOException e) {
e.printStackTrace();
}
return resultStr;
}
public static void main(String[] args) {
String screenshot = new VideoTranPicHelper().getScreenshot("D:\\test\\001.avi");
System.out.println(screenshot);
}
}
视频截图
最新推荐文章于 2023-07-21 15:41:37 发布