首页 > 编程 > Java > 正文

javacv视频抽帧的实现过程详解(附代码)

2019-11-26 08:49:46
字体:
来源:转载
供稿:网友

视频抽帧可以做一些处理,比如水印,去水印等操作,然后再合成视频。下面直接上代码:

引入maven步骤看javacv去水印的文章

这里直接上关键操作:

  /**   * 视频文件指定时间段的帧截取   * @param file   * @param start   * @param end   */  public static List<File> videoIntercept(File file, Integer start, Integer end) {    Frame frame = null;    List<File> files = Lists.newArrayList();    FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(file);    String filePath = "D://video//images//";    String fileTargetName = "movie";    try {      fFmpegFrameGrabber.start();      int ftp = fFmpegFrameGrabber.getLengthInFrames();      System.out.println("开始视频提取帧");      for (int i=0 ; i < ftp ; i++){        if( i >= start && i <= end){          frame = fFmpegFrameGrabber.grabImage();          doExecuteFrame(frame, filePath, fileTargetName, i ,files);        }      }      System.out.println("============运行结束============");      fFmpegFrameGrabber.stop();    } catch (IOException E) {//      Loggers.ERROR.error("视频抽帧异常", e);    }    return files;  }  public static void doExecuteFrame(Frame frame, String targetFilePath, String targetFileName, int index ,List<File> files) {    if ( frame == null || frame.image == null) {      return;    }    Java2DFrameConverter converter = new Java2DFrameConverter();    String imageMat = "jpg";    String fileName = targetFilePath + targetFileName + "_" + index + "." + imageMat;    BufferedImage bi = converter.getBufferedImage(frame);    File output = new File(fileName);    files.add(output);    try{      ImageIO.write(bi, imageMat, output);    } catch (IOException e) {      e.printStackTrace();    }  }  public static void main(String[] args) {    List<File> files = videoIntercept(new File("D://video//1553583033205-480p.mp4"), 10, 20);    System.out.println(files);  }

我们可以看到文件夹下抽取了视频的第10,20之间的帧。

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表