Ver código fonte

优化识别

suntianwu 3 anos atrás
pai
commit
0ef5a7c5ad

+ 0 - 25
pom.xml

@@ -263,31 +263,6 @@
             <systemPath>${project.basedir}/lib/AIMCFaceMonitor.jar</systemPath>
         </dependency>
 
-        <dependency>
-            <groupId>org.bytedeco</groupId>
-            <artifactId>javacv</artifactId>
-            <version>1.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.bytedeco</groupId>
-            <artifactId>javacpp</artifactId>
-            <version>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.bytedeco.javacpp-presets</groupId>
-            <artifactId>ffmpeg-platform</artifactId>
-            <version>3.4.2-1.4.1</version>
-        </dependency>
-        <dependency>
-            <groupId>net.bramp.ffmpeg</groupId>
-            <artifactId>ffmpeg</artifactId>
-            <version>0.6.2</version>
-        </dependency>
     </dependencies>
 
     <build>

+ 4 - 2
src/main/java/com/iden/bms/service/FaceIdenService.java

@@ -21,7 +21,7 @@ import com.iden.common.service.*;
 import com.iden.common.util.ByteUtil;
 import com.iden.common.util.DateUtils;
 import com.iden.common.util.FileUtil;
-import com.iden.common.videotool.VideoUtil;
+import com.iden.common.videotool.VideoTool;
 import com.iden.common.vo.FaceRetrieveResultVO;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
@@ -63,6 +63,8 @@ public class FaceIdenService {
     private String idenRoot;
     @Value("${file.url:#{null}}")
     private String fileUrl;
+    @Value("${ffmpeg.path:#{null}}")
+    private String ffmpegPath;
 
 
     private static final Logger logger = LogManager.getLogger(FaceIdenService.class);
@@ -389,7 +391,7 @@ public class FaceIdenService {
                                 String videoFileName = videoFile.getName();
                                 String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
                                 Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
-                                Long duration = VideoUtil.fetchAllPic(videoFile,idenRoot + "data/origin/camera/image/" + cameraCode, shootEndTime);
+                                Long duration = VideoTool.fetchAllPic(ffmpegPath, videoFile.getAbsolutePath(),idenRoot + "data/origin/camera/image/" + cameraCode, shootEndTime);
 
                                 File finalDir = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","final"));
                                 if(!finalDir.exists()){

+ 22 - 18
src/main/java/com/iden/bms/service/TraceService.java

@@ -24,6 +24,7 @@ import com.iden.common.service.IdenFaceImageService;
 import com.iden.common.util.ByteUtil;
 import com.iden.common.util.DateUtils;
 import com.iden.common.util.ImgUtil;
+import com.iden.common.videotool.VideoTool;
 import com.iden.common.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -215,6 +216,22 @@ public class TraceService {
             idenCameraVideos.forEach(item->{
                 CameraVideoVO vo = new CameraVideoVO();
                 BeanUtil.copyProperties(item,vo);
+                Long cameraId1 = vo.getCameraId();
+                if(cameraId1 != null ){
+                    IdenCamera idenCamera = this.idenCameraService.getById(cameraId1);
+                    if(idenCamera != null) {
+                        vo.setPlace(idenCamera.getPlace());
+                        vo.setCameraName(idenCamera.getName());
+                        vo.setCameraCode(idenCamera.getCode());
+                        Long communityId = idenCamera.getCommunityId();
+                        if(communityId != null ){
+                            IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
+                            if(idenCommunity != null) {
+                                vo.setCommunityName(idenCommunity.getName());
+                            }
+                        }
+                    }
+                }
                 vos.add(vo);
             });
 
@@ -271,7 +288,7 @@ public class TraceService {
     }
 
 
-    public String cutVideo(Long videoId,String beginTime,String ednTime,UserLoginedConvertVO loginUser) {
+    public String cutVideo(Long videoId,String beginTime,String endTime,UserLoginedConvertVO loginUser) {
         String videoUrl = null;
         try {
             IdenCameraVideo idenCameraVideo = this.idenCameraVideoService.getById(videoId);
@@ -284,31 +301,18 @@ public class TraceService {
                 return null;
             }
 
-            Long duration = DateUtils.betweenTimeSS(beginTime,ednTime); //s
-
             String videoFileName = idenCameraVideo.getVideoUrl().substring(idenCameraVideo.getVideoUrl().lastIndexOf("/") + 1);
-            log.info("videoFileName:" + videoFileName);
             String videoFileExt = videoFileName.substring(videoFileName.lastIndexOf(".") + 1);
-            log.info("videoFileExt:" + videoFileExt);
-            String outFileName =  UUID.randomUUID().toString() + "." + videoFileExt;
-            log.info("outFileName:" + outFileName);
+            String outFileName = UUID.randomUUID().toString() + "." + videoFileExt;
             String videoFilepath = idenRoot + "data/final/camera/video/" + idenCamera.getCode() + "/" + videoFileName;
-            log.info("videoFilepath:" + videoFilepath);
             //String videoFilepath = "e:/20211223123223_76639ced-6400-11ec-b8f9-fa163e4e1e9f.mp4";
             String ountFilePath = idenRoot + "data/final/tmp/" + idenCamera.getCode() + "/" + outFileName;
             //String ountFilePath = "e:/xx9.mp4";
-            videoUrl = fileUrl + "tmp/" +  idenCamera.getCode() + "/" + outFileName;
-
-            String cmd = ffmpegPath + " -ss " + beginTime + " -i " + videoFilepath
-                    + " -t " + duration + " -c:v copy -c:a copy " + ountFilePath;
+            videoUrl = fileUrl + "tmp/" + idenCamera.getCode() + "/" + outFileName;
 
-            log.info("开始运行视频剪辑命令:" + cmd);
-             Runtime.getRuntime().exec(cmd);
-            log.info("视频剪辑完成");
-
-        } catch (IOException e) {
+            VideoTool.cutVideo(ffmpegPath,beginTime,endTime,videoFilepath,ountFilePath);
+        } catch (Exception e) {
             e.printStackTrace();
-
         }
 
         return videoUrl;

+ 54 - 0
src/main/java/com/iden/common/videotool/VideoTool.java

@@ -0,0 +1,54 @@
+package com.iden.common.videotool;
+
+import com.iden.common.util.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Date;
+
+@Slf4j
+public class VideoTool {
+    /**
+     * 视频分解为图片
+     * @param ffmpegPath
+     * @param videoFilePath
+     * @param saveDir
+     * @param shootEndTime
+     * @return
+     * @throws Exception
+     */
+    public static Long fetchAllPic(String ffmpegPath,String videoFilePath, String saveDir, Date shootEndTime) throws Exception {
+        Long endTime = shootEndTime.getTime() ;
+
+        //ms
+        long duration = 0L;
+
+//        String cmd = ffmpegPath + " -ss " + beginTime + " -i " + videoSrcPath
+//                + " -t " + duration + " -c:v copy -c:a copy " + targetPath;
+
+//        log.info("开始运行视频剪辑命令:" + cmd);
+//        Runtime.getRuntime().exec(cmd);
+//        log.info("视频剪辑完成");
+        return duration;
+    }
+
+    /**
+     * 视频剪辑
+     * @param ffmpegPath
+     * @param beginTime
+     * @param endTime
+     * @param videoSrcPath
+     * @param targetPath
+     */
+    public static void cutVideo(String ffmpegPath, String beginTime,String endTime,String videoSrcPath,String targetPath) throws Exception {
+
+        Long duration = DateUtils.betweenTimeSS(beginTime, endTime); //s
+
+        String cmd = ffmpegPath + " -ss " + beginTime + " -i " + videoSrcPath
+                + " -t " + duration + " -c:v copy -c:a copy " + targetPath;
+
+        log.info("开始运行视频剪辑命令:" + cmd);
+        Runtime.getRuntime().exec(cmd);
+        log.info("视频剪辑完成");
+
+    }
+}

+ 0 - 96
src/main/java/com/iden/common/videotool/VideoUtil.java

@@ -1,96 +0,0 @@
-package com.iden.common.videotool;
-
-
-
-import com.iden.common.util.DateUtils;
-import org.bytedeco.javacv.*;
-import org.bytedeco.javacv.Frame;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.imageio.ImageIO;
-
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.util.*;
-
-
-/**
- * 视频工具
- *
- * @author
- */
-public class VideoUtil {
-
-
-    private static final Logger logger = LoggerFactory.getLogger(VideoUtil.class);
-
-
-    public static Long fetchAllPic(File videoFile, String saveDir, Date shootEndTime) throws Exception {
-
-        Long endTime = shootEndTime.getTime() ;
-
-        java.util.List<File> files = new ArrayList<>();
-
-        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videoFile);
-        ff.start();
-
-        // 此视频时长(ms/毫秒秒)
-        Long duration = ff.getLengthInTime() /  1000;
-        logger.info("duration==" + duration);
-
-        Long beginTime = endTime - duration;
-
-        // 视频总帧数
-        int frameLength = ff.getLengthInFrames();
-
-        logger.info("length==" + frameLength);
-
-        //帧率(1秒多少帧)
-        double framRate = ff.getFrameRate();
-
-        int i = 0;
-        Frame frame = null;
-
-        while (i < frameLength) {
-            frame = ff.grabImage();
-            if (frame != null && frame.image != null) {
-                Double time = beginTime + (i * (1000/framRate));
-                String fileName = DateUtils.formatToDateStr(new Date(time.longValue()),"yyyyMMddHHmmss") + "_" + UUID.randomUUID().toString();
-                files.add(writeToFile(frame, saveDir, fileName));
-            }
-            i++;
-        }
-        ff.stop();
-        return duration;
-    }
-
-    private static File writeToFile(Frame frame, String saveDir, String fileName) throws Exception {
-        File saveDirFile = new File(saveDir);
-        if(!saveDirFile.exists()) {
-            saveDirFile.mkdirs();
-        }
-        File targetFile = new File(saveDir + File.separator + fileName + ".jpg");
-        String imgSuffix = "jpg";
-
-        Java2DFrameConverter converter = new Java2DFrameConverter();
-        BufferedImage srcBi = converter.getBufferedImage(frame);
-        int owidth = srcBi.getWidth();
-        int oheight = srcBi.getHeight();
-        // 对截取的帧进行等比例缩放
-        int width = 800;
-        int height = (int) (((double) width / owidth) * oheight);
-        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
-        bi.getGraphics().drawImage(srcBi.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
-        try {
-            ImageIO.write(bi, imgSuffix, targetFile);
-        } catch (Exception e) {
-            throw new Exception( "截帧失败");
-        }
-        return targetFile;
-    }
-
-
-
-}

+ 10 - 0
src/main/java/com/iden/common/vo/CameraVideoVO.java

@@ -33,10 +33,20 @@ public class CameraVideoVO implements Serializable {
     @ApiModelProperty("摄像头ID")
     private Long cameraId;
 
+    @ApiModelProperty("摄像头名称")
+    private String cameraName;
+
+    @ApiModelProperty("摄像头编码")
+    private String cameraCode;
 
     @ApiModelProperty("小区ID")
     private Long communityId;
 
+    @ApiModelProperty("小区名称")
+    private String communityName;
+
+    @ApiModelProperty("位置")
+    private String place;
 
     @ApiModelProperty("视频地址")
     private String videoUrl;

+ 1 - 1
src/main/resources/application.properties

@@ -5,7 +5,7 @@ spring.profiles.active=dev
 server.port=13456
 
 #优雅关闭
-#server.shutdown=graceful
+server.shutdown=graceful
 
 ### spring配置
 # 配置服务名称

+ 0 - 360
src/test/java/com/face/video/VideoTest.java

@@ -1,360 +0,0 @@
-package com.face.video;
-
-
-import com.iden.common.util.DateUtils;
-import net.bramp.ffmpeg.FFmpeg;
-import net.bramp.ffmpeg.FFmpegExecutor;
-import net.bramp.ffmpeg.FFprobe;
-import net.bramp.ffmpeg.builder.FFmpegBuilder;
-import org.bytedeco.javacpp.avcodec;
-import org.bytedeco.javacv.*;
-import org.bytedeco.javacv.Frame;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.imageio.ImageIO;
-import javax.swing.*;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-
-
-/**
- * 视频工具
- *
- * @author
- */
-public class VideoTest {
-
-    private static final int SECOND = 50;
-
-    private static final Logger logger = LoggerFactory.getLogger(VideoTest.class);
-
-    /**
-     * 获取指定视频的帧并保存为图片至指定目录
-     *
-     * @param videoFile 源视频文件
-     * @param saveFile  截取帧的图片存放路径
-     * @throws Exception
-     */
-    public static List<File> fetchPic(File videoFile, String saveFile, int second) throws Exception {
-
-        List<File> files = new ArrayList<>();
-
-        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videoFile);
-        ff.start();
-        int lenght = ff.getLengthInAudioFrames();
-        System.out.println(ff.getFrameRate());
-
-        int i = 0;
-        Frame frame = null;
-
-        while (i < lenght) {
-            // 过滤前5帧,避免出现全黑的图片,依自己情况而定
-            frame = ff.grabImage();
-            if (i >= (int) (ff.getFrameRate() * second) && frame.image != null) {
-                System.out.print(i + ",");
-                if (frame != null && frame.image != null) {
-                    System.out.println(i);
-                    String fileName = String.valueOf(System.currentTimeMillis()) + i;
-                    files.add(writeToFile(frame, saveFile, fileName));
-                }
-                second++;
-            }
-            i += second;
-        }
-        ff.stop();
-        return files;
-    }
-
-    private static List<Integer> getList(int count, int length) {
-        if (count > length) {
-            count = length;
-        }
-//        System.out.println(length);
-//        System.out.println(count);
-        int total = (int) (length / count);
-        List<Integer> list = new ArrayList<>();
-        for (int i = 0; i < count; i++) {
-            list.add(i * total);
-            System.out.println(i * total);
-        }
-        return list;
-    }
-
-    public static List<File> fetchPicByCount(File videoFile, String saveDir, int count) throws Exception {
-
-        List<File> files = new ArrayList<>();
-
-        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videoFile);
-        ff.start();
-
-        // 此视频时长(s/秒)
-        Long duration = ff.getLengthInTime() / (1000 * 1000);
-        System.out.println("duration==" + duration);
-        // 视频总帧数
-        int frameLength = ff.getLengthInFrames();
-
-        System.out.println("length==" + frameLength);
-
-        List<Integer> list = getList(count, frameLength);
-
-        System.out.println("ff.getFrameRate() == " + ff.getFrameRate());
-
-        int i = 0;
-        Frame frame = null;
-
-        while (i < frameLength) {
-            frame = ff.grabImage();
-            if (list.contains(i)) {
-                if (frame != null && frame.image != null) {
-                    System.out.println(i);
-                    String fileName = String.valueOf(System.currentTimeMillis()) + i;
-                    files.add(writeToFile(frame, saveDir, fileName));
-                }
-            }
-            i++;
-        }
-        ff.stop();
-        return files;
-    }
-
-    public static Long fetchAllPic(File videoFile, String saveDir, Date shootEndTime) throws Exception {
-
-        Long endTime = shootEndTime.getTime() ;
-
-        List<File> files = new ArrayList<>();
-
-        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videoFile);
-        ff.start();
-
-        // 此视频时长(ms/毫秒秒)
-        Long duration = ff.getLengthInTime() /  1000;
-        System.out.println("duration==" + duration);
-
-        Long beginTime = endTime - duration;
-
-        // 视频总帧数
-        int frameLength = ff.getLengthInFrames();
-
-        System.out.println("length==" + frameLength);
-
-        //帧率(1秒多少帧)
-        double framRate = ff.getFrameRate();
-
-        int i = 0;
-        Frame frame = null;
-
-        while (i < frameLength) {
-            frame = ff.grabImage();
-            if (frame != null && frame.image != null) {
-                Double time = beginTime + (i * (1000/framRate));
-                String fileName = DateUtils.formatToDateStr(new Date(time.longValue()),"yyyyMMddHHmmss") + "_" + UUID.randomUUID().toString();
-                files.add(writeToFile(frame, saveDir, fileName));
-            }
-            i++;
-        }
-        ff.stop();
-        return duration;
-    }
-
-    private static File writeToFile(Frame frame, String saveDir, String fileName) throws Exception {
-        File saveDirFile = new File(saveDir);
-        if(!saveDirFile.exists()) {
-            saveDirFile.mkdirs();
-        }
-        File targetFile = new File(saveDir + File.separator + fileName + ".jpg");
-        String imgSuffix = "jpg";
-
-        Java2DFrameConverter converter = new Java2DFrameConverter();
-        BufferedImage srcBi = converter.getBufferedImage(frame);
-        int owidth = srcBi.getWidth();
-        int oheight = srcBi.getHeight();
-        // 对截取的帧进行等比例缩放
-        int width = 800;
-        int height = (int) (((double) width / owidth) * oheight);
-        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
-        bi.getGraphics().drawImage(srcBi.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
-        try {
-            ImageIO.write(bi, imgSuffix, targetFile);
-        } catch (Exception e) {
-            throw new Exception( "截帧失败");
-        }
-        return targetFile;
-    }
-
-
-    /**
-     * 获取视频时长,单位为秒
-     *
-     * @param file
-     * @return 时长(s)
-     */
-    public static Long getVideoTime(File file) {
-        Long times = 0L;
-        try {
-            FFmpegFrameGrabber ff = new FFmpegFrameGrabber(file);
-            ff.start();
-            times = ff.getLengthInTime() / (1000 * 1000);
-            ff.stop();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return times;
-    }
-
-
-
-/**********=======================================================以下实验没成功===============================***************/
-    /**
-     * 视频截取
-     * @param videoFile
-     * @throws Exception
-     */
-    public static void cut(File videoFile, File outputFile) throws Exception{
-        boolean isStart = true;// 该变量建议设置为全局控制变量,用于控制录制结束
-        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFile);
-//        // 微秒 大概为设置时间的两倍
-        //      grabber.setOption(TimeoutOption.RW_TIMEOUT.getKey(), "10000000");
-        // rtsp 默认udp 丢包 改为tcp
-        // grabber.setOption("rtsp_transport", "tcp");
-
-        grabber.start();
-        //好多视频熟悉可以获取后打印 示例几个
-        System.out.println("ImageWidth:" + grabber.getImageWidth());
-        System.out.println("ImageHeight:" + grabber.getImageHeight());
-        System.out.println("AudioChannels:" + grabber.getAudioChannels());
-        System.out.println("Format:" + grabber.getFormat());
-        FrameRecorder recorder = new FFmpegFrameRecorder(outputFile, grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());
-        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // avcodec.AV_CODEC_ID_H264,编码
-        recorder.setFormat("flv");//封装格式,如果是推送到rtmp就必须是flv封装格式
-        recorder.setFrameRate( grabber.getFrameRate());
-
-        recorder.start();//开启录制器
-        long startTime=0;
-        long videoTS=0;
-        CanvasFrame frame = new CanvasFrame("camera", CanvasFrame.getDefaultGamma() / grabber.getGamma());
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.setAlwaysOnTop(true);
-        Frame rotatedFrame= null;
-        while (frame.isVisible() && (rotatedFrame = grabber.grabFrame()) != null) {
-            rotatedFrame = grabber.grabFrame();
-            frame.showImage(rotatedFrame);
-            if (startTime == 0) {
-                startTime = System.currentTimeMillis();
-            }
-            videoTS = 1000 * (System.currentTimeMillis() - startTime);
-            recorder.setTimestamp(videoTS);
-            recorder.record(rotatedFrame);
-            Thread.sleep(40);
-        }
-        frame.dispose();
-        recorder.stop();
-        recorder.release();
-        grabber.stop();
-    }
-
-    /**
-     * 视频截取
-     * @param videoFile
-     * @throws Exception
-     */
-    public static void cut2(File videoFile, File outputFile) throws Exception{
-        boolean isStart = true;// 该变量建议设置为全局控制变量,用于控制录制结束
-        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFile);
-//        // 微秒 大概为设置时间的两倍
- //      grabber.setOption(TimeoutOption.RW_TIMEOUT.getKey(), "10000000");
-        // rtsp 默认udp 丢包 改为tcp
-       // grabber.setOption("rtsp_transport", "tcp");
-
-        grabber.start();
-        //好多视频熟悉可以获取后打印 示例几个
-        System.out.println("ImageWidth:" + grabber.getImageWidth());
-        System.out.println("ImageHeight:" + grabber.getImageHeight());
-        System.out.println("AudioChannels:" + grabber.getAudioChannels());
-        System.out.println("Format:" + grabber.getFormat());
-        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile,  grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());
-        recorder.setFrameRate(grabber.getFrameRate());
-        recorder.setAudioBitrate(grabber.getAudioBitrate());
-				recorder.setSampleRate(grabber.getSampleRate());
-//					recorder.setGopSize(2);
-        recorder.setFormat("mp4");
-        recorder.setAudioCodecName("aac");
-        recorder.setVideoCodec(grabber.getVideoCodec());
-        recorder.start();
-        Frame frame = null;
-        //如果想截取规定时间段视频 请看系列文章二
-        while (isStart) {
-            frame = grabber.grabFrame();
-            if(frame != null){
-                recorder.record(frame);
-            }
-
-        }
-        recorder.stop();
-        recorder.release();
-        grabber.stop();
-        grabber.release();
-    }
-
-    public static void cut3() throws Exception{
-        FFmpeg ffmpeg = new FFmpeg("C:\\Users\\STW\\Downloads\\ffmpeg-3.1.3\\ffmpeg-3.1.3\\ffmpeg");
-        FFprobe ffprobe = new FFprobe("C:\\Users\\STW\\Downloads\\ffmpeg-3.1.3\\ffmpeg-3.1.3\\ffprobe");
-
-        FFmpegBuilder builder = new FFmpegBuilder()
-
-                .setInput("e:/20211223123223_76639ced-6400-11ec-b8f9-fa163e4e1e9f.mp4")     // Filename, or a FFmpegProbeResult
-                .overrideOutputFiles(true) // Override the output if it exists
-
-                .addOutput("e:/output.mp4")   // Filename for the destination
-                .setFormat("mp4")        // Format is inferred from filename, or can be set
-                .setTargetSize(250_000)  // Aim for a 250KB file
-
-                .disableSubtitle()       // No subtiles
-
-                .setAudioChannels(1)         // Mono audio
-                .setAudioCodec("aac")        // using the aac codec
-                .setAudioSampleRate(48_000)  // at 48KHz
-                .setAudioBitRate(32768)      // at 32 kbit/s
-
-                .setVideoCodec("libx264")     // Video using x264
-                .setVideoFrameRate(24, 1)     // at 24 frames per second
-                .setVideoResolution(640, 480) // at 640x480 resolution
-
-                .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs
-                .done();
-
-        FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
-
-// Run a one-pass encode
-        executor.createJob(builder).run();
-
-// Or run a two-pass encode (which is better quality at the cost of being slower)
-        executor.createTwoPassJob(builder).run();
-    }
-
-    /**********=======================================================以上实验没成功===============================***************/
-
-
-    public static void main(String[] args) {
-        try {
-            //getList(10,113);
-
-          File file = new File("e:/20211223123223_76639ced-6400-11ec-b8f9-fa163e4e1e9f.mp4");
-//           List<File> files = VideoUtil.fetchPicByCount(file, "E:/223", 100);
-//            System.out.println(files.get(0).getName());
-//            System.out.println(VideoUtil.getVideoTime(file));
-
-         Date shootEndTime = DateUtils.strToDate("20211223123223","yyyyMMddHHmmss");
-         fetchAllPic(file,"E:/223",shootEndTime);
-//            cut3(file,new File("e:/a.mp4"));
-   //         cut3();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}

+ 31 - 0
src/test/java/com/face/video/cmd/videoCmd.java

@@ -0,0 +1,31 @@
+package com.face.video.cmd;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+
+
+public class videoCmd {
+    private BufferedReader reader;
+    public void exe(){
+        try {
+            String ffmpegPath = "D:\\program\\ffmpeg\\ffmpeg-4.3.1-2021-01-01-essentials_build\\bin\\ffmpeg.exe";
+
+           // String cmd = ffmpegPath + " -ss 0:05 -i e:/20211223123223_76639ced-6400-11ec-b8f9-fa163e4e1e9f.mp4 -t 10 -c:v copy -c:a copy e:/555.mp4 ";
+            String cmd = ffmpegPath +  " -y -i e:/555.mp4 e:/aa/%04d.jpg";
+
+
+                    // 执行命令
+            Runtime.getRuntime().exec(cmd);
+
+
+        } catch (IOException e) {
+            e.printStackTrace();
+
+        }
+    }
+    public static void main(String[] args) {
+       new videoCmd().exe();
+    }
+
+
+}

+ 0 - 59
src/test/java/com/face/videoCmd.java

@@ -1,59 +0,0 @@
-package com.face;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-
-public class videoCmd {
-    private BufferedReader reader;
-    public void exe(){
-        try {
-            String ffmpegPath = "D:\\program\\ffmpeg\\ffmpeg-4.3.1-2021-01-01-essentials_build\\bin\\ffmpeg.exe";
-            // 执行tail -f命令
-            Process process = Runtime.getRuntime().exec( ffmpegPath + " -ss 0:05 -i e:/20211223123223_76639ced-6400-11ec-b8f9-fa163e4e1e9f.mp4 -t 10 -c:v copy -c:a copy e:/555.mp4 ");
-            InputStream inputStream = process.getInputStream();
-
-//            // 一定要启动新的线程,防止InputStream阻塞处理WebSocket的线程
-            TailLogThread thread = new TailLogThread(inputStream);
-            thread.start();
-
-        } catch (IOException e) {
-            e.printStackTrace();
-
-        }
-    }
-    public static void main(String[] args) {
-       new videoCmd().exe();
-    }
-
-    class  TailLogThread extends Thread {
-        private BufferedReader reader;
-
-        public TailLogThread(InputStream in) {
-            this.reader = new BufferedReader(new InputStreamReader(in));
-        }
-
-        @Override
-        public void run() {
-            String line;
-            try {
-                while((line = reader.readLine()) != null) {
-                    System.out.println(line);
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            } finally {
-                if(reader != null){
-                    try {
-                        reader.close();
-                    } catch (Exception e){
-                        e.printStackTrace();
-                    }
-
-                }
-            }
-        }
-    }
-}