java 視頻流截屏,形成縮略圖


1.maven

  <!--javacv 精簡版本 ffmpeg -->
        <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>

2.截圖

//使用javacv
public String cutImage(MultipartFile multipartFile,Integer number) throws IOException, ApiException {
        String picPath = StringUtils.EMPTY;
        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(MultipartFileToFile(multipartFile));
        try {
            ff.start();
            int i = 0;
            int length = ff.getLengthInFrames();
            Frame frame = null;
            while (i < length) {
                frame = ff.grabFrame();
                //截取第幾幀圖片
                if ((i > number) && (frame.image != null)) {
                    //獲取生成圖片的路徑
                    //執行截圖並放入指定位置
                    picPath = doExecuteFrame(frame);
                    break;
                }
                i++;
            }
            ff.stop();
        } catch (FrameGrabber.Exception e) {
            e.printStackTrace();
        }
        return picPath;
    }

 

 /**
     * 截取縮略圖
     *
     * @param f Frame
     */
    private static String doExecuteFrame(Frame f) throws IOException, ApiException {
        String imagemat = "png";
        if (null == f || null == f.image) {
            return null;
        }
        Java2DFrameConverter converter = new Java2DFrameConverter();
        BufferedImage bi = converter.getBufferedImage(f);
        ByteArrayOutputStream bs = new ByteArrayOutputStream();

        ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);

        ImageIO.write(bi, "png", imOut);
        InputStream is = new ByteArrayInputStream(bs.toByteArray());

        Integer available = is.available();
        Long size = available.longValue();

        String fileName = UUID.randomUUID().toString() + ".png";
        StringBuilder stringBuilder = new StringBuilder(OssConstant.objectNamePrefix);
        MtpOssUtil.OssConfig ossConfig = new MtpOssUtil().new OssConfig(OssConstant.bucketName, OssConstant.endpoint, OssConstant.accessKeyId, OssConstant.accessKeySecret);

        String filePath = MtpOssUtil.upload(ossConfig, fileName, is, size);
        return filePath;
    }
//文件轉化 
private static File MultipartFileToFile(MultipartFile multiFile) {
        // 獲取文件名
        String fileName = multiFile.getOriginalFilename();
        // 獲取文件后綴
        String prefix = fileName.substring(fileName.lastIndexOf("."));
        // 若需要防止生成的臨時文件重復,可以在文件名后添加隨機碼

        try {
            File file = File.createTempFile(fileName, prefix);
            multiFile.transferTo(file);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM