java提取视频缩略图或某一帧的图片

这篇文章主要介绍了使用java提取视频缩略图或某一帧的图片功能的实现,在开发中,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


1 :添加POM依赖:

代码如下依赖(示例):

        <!--start:视频获取某一帧的图片-->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>4.0.2-1.4.3</version>
        </dependency>

2 :VideoToImageUtil 工具类

代码如下(示例):

package com.wtl.springcloud.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;

public class VideoToImageUtil {
    /**
     * 获取视频中的图片
     * @param inputStream 视频输入流
     * @return
     * @throws Exception
     */
    public static BufferedImage grabberVideoFramer(InputStream inputStream) throws Exception {
        // 最后获取到的视频的图片缓存
        BufferedImage bufferedImage = null;
        // Frame对象
        Frame frame = null;
        // 标识
        int flag = 0;
        FFmpegFrameGrabber fFmpegFrameGrabber = null;
        try {
            //获取视频文件
            fFmpegFrameGrabber = new FFmpegFrameGrabber(inputStream);
            fFmpegFrameGrabber.start();

            // 获取视频总帧数
            int ftp = fFmpegFrameGrabber.getLengthInFrames();
            //对视屏 帧数处理
            while (flag <= ftp) {
                frame = fFmpegFrameGrabber.grabImage();
                //对视频的第50帧进行处理
                if (frame != null && flag == ftp/50) {
                    // 图片缓存对象
                    bufferedImage = FrameToBufferedImage(frame);
                    break;
                }
                flag++;
            }
        }finally {
            if(fFmpegFrameGrabber != null) {
                fFmpegFrameGrabber.stop();
                fFmpegFrameGrabber.close();
            }
        }
        return bufferedImage;
    }

    /**
     * @param frame 读取视频中每一帧图片
     * @return java.awt.image.BufferedImage
     * @description TODO 将获取的帧,存储为图片
     * @author WangTianLiang
     * @date 2021/6/25
     */
    private static BufferedImage FrameToBufferedImage(Frame frame) {
        // 创建BufferedImage对象 创建一个帧-->图片的转换器
        Java2DFrameConverter converter = new Java2DFrameConverter();
        //转换
        BufferedImage bufferedImage = converter.getBufferedImage(frame);
        return bufferedImage;
    }


    public static void main(String[] args) {
        long time1 = System.currentTimeMillis();
        //视频路径
        String videoFileName = "D:\\Video\\测试一.mp4";
        InputStream intInputStream = null;
        //输出的图片路径
        File outPut = new File("D:\\Video\\测试一.jpg");
        try {
            intInputStream = new FileInputStream(new File(videoFileName));
            BufferedImage bufferedImage = grabberVideoFramer(intInputStream);
            long time2 = System.currentTimeMillis();
            ImageIO.write(bufferedImage, "jpg", outPut);
            System.out.println(time2-time1);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(intInputStream !=null) {
                try {
                    intInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3 :案例实图

如图(示例):
在这里插入图片描述

希望可以帮助到您…

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值