Java获取视频封面图,利用FFmpegFrameGrabber获取视频封面图
依赖
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.9</version></dependency>
传入视频流获取图片byte
/*** 获取视频截图** @param frameNumber 视频的指定帧数* @param vName 视频名称* @param videoBytes 视频字节* @return 图片byte数组*/private byte[] getCoverImageBytes(Integer frameNumber, String vName, byte[] videoBytes) {Double videoSize = DoubleUtil.getDouble2(videoBytes.length / 1024.0 / 1024.0);long timeMillis = System.currentTimeMillis();logger.info("截取视频截图开始 视频名称:{} 视频大小:{}MB", vName, videoSize);try (ByteArrayInputStream is = new ByteArrayInputStream(videoBytes);FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(is);ByteArrayOutputStream os = new ByteArrayOutputStream();Java2DFrameConverter converter = new Java2DFrameConverter()) {grabber.start();//视频的最大帧数,减少10帧是因为最后几帧会出现获取不到图片的情况int ftp = grabber.getLengthInFrames() - 10;frameNumber = ftp < frameNumber ? ftp : frameNumber;//设置视频指定帧数grabber.setFrameNumber(frameNumber);//设置视频截取帧(默认取第一帧)Frame frame = grabber.grabImage();//绘制图片BufferedImage bi = converter.getBufferedImage(frame);ImageIO.write(bi, "jpg", os);grabber.stop();logger.info("截取视频截图结束,处理时间: {}秒", (System.currentTimeMillis() - timeMillis) / 1000);return os.toByteArray();} catch (FrameGrabber.Exception e) {logger.error("FrameGrabber.Exception :{}", e.getMessage());} catch (IOException e) {logger.error("IOException :{}", e.getMessage());}logger.info("获取视频封面图失败 vName:{}", vName);return null;}
传入视频流获取图片文件
/*** 传入视频文件,生成对应的封面图文件** @param frameNumber 帧数* @param file 视频文件*/private void coverImage(Integer frameNumber, File file) {String vName = file.getName();Double videoSize = DoubleUtil.getDouble2(file.length() / 1024.0 / 1024.0);long timeMillis = System.currentTimeMillis();logger.info("截取视频截图开始 视频名称:{} 视频大小:{}MB", vName, videoSize);try (FileInputStream is = new FileInputStream(file);FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(is);Java2DFrameConverter converter = new Java2DFrameConverter()) {grabber.start();//视频的最大帧数,减少10帧是因为最后几帧会出现获取不到图片的情况int ftp = grabber.getLengthInFrames() - 10;frameNumber = ftp < frameNumber ? ftp : frameNumber;//设置视频指定帧数grabber.setFrameNumber(frameNumber);// 图片名称String targetFileName = vName.substring(0, vName.lastIndexOf(".")) + "_vc.jpg";logger.info("图片名称:{}", targetFileName);File imageFile = new File("D:\\my_work\\" + targetFileName);//设置视频截取帧(默认取第一帧)Frame frame = grabber.grabImage();//绘制图片BufferedImage bi = converter.getBufferedImage(frame);ImageIO.write(bi, "jpg", imageFile);grabber.stop();logger.info("截取视频截图结束,处理时间: {}秒", (System.currentTimeMillis() - timeMillis) / 1000);} catch (FrameGrabber.Exception e) {logger.error("FrameGrabber.Exception :{}", e.getMessage());} catch (IOException e) {logger.error("IOException :{}", e.getMessage());}
相关文章:
Java获取视频封面图,利用FFmpegFrameGrabber获取视频封面图
依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.9</version></dependency>传入视频流获取图片byte /*** 获取视频截图** param frameNumber 视频的指定帧数* param …...
pycharm @NotNull parameter ‘module‘ of ...
下载了最新pycharm ,无法启动运行 pycharm或者idea中Run/Debug Python项目报错 Argument for NotNull parameter ‘module‘ of … 解决方案 删除项目根目录的 idea 文件夹 随后重启,重新配置即可...
Python使用pynput模块后台监控鼠标及按键
Pynput 是一个 Python 第三方库,它提供了监听和控制键盘和鼠标事件的功能。使用 pynput,我们可以编写自动化脚本,监控输入设备的活动,或者实现一些与键盘和鼠标相关的功能。 一、功能说明 这段代码是运用pynput库实现对鼠标和键盘…...
C语言 扫雷游戏
写了这么长时间的关于C语言的基础知识,相信大家已经学会了使用C语言书写一些基础的代码,上次还编写了三子棋游戏的代码,这次我将编写一个基础版的扫雷游戏。 首先,创建三个文件,两个源文件,一个头文件&…...
HTML学习:图片格式——超链接
一、图片格式 1.jpg格式 概述:扩展名为.jpg 或.jpeg ,是一种有损的压缩格式(把肉眼不容易观察出来的细节丢弃了)。 主要特点:支持的颜色丰富、占用空间较小、不支持透明背景、不支持动态图。 使用场景:对图片细节没有极高要求的场景,例如:网站的产品…...
工业级5g路由器使用案例(5g智慧安防解决方案)
项目背景: 现代化智慧安防需要满足远程可视化监控、设备联网管理、数据加密传输等多重需求,对通信网络的带宽、时延、安全性等提出了很高要求。业内急需一款高可靠、高性能、易管理的通信网关设备,来确保安防系统的顺利运行。 安装部署: SR800-D路由器采用紧凑型全金属机箱…...
sentinel熔断降级
熔断降级 Slot 责任链上的最后一环:熔断降级 DegradeSlot,熔断降级作为保护系统的一种强大手段,可以根据慢调用、异常比例和异常数进行熔断,并自定义持续时间以实现系统保护 规则配置 规则类中属性解析 与控制面板对应 // 其中资源名称在 AbstractRule 里。 pu…...
Redis的安装和部署教程(Windows环境)
一、安装Redis服务 1、下载Redis压缩包 以下这个是我网盘里面的(这个是v8.0版本的,支持导入.rdb数据文件) 链接:百度网盘 请输入提取码 提取码:x0f1 --来自百度网盘超级会员V5的分享 2、解压到文件夹 将下载的压缩…...
MNN Session::resize 之流水线编码(五)
系列文章目录 MNN createFromBuffer(一) MNN createRuntime(二) MNN createSession 之 Schedule(三) MNN createSession 之创建流水线后端(四) MNN Session::resize 之流水线编码&am…...
2. IS-IS 基础实验
2.1 IS-IS 配置实验 2.1.1 实验介绍 2.1.1.1 学习目标 1. 实现 IS-IS 协议基本配置 2. 实现 IS-IS 协议 DIS 优先级修改 3. 实现 IS-IS 协议网络类型修改 4. 实现 IS-IS 协议外部路由引入 5. 实现 IS-IS 接口 cost 修改 6. 实现 IS-IS 路由渗透配置 2.1.1.2 实验组网介…...
Rust 并行库 crossbeam 的 Channel 示例
示例1 一个不完整的示例: let (tx, rx) channel::unbounded::<Task>(); let mut handlers vec![];for _ in 0..number {let rx rx.clone();let handle thread::spawn(move || {while let Some(task) rx.recv() {task.call_box();}});handlers.push(han…...
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级的理解
一:缓存雪崩 我们可以简单的理解为:由于原有缓存失效,新缓存未到期间 (例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了ÿ…...
springcloud gateway
一、 predicate : 就是你定义一些规则,如果满足了这些规则,就去找到对应的路由。 对于strip 二、自定义过略器和全局过滤器 约定大于配置,后缀不变,只改前缀 sentinel持久化 三、sentinel quick-start | Sentinel 信号量虽然简…...
JAVA八股day1
遇到的问题 相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小为什么说是几乎所有对象实例都存在于堆中呢?静态变量和成员变量、成员变量和局部变量的区别为什么浮点数运算的时候会有精度丢失的风险?如何解…...
探索拓展坞的奥秘:提升电脑接口的无限可能
在数字化时代的浪潮中,电脑已成为我们日常生活和工作中不可或缺的一部分。然而,随着外接设备的日益增多,电脑接口的数量和类型往往无法满足我们的需求。这时,拓展坞便应运而生,以其强大的扩展能力和便捷的使用方式&…...
Linux中执行脚本报错(脚本乱码问题)
主要原因是在windows中编译文件格式导致 linux下解决: 方案一: Linux下打开shell文件,用vi/vim命令打开脚本文件,输入“:set fileformatunix”,回车,保存退出。 方案二: yum install -y dos2uni…...
el-table按钮获取当前行元素
el-table按钮获取当前行元素 vue2 <el-table-column label"操作" width"240px"><template slot-scope"scope"><el-button size"mini" click"toItem(scope.row)">用户详情</el-button><el-butto…...
MySQL数据导入的方式介绍
MySQL数据库中的数据导入是一个常见操作,它涉及将数据从外部源转移到MySQL数据库表中。在本教程中,我们将探讨几种常见的数据导入方式,包括它们的特点、使用场景以及简单的示例。 1. 命令行导入 使用MySQL命令行工具mysql是导入数据的…...
构建部署_Docker常用命令
构建部署_Docker常见命令 启动命令镜像命令容器命令 启动命令 启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:systemctl restart docker 查看docker状态:systemctl status docker 开机启动&…...
Spring Boot Actuator介绍
大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉,会有未授权访问漏洞 include: "*" 他就是Actuator! 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…...
数据库中DQL、DML、DDL、DCL的概念与区别
目录 DQL (Data Query Language) DML (Data Manipulation Language) DDL (Data Definition Language) DCL (Data Control Language) 数据库语言可以根据其功能被分为几个不同的类别:DQL(数据查询语言)、DML(数据操纵语言&…...
MacOS---设置Java环境变量
介绍 在MacOS系统配置Java环境变量。 操作步骤 第一步:打开.bash_profile文件 vim ~/.bash_profile第二步:添加或修改配置 如果是第一次配置需要添加配置如果是已经配置过想更换其他版本需要修改配置 在文件末尾添加或修改下面的配置 export JAVA…...
使用 Boot Camp 助理查明您的 Mac 需不需要 Windows 安装介质
使用 Boot Camp 助理查明您的 Mac 需不需要 Windows 安装介质 当前的 Mac 机型无需介质即可安装 Windows,也就是说,您不需要用到外置驱动器。较早的 Mac 机型需要用到 USB 驱动器或光盘驱动器。使用 Boot Camp 助理可查明您需要用到什么。 Boot Camp 助…...
KY105 整除问题(用Java实现)
描述 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k1)整除。 输入描述: 两个整数n(2<n<1000),a(2<a<1000) 输出描述: 一个整数. 示例1 输入: 6 10输出: 1代…...
C++ 接口的实现,及作用通俗理解方式
接口 C中的接口,一般就是指抽象类,是一种用来描述类对外提供的操作、方法或功能的集合——注意,一般只是描述(声明),而不对这些方法或功能进行定义实现,通常在类的继承或多态中作为基类使用&am…...
TypeScript:typescript的安装与运行
TypeScript:typescript的安装与运行 1 安装方式 -g全局安装TypeScript: npm install -g typescript2 运行方式 (1)ts编译成js,使用node命令运行js文件 打开vscode,进入ts文件所在目录下并打开终端term…...
【代码随想录Day27】
Day 27 回溯算法03 今日任务 组合总和 40.组合总和II131.分割回文串 代码实现 组合总和,直接套模板可解 public List<List<Integer>> combinationSum(int[] candidates, int target) {backtracking(candidates, target, 0);return result;}void back…...
【一】【单片机】有关LED的实验
点亮一个LED灯 根据LED模块原理图,我们可以知道,通过控制P20、P21...P27这八个位置的高低电平,可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平,如果P20接的是低电平,那么D1就可以亮。如果P20接的是高电平,…...
面试算法-49-缺失的第一个正数
题目 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 [1,2] 中的数字都…...
论文笔记:液体管道泄漏综合检测与定位模型
0 简介 An integrated detection and location model for leakages in liquid pipelines 1 摘要 许多液体,如水和油,都是通过管道运输的,在管道中可能发生泄漏,造成能源浪费、环境污染和对人类健康的威胁。本文描述了一种集成的…...
做网站手机版/百度推广有哪些售后服务
2019 CCF大学生计算机系统与程序设计竞赛(Collegiate Computer Systems& Programming Contest, CCF CCSP)总决赛于10月16日在苏州市职业大学正式拉开战幕,来自浙江大学、同济大学等全国75所高校的461位选手从9点开始,到21点进行了一场历时12个小时的…...
防腐木用什么名字做网站/网络营销专业课程
计算机汇编语言入门微处理器体系结构基本微处理器设计由时钟同步所有CPU 操作控制器(CU) 协调各执行步骤的顺序运算器(ALU) 进行算术运算和逐位处理时钟同步所有CPU 和总线操作机器(时钟)周期是完成单个操作的时间时钟用来触发事件指令执行周期取指令译码取操作数执行指令输出存…...
中华人民共和国建设部官方网站/经典模板网站建设
大多数情况下,为了保证对外服务的安全性,我们在服务端实现的为服务接口时往往都会有一定的权限校验机制,比如对用户登录状态的校验等;同时为了防止客户端在发起请求时被篡改等安全方面的考虑,还会有一些签名校验的机制…...
猪八戒网仿照哪个网站做的/360营销平台
Memcache的客户端操作一般都只提供了get,set,stats等简单的操作,但是在某些特殊时候,我们可能需要遍历Memcache的数据,Memcache自带的命令是不能实现的,我们需要通过程序来实现。下面看看PHP是如何遍历Memcache数据的。PHP遍历Mem…...
wordpress 锚文点/贺贵江seo教程
题意:丑数就是质因子只有2,3,5 ,7,的数,另外1也是丑数。求第n(1<n<5842)个丑数,n0,结束。 思路:根据丑数的定义,丑数应该是另一个丑数乘以2、3、5或者7…...
微信网站建设报价/网页设计需要学什么软件
本文首发于烂泥行天下。在安装、管理和使用mysql过程中,你是不是需要记忆很多的mysql命令。而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘记具体的用法。其实mysql的帮助信息,已经给我们提供很全…...