javacv视频抽帧的实现过程详解(附代码)
更新时间:2019年07月11日 10:16:26 作者:行走在江湖
这篇文章主要介绍了javacv视频抽帧的实现过程详解(附代码),视频抽帧可以做一些处理,比如水印,去水印等操作,然后再合成视频,需要的朋友可以参考下
视频抽帧可以做一些处理,比如水印,去水印等操作,然后再合成视频。下面直接上代码:
引入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之间的帧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
如何使用Spring AOP预处理Controller的参数
这篇文章主要介绍了如何使用Spring AOP预处理Controller的参数操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08Springboot使用Redis中ZSetOperations实现博客访问量
在日常的网站使用中,经常会碰到页面的访问量,本文主要介绍了Springboot使用Redis中ZSetOperations实现博客访问量,具有一定的参考价值,感兴趣的可以了解一下2024-01-01Java concurrency之AtomicLongFieldUpdater原子类_动力节点Java学院整理
AtomicLongFieldUpdater可以对指定"类的 'volatile long'类型的成员"进行原子更新。它是基于反射原理实现的。下面通过本文给大家分享Java concurrency之AtomicLongFieldUpdater原子类的相关知识,感兴趣的朋友一起看看吧2017-06-06
最新评论