获取视频缩略图
所需依赖
1 | <!-- javacv start --> |
2 | <dependency> |
3 | <groupId>org.bytedeco</groupId> |
4 | <artifactId>javacpp</artifactId> |
5 | <version>1.4.1</version> |
6 | </dependency> |
7 | <dependency> |
8 | <groupId>org.bytedeco</groupId> |
9 | <artifactId>javacv</artifactId> |
10 | <version>1.4.1</version> |
11 | </dependency> |
12 | <dependency> |
13 | <groupId>org.bytedeco.javacpp-presets</groupId> |
14 | <artifactId>opencv-platform</artifactId> |
15 | <version>3.4.1-1.4.1</version> |
16 | </dependency> |
17 | <dependency> |
18 | <groupId>org.bytedeco.javacpp-presets</groupId> |
19 | <artifactId>ffmpeg-platform</artifactId> |
20 | <version>3.4.2-1.4.1</version> |
21 | </dependency> |
22 | <!-- javacv end --> |
23 | |
24 | <dependency> |
25 | <groupId>org.bytedeco.javacpp-presets</groupId> |
26 | <artifactId>opencv-platform</artifactId> |
27 | <version>3.4.1-1.4.1</version> |
28 | </dependency> |
工具类
1 | package com.superair.common.utils.file; |
2 | |
3 | import org.bytedeco.javacv.FFmpegFrameGrabber; |
4 | import org.bytedeco.javacv.Frame; |
5 | import org.bytedeco.javacv.Java2DFrameConverter; |
6 | |
7 | import javax.imageio.ImageIO; |
8 | import java.awt.image.BufferedImage; |
9 | import java.awt.image.RenderedImage; |
10 | import java.io.File; |
11 | |
12 | /** |
13 | *获取视频缩略图 |
14 | *@Author Administrator |
15 | *@Date 2020/7/22 9:29 |
16 | *@Vision 1.0 |
17 | **/ |
18 | public class VideoUtil { |
19 | /** |
20 | * 获取视频缩略图 |
21 | * @param tempPath 缩略图保存路径 |
22 | * @param filePath 视频路径 |
23 | * @return java.lang.String |
24 | */ |
25 | |
26 | public static String getTempPath(String tempPath, String filePath) throws Exception { |
27 | // String tempPath=" ";//保存的目标路径 |
28 | File targetFile = new File(tempPath); |
29 | if (!targetFile.getParentFile().exists()) { |
30 | targetFile.getParentFile().mkdirs(); |
31 | } |
32 | File file2 = new File(filePath); |
33 | if (file2.exists()) { |
34 | // log.info("文件存在,路径正确!"); |
35 | FFmpegFrameGrabber ff = new FFmpegFrameGrabber(file2); |
36 | ff.start(); |
37 | int ftp = ff.getLengthInFrames(); |
38 | int flag = 0; |
39 | Frame frame = null; |
40 | while (flag <= ftp) { |
41 | //获取帧 |
42 | frame = ff.grabImage(); |
43 | //过滤前3帧,避免出现全黑图片 |
44 | if ((flag > 5) && (frame != null)) { |
45 | break; |
46 | } |
47 | flag++; |
48 | } |
49 | ImageIO.write(FrameToBufferedImage(frame), "jpg", targetFile); |
50 | ff.close(); |
51 | ff.stop(); |
52 | } |
53 | return null; |
54 | } |
55 | |
56 | private static RenderedImage FrameToBufferedImage(Frame frame) { |
57 | //创建BufferedImage对象 |
58 | Java2DFrameConverter converter = new Java2DFrameConverter(); |
59 | BufferedImage bufferedImage = converter.getBufferedImage(frame); |
60 | return bufferedImage; |
61 | } |
62 | |
63 | public static void main(String[] args) { |
64 | try { |
65 | // getTempPath("http://jyt.fty.pw:8080/videos/guoyifang/a2966518-03dd-4a31-b05b-5c52db6baf73.mp4", "D:\\test.jpg"); |
66 | getTempPath("D:/test1.jpg", "D:/6 - What If I Want to Move Faster.mp4"); |
67 | } catch (Exception e) { |
68 | e.printStackTrace(); |
69 | } |
70 | } |
71 | } |