java 截取视频第一帧

maven依赖
截取图片第一帧依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>3.4.2-1.4.1</version>
</dependency>

<dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv-platform</artifactId>
            <version>3.4.1-1.4.1</version>
        </dependency>仅仅出图片是可以不要这个的。



// 文件转换依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>RELEASE</version>
</dependency>
// 获取文件名称
String mp4 = file.getOriginalFilename();
String img = System.currentTimeMillis() + ".jpg";
//储存文件的路径
File file2 = new File("D:\Download\"+ mp4);
File file4 = new File("D:\Download\"+ img);

//把传入的文件写入到"D:\Download\"+ mp4
file.transferTo(file2);
//调用截取方法,返回写入到 "D:\Download\"+ img 里面的文件
File file1 = JiequImg.fetchFrame(file2,file4);
//file 文件转成 MultipartFile
FileInputStream fileInput = new FileInputStream(file1);
MultipartFile toMultipartFile = new MockMultipartFile("file",file1.getName(),"application/json;charset=UTF-8", IOUtils.toByteArray(fileInput));
toMultipartFile.getInputStream();
// 上传
String s = fastDFSClientWrapper.uploadFile(file);
//关流(没有关流删除不了文件)
fileInput.close();
//删除视频
file2.delete();
//删除第一帧图片
file1.delete();






public class JiequImg {

public static File fetchFrame(File file,File file4)
throws Exception {
long start = System.currentTimeMillis();
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(file);
ff.start();
int lenght = ff.getLengthInFrames();
int i = 0;
Frame f = null;
while (i < lenght) {
// 过滤前5帧,避免出现全黑的图片,依自己情况而定
f = ff.grabFrame();
if ((i > 5) && (f.image != null)) {
break;
}
i++;
}
int owidth = f.imageWidth ;
int oheight = f.imageHeight ;
// 对截取的帧进行等比例缩放
int width = 800;
int height = (int) (((double) width / owidth) * oheight);
Java2DFrameConverter converter =new Java2DFrameConverter();
BufferedImage fecthedImage =converter.getBufferedImage(f);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
bi.getGraphics().drawImage(fecthedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),
0, 0, null);
//ff.flush();
ImageIO.write(bi, "jpg", file4);
ff.stop();
return file4;
}
}
原文地址:https://www.cnblogs.com/bt2882/p/11493134.html