JavaCV实现将视频以帧方式抽取

 更新时间:2021年04月22日 10:01:46   作者:SyubanLiu  
这篇文章主要为大家详细介绍了JavaCV实现将视频以帧方式抽取,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

使用前: 在用JavaCV实现以帧方式抽取视频的前,我们需要先从bytedeco/javacv下载第三方的压缩包,解压后按自己的需求往自己的IDE ( * IDEA / Eclipse * ) 导入解压缩包下JAR文件;

接下来就以代码方式来说明如何利用Javacv来将视频以帧的方式抽取出来:

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

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import static org.bytedeco.javacpp.opencv_core.IplImage;
import static org.bytedeco.javacpp.opencv_core.cvReleaseImage;
import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;
import static org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage;
import static org.bytedeco.javacpp.opencv_imgproc.cvSmooth;

public class JavaCV {

  // the image's path;
  final static String imagePath = "/home/lance/abc.jpg/";
  // the vedio's path and filename;
  final static String vedioPath = "/home/lance/target-a/";
  final static String vedioName = "origin-a.mp4";


  public static void main(String[] args) throws Exception {
    smooth(imagePath);
    grabberFFmpegImage(vedioPath + vedioName, vedioPath
        , vedioName, 30);
  }

  // the method of compress image;
  public static void smooth(String fileName) {
    IplImage iplImage = cvLoadImage(fileName);
    if (iplImage != null) {
      cvSmooth(iplImage, iplImage);
      cvSaveImage(fileName, iplImage);
      cvReleaseImage(iplImage);
    }
  }

  // grab ffmpegImage from vedio;
  public static void grabberFFmpegImage(String filePath, String fileTargetPath
      , String fileTargetName, int grabSize) throws Exception{
    FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
    ff.start();
    for (int i = 0; i < grabSize; i++){
      Frame frame = ff.grabImage();
      doExecuteFrame(frame, filePath, fileTargetName, i);
    }
    ff.stop();
  }

  // grab frame from vedio;
  public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index) {
    if ( frame == null || frame.image == null) {
      return;
    }
    Java2DFrameConverter converter = new Java2DFrameConverter();
    String imageMat = "jpg";
    String fileName = targetFilePath + File.pathSeparator + targetFileName + "_" + index + "." + imageMat;
    BufferedImage bi = converter.getBufferedImage(frame);
    File output = new File(fileName);
    try{
      ImageIO.write(bi, imageMat, output);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 面试官:怎么做JDK8的垃圾收集器的调优(面试常问)

    面试官:怎么做JDK8的垃圾收集器的调优(面试常问)

    这篇文章主要介绍了面试官:怎么做JDK8的垃圾收集器的调优,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java运行时数据区划分原理解析

    Java运行时数据区划分原理解析

    这篇文章主要介绍了Java运行时数据区划分原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Springboot+Stomp协议实现聊天功能

    Springboot+Stomp协议实现聊天功能

    本示例实现一个功能,前端通过websocket发送消息给后端服务,后端服务接收到该消息时,原样将消息返回给前端,前端技术栈html+stomp.js,后端SpringBoot,需要的朋友可以参考下
    2024-02-02
  • ssm框架+PageHelper插件实现分页查询功能

    ssm框架+PageHelper插件实现分页查询功能

    今天小编教大家如何通过ssm框架+PageHelper插件实现分页查询功能,首先大家需要新建一个maven工程引入jar包,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-06-06
  • 布隆过滤器(Bloom Filter)的Java实现方法

    布隆过滤器(Bloom Filter)的Java实现方法

    下面小编就为大家带来一篇布隆过滤器(Bloom Filter)的Java实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Java线程池如何实现精准控制每秒API请求

    Java线程池如何实现精准控制每秒API请求

    这篇文章主要介绍了Java线程池如何实现精准控制每秒API请求问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详解Spring-Cloud2.0之Feign调用远程服务指南

    详解Spring-Cloud2.0之Feign调用远程服务指南

    这篇文章主要介绍了详解Spring-Cloud2.0之Feign调用远程服务指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 详解Java的设计模式编程中的原型模式

    详解Java的设计模式编程中的原型模式

    这篇文章主要介绍了Java的设计模式编程中的原型模式,处理对象复制时要特别注意浅拷贝和深拷贝的问题,需要的朋友可以参考下
    2016-02-02
  • Java项目打包部署之部署jar包和war包

    Java项目打包部署之部署jar包和war包

    我们在开发环境部署项目一般通过ideal将项目打包成包,然后连接linux服务器,这篇文章主要给大家介绍了关于Java项目打包部署之部署jar包和war包的相关资料,需要的朋友可以参考下
    2023-12-12
  • Java中List介绍及常见方法和五种遍历方式详解

    Java中List介绍及常见方法和五种遍历方式详解

    这篇文章主要给大家介绍了关于Java中List介绍及常见方法和五种遍历方式的相关资料,Java的List接口是集合框架的一部分,定义了一个有序的集合,允许存储重复的元素,并且可以通过索引访问这些元素,需要的朋友可以参考下
    2024-12-12

最新评论