用JavaCV把图片合成视频

这是我最近在做的一个小需求 就是后台把多张照片生成一个视频 并且展示到前端。

一般处理图片视频有两种方式 第一种使用OpenCV 底层c开发的,效率非常快,c和python都会使用这款插件。但是Java中使用也可以 只不过要去官网下载jar 并且依赖dll文件 才可以正常使用。在Linux中更难受 所以在Java中不推荐使用OpenCV。

我们这次主要说第二种 使用JavaCV来处理这个需求,其实他也是封装了opencv ,只不过加了java中的一些接口…废话不过说。

首先我们得导入Javacv的依赖
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.5.2</version>
</dependency>
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.2</version>
</dependency>
首先把要生成视频的图片地址放到一个map中 因为我图片存在本地所以 做了一些逻辑
//将一个gis中的一个文件夹 转map集合
public static Map<Integer,File> gisFileToMap(String filePath, GisCondition gisCondition){long startTime = System.currentTimeMillis();//根据类型选择文件路径String path = filePath+File.separator+typeNames[gisCondition.getTypeId()];Map<Integer, File> imgMap = new HashMap<Integer, File>();Integer index = 0;try {File file = new File(path);for (File listFile : file.listFiles()) {log.info("子文件路径==>"+listFile);Gis gis = appendGis(listFile);//提前跳出筛选log.info("start1===>"+gis.getRecordTime().getTime());log.info("start2===>"+gisCondition.getStartDate().getTime());if (gis.getRecordTime().getTime()>gisCondition.getEndDate().getTime()) break;if (gis.getRecordTime().getTime() < gisCondition.getStartDate().getTime()) continue;//根据开始日期和结束日期选择图片if (gis.getRecordTime().getTime() >=gisCondition.getStartDate().getTime() &&gis.getRecordTime().getTime() <=gisCondition.getEndDate().getTime()){imgMap.put(index,listFile);index++;}}}catch (Exception e){log.info("解析gis图片失败:{}",e.getMessage());}System.out.println("筛选图片耗时===》"+(System.currentTimeMillis() - startTime));return imgMap;
}
然后通过tomcat 映射本地路径 返回最终的一个展示路径
@Override
public String getGisListByLocalFile2(GisCondition gisCondition) {//把原有的视频删除File file = new File(localPath);if (file.exists()){for (File listFile : file.listFiles()) {listFile.delete();}}//根据条件筛选出图片Map<Integer, File> imgMap = CommonUtil.gisFileToMap(filePath, gisCondition);log.info("==》照片总数:{}",imgMap.size());String uuid = UUID.randomUUID().toString();localPath =  localPath+uuid+".mp4";tomcatPath = tomcatPath+uuid+".mp4";try {PicToAviUtil.createMp4(localPath,imgMap,width,height);} catch (FrameRecorder.Exception e) {log.info("生成视频出错:{}",e.getMessage());}return tomcatPath;
}
然后使用的该工具类
package com.gis.util;
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.FrameRecorder;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Map;
/*** 图片与视频转换工具类*/
public class PicToAviUtil {//设置每秒的帧数private static final Integer FRAME = 3;//设置一秒钟几幅图像private static final Integer SECOND_IMG = 2;/*** @param localPath 保存到本地的路径* @param imgMap  需要转视频的 图片* @param width 宽度* @param height  高度* @throws FrameRecorder.Exception*/public static void createMp4(String localPath, Map<Integer, File> imgMap,int width, int height) throws FrameRecorder.Exception {long startTime = System.currentTimeMillis();//视频宽高最好是按照常见的视频的宽高  16:9  或者 9:16FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(localPath, width, height);//设置视频编码层模式recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);//设置视频多少帧每秒recorder.setFrameRate(FRAME);//设置视频图像数据格式recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);//视频格式  可以自己选recorder.setFormat("mp4");try {recorder.start();Java2DFrameConverter converter = new Java2DFrameConverter();//录制一个自定义视频Integer index = 0;for (; index < imgMap.size(); index++) {BufferedImage read = ImageIO.read(imgMap.get(index));//根据帧数  记录每一帧都是一样的for (int j = 0; j < FRAME; j++) {recorder.record(converter.getFrame(read));}}} catch (Exception e) {e.printStackTrace();} finally {//最后一定要结束并释放资源recorder.stop();recorder.release();}System.out.println("生成视频结束==>"+(System.currentTimeMillis()-startTime));}
}
最后到页面上可以展示视频

然后可以根据自己的需求去改变工具类中的方法。
最后到页面上可以展示视频
然后可以根据自己的需求去改变工具类中的方法。
JavaCV 不仅可以图片合成视频 还可以对视频进行抽帧 做人脸识别 身份认证等等…

使用JavaCV把图片合成视频(实用)相关推荐

  1. java图片合成视频_使用JAVACV把图片合成视频

    使用JAVACV1.2把图片合成视频,直接上代码.自己mark一下,也希望能够帮助更多的人. package test; import static org.bytedeco.javacpp.open ...

  2. python脚本——图片重命名、图片合成视频、faster-rcnn画P-R曲线

    调试faster rcnn算法实用的python脚本 目录 调试faster rcnn算法实用的python脚本 一.前言 二.常用python脚本 三.后记 一.前言 最近在做关于目标检测算法的研究 ...

  3. java图片合成视频、音频及音频裁剪_MQ

    java图片合成视频.音频及音频裁剪_MQ 一.音频裁剪 1.利用IO流进行音频裁剪 /* * fis = 输入流对象 * bt = 歌曲的比特率 * start = 裁剪的起始时间 * end = ...

  4. 视频分解图片原理;图片合成视频原理

    (1)加载视频 (2)读取视频信息 (3)解码视频,拿到单帧信息 帧率:视频每秒钟展示多少张图片:帧率高我们看到的图片才是连续的:帧率低我们看到的图片就相当于非连续的: 宽度:高度 接下来是视频保存成 ...

  5. Python 将图片合成视频

    本文记录使用opencv-python库将以数字命名的图片合成视频的程序: import osfrom PIL import Image import cv2def charts2video(img_ ...

  6. python将图片合成视频

    使用python将图片合成视频 python版本: 3.7.2 使用到的库:opencv (安装命令:pip install opencv-python) import cv2if __name__ ...

  7. matlab 图片合成视频

    分享一段图片合成视频的matlab代码 由两个文件组成:(1)pic2video.m(2)loadImgSequenceInfo.m 内容分别如下: (1)pic2video.m video_path ...

  8. MATLAB小技巧(9) 图片合成视频与视频分帧

    MATLAB小技巧(9)图片合成视频与视频分帧 前言 一. MATLAB仿真-序列合成 二. MATLAB仿真-视频分帧 三. 小结 前言 MATLAB进行图像处理相关的学习是非常友好的,可以从零开始 ...

  9. 【方便的Opencv】实现图片合成视频+附带图片生成gif

    学习前言: 最近在学习OpenCv播放视频,学习完毕后,神奇的发现:其实播放视频就是把视频中的图像一帧帧的抽取出来,按照一定的时间间隔展示罢了. 既然如此,那么我能不能逆向思维--倒过来?把一帧帧图片 ...

最新文章

  1. 【计算理论】计算复杂性 ( 多项式等价引入 | 多项式时间规约 )
  2. 关于easyui的layout的region的resize的问题(自适应浏览器)
  3. 集成学习-Boosting集成学习算法XGBoost
  4. c语言银行每月额外存款100,C语言课程设计_银行存取款业务.doc
  5. 关于eclipse中文注释乱码的问题
  6. eclipse 工程中使用引入maven项目遇到maven-resources-plugin:2.6 找不到
  7. 微软的平板电脑_Microsoft 微软 Surface Go 2 10.5英寸二合一平板电脑(m3-8100Y、8GB、128GB、LTE) 5788元...
  8. 配置tomcat6.0的HTTPS(单向)
  9. 如何查询高考成绩2021年的成绩排位,2020年高考成绩排名怎么查,高考成绩排名是怎么排的...
  10. linux——常用指令
  11. Bootstrap圣诞节主题商城网站模板
  12. APP设计没有灵感?让那些小众但富有创意的页面告诉你!
  13. ASMSupport教程4.7 生成关系运算符
  14. 在现有集群环境下动态增加(下架)新的节点
  15. 【CDH】cdh搭建遇到的坑和解决过程
  16. 25. 熟悉非标准的哈希容器
  17. 教你如何轻松玩转自媒体淘客,赚大钱!
  18. android文件恢复功能,终于找到了安卓手机删除的文件的恢复方法值得一看
  19. Python自动化测试详解
  20. 基于Django的在线学习资源分享与推荐系统(mysql)-python.VUE【数据库设计、论文、源码、开题报告】

热门文章

  1. UVA:1593 代码对齐
  2. 这几个消除笔软件,值得你们收藏
  3. Win10桌面一刷新就卡死
  4. 汽车功能安全标准ISO 26262导入实践(下)
  5. 《熟练掌握OpenCV----实用计算机视觉工程案例》第5章 车牌号码识别
  6. RLC振荡原理与RC Snubber吸收电路
  7. 蒸妙集团,中医熏蒸是养生治疗合一体
  8. 中国财团收购Opera 为什么要美国监管部门同意?
  9. 修改战网服务器,使命召唤16现代战争怎么改战网地区_修改战网客户端的方法_3DM单机...
  10. 云宏刘建平:细说中小企业如何上云