zoukankan      html  css  js  c++  java
  • 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;
    }
    }
  • 相关阅读:
    Postman 接口数据生成
    python中获取中位数(搬来的)
    数据库域名配置
    每10秒执行定时任务/每5分钟执行一次(附crontab的常用的命令)
    MATCHED 用法
    leetcode279 Perfect Squares
    leetcode480 Sliding Window Median
    leetcode295 Find Median from Data Stream
    leetcode424 Longest Repeating Character Replacement
    leetcode209 Minimum Size Subarray Sum
  • 原文地址:https://www.cnblogs.com/bt2882/p/11493134.html
Copyright © 2011-2022 走看看