diff --git a/virtual-patient-manage/pom.xml b/virtual-patient-manage/pom.xml
index fd512d90..90f370b2 100644
--- a/virtual-patient-manage/pom.xml
+++ b/virtual-patient-manage/pom.xml
@@ -29,6 +29,35 @@
+
+
+
+ org.bytedeco
+ javacpp
+ 1.4.1
+ test
+
+
+ org.bytedeco
+ javacv
+ 1.4.1
+ test
+
+
+ org.bytedeco.javacpp-presets
+ opencv-platform
+ 3.4.1-1.4.1
+ test
+
+
+ org.bytedeco.javacpp-presets
+ ffmpeg-platform
+ 3.4.2-1.4.1
+ test
+
+
+
+
com.alibaba.nacos
nacos-common
diff --git a/virtual-patient-manage/src/test/java/com/supervision/manage/video/VideoPreviewGenerator.java b/virtual-patient-manage/src/test/java/com/supervision/manage/video/VideoPreviewGenerator.java
new file mode 100644
index 00000000..945a02ae
--- /dev/null
+++ b/virtual-patient-manage/src/test/java/com/supervision/manage/video/VideoPreviewGenerator.java
@@ -0,0 +1,69 @@
+package com.supervision.manage.video;
+import org.bytedeco.javacpp.opencv_core;
+import org.bytedeco.javacv.*;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+public class VideoPreviewGenerator {
+
+ /**
+ * 截取视频第一帧为图片展示
+ *
+ * @param filePath 视频路径
+ * @param targetFilePath 第一帧图片存储位置
+ * @param targetFileName 图片名称
+ */
+ public static void getVideoFirstFrameImage(String filePath, String targetFilePath, String targetFileName) throws FrameGrabber.Exception {
+ FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
+ ff.start();
+ String rotate = ff.getVideoMetadata("rotate");
+ Frame f;
+ int i = 0;
+ while (i < 1) {
+ f = ff.grabImage();
+ opencv_core.IplImage src;
+ if (null != rotate && rotate.length() > 1) {
+ OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
+ src = converter.convert(f);
+ f = converter.convert(rotate(src, Integer.parseInt(rotate)));
+ }
+ doExecuteFrame(f, targetFilePath, targetFileName);
+ i++;
+ }
+ ff.stop();
+ }
+
+ /**
+ * 进行旋转角度操作(为了保证截取到的第一帧图片与视频中的角度方向保持一致)
+ */
+ public static opencv_core.IplImage rotate(opencv_core.IplImage src, int angle) {
+ opencv_core.IplImage img = opencv_core.IplImage.create(src.height(), src.width(), src.depth(), src.nChannels());
+ opencv_core.cvTranspose(src, img);
+ opencv_core.cvFlip(img, img, angle);
+ return img;
+ }
+
+ public static void doExecuteFrame(Frame f, String targetFilePath, String targetFileName) {
+ if (null == f || null == f.image) {
+ return;
+ }
+ Java2DFrameConverter converter = new Java2DFrameConverter();
+ String imageMat = "jpg";
+ String fileName = targetFilePath + File.separator + targetFileName + "." + imageMat;
+ BufferedImage bi = converter.getBufferedImage(f);
+ File output = new File(fileName);
+ try {
+ ImageIO.write(bi, imageMat, output);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) throws FrameGrabber.Exception {
+ String url = "F:\\tmp\\测试1.mp4";
+ getVideoFirstFrameImage(url, "F:\\tmp\\", "first");
+ }
+}
\ No newline at end of file