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;
}
}