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;
    }
    }
  • 相关阅读:
    js 获取和设置css3 属性值的实现方法
    API的自动化测试
    删除html标签或标签属性以及样式
    JS+CSS实现数字滚动
    video元素和audio元素相关事件
    SDT v0.0.1 上线
    safari浏览器fixed后,被软键盘遮盖的问题—【未解决】
    js中DOM事件探究
    使用Web存储API存取本地数据
    剑指offer(Java版)第七题:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead, 分别完成在队列尾部插入结点和在队列头部删除结点的功能。
  • 原文地址:https://www.cnblogs.com/bt2882/p/11493134.html
Copyright © 2011-2022 走看看