当前位置: 首页 > article >正文

Java使用FFmpegFrameGrabber进行视频拆帧,结合Thumbnails压缩图片保存到文件夹

引入依赖

        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.17</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.5.7</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.7</version>
        </dependency>

视频拆帧处理

    public static void main(String[] args) {
        File file = new File("C:\\Users\\EDY\\Desktop\\frame");
        File[] files = file.listFiles();
        System.out.println("files.length = " + files.length);
        long millis = System.currentTimeMillis();
        try (FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("https://a803.hmgreat.com:9001/sucaiwang/2025-03-07/170bdbb2-72d0-49a3-9705-0b55d8bd6719.mp4")) {
            grabber.start();
            int length = grabber.getLengthInVideoFrames();
            System.out.println("length = " + length);
            Java2DFrameConverter converter = new Java2DFrameConverter();
            int frameCount = 0;
            Frame frame;
            while ((frame = grabber.grabImage()) != null) {
                //计数小于文件夹图片数量则表示已做过处理,需跳过不进行重复处理
                if (frameCount < files.length) {
                    frameCount++;//计数
                    continue;
                }
                frameCount++;//计数
                BufferedImage img = converter.getBufferedImage(frame);
                //压缩图片并且保存
                Thumbnails.of(img).scale(0.5).toFile(new File(file.getPath() + File.separator + "frame_" + frameCount + ".jpg"));
            }
            grabber.stop();
            System.out.println("耗时: " + ((System.currentTimeMillis() - millis) / 1000));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

执行效果

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/594205.html

相关文章:

  • C# ManualResetEvent‌的高级用法
  • python字符级差异分析并生成 Word 报告 自然语言处理断句
  • Qt6+QML实现Windows屏幕录制
  • 【软考-架构】8.4、信息化战略规划-CRO-SCM-应用集成-电子商务
  • 【STM32】I²CC通信外设硬件I²CC读写MPU6050(学习笔记)
  • 【go】Go语言设计模式:函数与方法的权衡
  • Oracle 19c更换临时表空间操作步骤
  • STM32学习-Day4-寄存器开发流程
  • 电源电路篇
  • 深入理解 Vue 3 项目结构与运行机制
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part10
  • redis的key是如何找到对应存储的数据原理
  • 微软产品的专有名词和官方视频教程
  • labview与西门子1500plc进行S7通讯(仿真效果)
  • 在网页跑3D多人互动之渲染效能瓶颈
  • 连续出现的字符(信息学奥赛一本通-1148)
  • 从零开始使用C++完成串口助手(一)
  • mapbox基础,加载marker点位,测试大数据量加载性能问题
  • 分布式中间件:RabbitMQ死信队列和延迟队列
  • Android Opengl(九)FBO帧缓冲示例