本文实现对视频进行抽帧,将视频图片转换成字符图片,在使用JFrame实现图片的连续播放。

javaCV实现对视频进行抽帧

     <!-- 首先引入javaCv的相关依赖 --><dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.5.6</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.6</version></dependency>
     // 进行视频的图片提取// 需要处理的视频位置String videoPath = "C:\\tmp\\videoDemo\\video\\1.mp4";// 存放图片的位置String imagePath = "C:\\tmp\\videoDemo\\image\\";// javaCv提供的视频处理FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(videoPath);ff.start();// 获取视频帧的长度int ffLength = ff.getLengthInFrames();System.out.println("ffLength = " + ffLength);// 提取视频中图片帧的间隔int interval = 1;for (int i = 0; i < ffLength; i++) {// 获取视频帧Frame frame = ff.grab();// 帧的类型EnumSet<Frame.Type> types = frame.getTypes();// VIDEO类型代表是图片,提取出来转换成图片if (types.contains(Frame.Type.VIDEO) && i % interval == 0) {if (frame.image == null) {continue;}// 使用Java2DFrameConverter将帧转换成图片Java2DFrameConverter converter = new Java2DFrameConverter();String imgSuffix = "png";// 对应的目录写入图片String fileName = imagePath + File.separator + i + "." + imgSuffix;BufferedImage bufferedImage = converter.getBufferedImage(frame);ImageIO.write(bufferedImage, imgSuffix, new File(fileName));System.out.printf("执行:%d/%d%n", i, ffLength);}}ff.stop();}

以下是对视频进行提取后的图片:

图片转换

// 将提取出来的视频图片转换成字符图片String imageDir = "C:\\tmp\\videoDemo\\image";String targetDir = "C:\\tmp\\videoDemo\\charImage\\";File imageDirFile = new File(imageDir);File[] files = imageDirFile.listFiles();for (int i = 0; i < files.length; i++) {File file = files[i];String absolutePath = file.getAbsolutePath();String fileName = file.getName();String targetFile = targetDir + fileName;// 转换成对应的视频图片,转换方法https://blog.csdn.net/weixin_45485300/article/details/121716788ImageOut.characterPainting("love", 0, absolutePath, targetFile, false);System.out.printf("%d/%d%n", i, files.length);}

转换后:

JFrame实现图片播放

public static void main(String[] args) {// 使用JFrame实现图片的播放ImageJPanel imageJPanel = new ImageJPanel();Thread thread = new Thread(imageJPanel);JFrame jFrame = new JFrame();// 添加图片jFrame.add(imageJPanel);// 设置尺寸,保持或图片大小一致即可jFrame.setSize(1920, 1080);// 设置可见jFrame.setVisible(true);// 窗口居中jFrame.setLocationRelativeTo(null);// 设置窗口关闭jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thread.start();}static class ImageJPanel extends JPanel implements Runnable {// 进行渲染的图片private BufferedImage bufferedImage;// 图片地址private String path = "C:\\tmp\\videoDemo\\charImage";@Overridepublic void paint(Graphics g) {super.paint(g);if (bufferedImage != null) {// 绘制图片 参数是图片 x坐标 y坐标 图片渲染的一些回调通知,可以不用g.drawImage(bufferedImage, 0, 0, null);}}@Overridepublic void run() {try {// 使用线程来加载的图片File file = new File(path);File[] files = file.listFiles();// 对图片进行一个排序,因为图片是按数字来命名的,读取的时候是按字典顺序来读取的,会出现114.png排在90.png的前面Arrays.sort(files, (f1, f2) -> {String name = f1.getName();String[] f1Index = name.split("\\.");String f2Name = f2.getName();String[] f2Index = f2Name.split("\\.");return Integer.valueOf(f1Index[0]) - Integer.valueOf(f2Index[0]);});for (File imgFile : files) {// 读取图片bufferedImage = ImageIO.read(imgFile);// 控制图片渲染的速度Thread.sleep(50);// 重新绘制repaint();}} catch (Exception e) {e.printStackTrace();}}}

效果:

JavaCV实现视频抽帧 JFrame字符动画相关推荐

  1. javacv之视频抽帧

    视频抽帧可以做一些处理,比如水印,去水印等操作,然后再合成视频.下面直接上代码: 引入maven步骤看javacv去水印的文章:https://blog.csdn.net/weixin_3800810 ...

  2. JAVA使用javaCV完成视频抽帧调用算法和视频合成功能

    目录 1 引入依赖 2编写核心流程 1 引入依赖 <dependencies><dependency><groupId>org.bytedeco</group ...

  3. 视频抽帧Java实现

    视频抽帧Java实现 依赖: <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv --><dependency&g ...

  4. java 视频抽帧_opencv3.2.0实现视频抽帧,并保存成图片

    .实现指定帧数的抽取.和全部帧数的抽取,并保存到指定目录. 在QT新建一个控制台程序,程序源码如下:(程序实现每十帧获取一次帧) #include #include #include #include ...

  5. Java h265视频抽帧提取照片支持Window,Linux

    Java H265视频抽帧提取照片 1. Windows下可调用ffmpeg.exe实现,亲测可行 2. linux下调用FFmpegFrameGrabber 3. 源码 4. 效果图 5. pom依 ...

  6. 视频处理之视频抽帧的python脚本

    在计算机视觉研究中,处理视频的时候,往往需要将视频抽帧成图片.如果多个视频都存放在一个文件夹里,并且希望抽帧出来的图片,以一个视频对应一个文件夹的形式存放,可以用以下代码,抽帧频率可自己手动修改,下面 ...

  7. python视频抽帧 后 前端javascript如何显示_使用OpenCV编写一个可以定时抽帧的脚本...

    一.概述 在计算机视觉数据预处理阶段,一个常用的工序是要将原始的视频数据抽帧,得到图像数据集.有时候视频很长,而我们感兴趣的场景可能只在某些较短的时段内出现.这种情况下如果对整个视频抽帧再进行人工筛选 ...

  8. 视频数据处理方法!关于开源软件FFmpeg视频抽帧的学习

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 视频文件是多媒体数据中比较常见的一种,也是入门门槛比较高的一个领域.视频数据相关的领域 ...

  9. 视频截帧:javacv实现视频截帧功能

    javacv实现视频截帧功能 引入依赖 使用 引入依赖 <dependency><groupId>org.bytedeco</groupId><artifac ...

最新文章

  1. JIT Compiler编译器
  2. 高并发高流量网络架构
  3. python基本语法规则-Python-基本语法元素
  4. 清结算系统的一些思考
  5. 数字黑洞java_[蓝桥杯][算法提高VIP]数字黑洞 (Java代码)
  6. UVa 10844 (大数)
  7. Post/Redirect/Get模式防止表单重复提交
  8. app上传头像处理Java_java后台加安卓端实现头像上传功能
  9. eclipse插件安装,万能方法
  10. 同步异步多线程这三者关系,你能给面试官一个满意的回答吗?
  11. 前端学习(1851)vue之电商管理系统电商系统vue创建项目
  12. Linq 简介 及添加
  13. 【JS第1期】深拷贝实现原理
  14. 真相:Java 开发者钟爱 Kotlin 的五个原因
  15. python数学符号读法大全_高等数学中所有符号的读法
  16. 营收增速环比放缓 Okta高歌猛进的那股劲去哪了?
  17. 计算机中丢失storm.d,win10 64位电脑缺少storm.dll怎么办_win10玩暗黑破坏神2缺少storm.dll文件修复方法...
  18. as3读写本地xml/txt
  19. ChatGpt结合Google文档完成自动化写作流程--1
  20. Python+vue+elementui高考志愿填报辅助系统django

热门文章

  1. node.js+vue婚纱影楼摄影婚庆管理系统vscode项目
  2. 西瓜书课后题——第十一章(特征选择与稀疏学习)
  3. GitHub上README.md写法暨GFM语法解读
  4. C语言qsort解析
  5. 巨神奇,2013年的老Mac,竟直接装上macOS Ventura 13.1 Beta版
  6. 英语口语 8 级是这么炼成的!你也可以!
  7. VLC 媒体播放器将登陆 Apple TV
  8. Datawhale 智慧海洋建设-Task1 地理数据分析常用工具
  9. CST学习笔记4----------初级端口
  10. VRP问题总结——直观理解