第一步 导入依赖

<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.3.1</version>
</dependency>

第二步截图代码

import lombok.extern.slf4j.Slf4j;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.springframework.stereotype.Component;import java.awt.*;
import java.awt.image.BufferedImage;/*** @author 邢虎* @date 2022年10月13日*/
@Slf4j
@Component
public class ScreenShotUtil {/*** 通过Javacv的方式获取视频截图** @param url 视频文件路径* @return BufferedImage*/public static BufferedImage getScreenshot(String url) throws Exception{FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(url);try {log.debug("截取视频截图开始:" + System.currentTimeMillis());grabber.start();//设置视频截取帧(默认取第一帧)Frame frame = grabber.grabImage();Java2DFrameConverter converter = new Java2DFrameConverter();//绘制图片BufferedImage image = converter.getBufferedImage(frame);return image;} catch (Exception e) {log.error("视频截图失败", e.getMessage());return null;}finally {grabber.stop();grabber.close();}}/*** 根据视频旋转度来调整图片** @param src   BufferedImage* @param angel angel 视频旋转度* @return BufferedImage*/public static BufferedImage rotate(BufferedImage src, int angel) {int src_width = src.getWidth(null);int src_height = src.getHeight(null);int type = src.getColorModel().getTransparency();Rectangle rect_des = calcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);BufferedImage bi = new BufferedImage(rect_des.width, rect_des.height, type);Graphics2D g2 = bi.createGraphics();g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2);g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);g2.drawImage(src, 0, 0, null);g2.dispose();return bi;}/*** 计算图片旋转大小** @param src   Rectangle* @param angel int* @return Rectangle*/public static Rectangle calcRotatedSize(Rectangle src, int angel) {if (angel >= 90) {if (angel / 90 % 2 == 1) {int temp = src.height;src.height = src.width;src.width = temp;}angel = angel % 90;}double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;double angel_dalta_width = Math.atan((double) src.height / src.width);double angel_dalta_height = Math.atan((double) src.width / src.height);int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_width));int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_height));int des_width = src.width + len_dalta_width * 2;int des_height = src.height + len_dalta_height * 2;return new java.awt.Rectangle(new Dimension(des_width, des_height));}}

可以参考:https://blog.csdn.net/qq_44695727/article/details/107208198?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1-107208198-blog-114468560.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.2&utm_relevant_index=3

视频截图方法 javacv相关推荐

  1. Android 视频截图方法

    转自:http://blog.csdn.net/matrix_laboratory/article/details/43267907 1. 前言 本文讨论的是获取视频在某个时间点的图像, 而非屏幕截图 ...

  2. js截屏 video_jQuery+html5实现视频截图方法

    Capture js部分: (function() { "use strict"; var video, $output; var scale = 0.25; var initia ...

  3. java ffmpeg视频截图_Java实现对视频进行截图的方法【附ffmpeg下载】

    本文实例讲述了Java实现对视频进行截图的方法.分享给大家供大家参考,具体如下: 之前介绍过Java使用ffmpeg进行视频转换,这里演示一下ffmpeg进行视频截图的方法. 具体代码如下: impo ...

  4. C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器)

    C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器) (本文最新代码已上传到GitHub,地址在(https://github.com/bitzhuwei/Clipboar ...

  5. js截屏 video_canvas与html5实现视频截图功能

    这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...

  6. 阿里云Aliplayer高级功能介绍(一):视频截图

    基本介绍 H5 Video是不提供截图的API的, 视频截图需要借助Canvas,通过Canvas提供的drawImage方法,把Video的当前画面渲染到画布上, 最终通过toDataURL方法可以 ...

  7. ASP.NET 视频截图功能的C#代码

    前公司在制作播客系统(Web程序)中,用到从视频截图功能.下边是截图CatchImg方法,可从大多数的视频文件中截图成功,大家可测试;如果截图不成功,大多是因为视频本身的问题,如编码标准或加了密.但从 ...

  8. ffmpeg 截图 java_Java Web 中使用ffmpeg实现视频转码、视频截图

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  9. win10 6种截图方法 简介

    目录 方法1.快捷键PrintScreen 方法2.快捷键Win+PrintScreen 方法3.快捷键Win+Alt+PrintScreen 方法4.快捷键Win+Shift+S 方法5.快捷键Wi ...

最新文章

  1. 显示串中只出现一次的字符.
  2. 如何改变数据库存储引擎
  3. dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  4. Python:值传递,引用传递?不存在的,是赋值传递
  5. php拉取公众号所有关注的人,微信公众平台开发获取关注者列表
  6. 使用SoapUI调用安全WCF SOAP服务–第1部分,该服务
  7. Debian、Ubuntu源码编译制作安装包(一)
  8. linux启动服务需要ubb文件吗,如何开启tuxedo的snmp监控
  9. cas server + cas client 单点登录 原理介绍
  10. 跟随我在oracle学习php(42)
  11. ubuntu 中安装 Redis
  12. Eclipse设置中文及取消
  13. matlab 画短时平均幅度谱
  14. ES07--性能调优03(全面考量)
  15. Android 桌面小组件 AppWidgetProvider
  16. 《Linux内核设计与实现》勘误
  17. 计算机网络辩论赛主持词,辩论赛主持词(精选)
  18. matlab mafdr,matlab FDR校正
  19. QuickBI和DataV 1
  20. 运放脉冲宽度放大_下一代Ka波段雷达系统应用脉冲行波管放大器(twta),工作频率为34至36GHz,峰值功率为1000瓦,占空比为10%。...

热门文章

  1. 言简意赅,盘点知识图谱在各领域的应用
  2. 明尼苏达多相个性测验(转载)
  3. 【宇麦科技】群晖NAS变身时光机,轻松修改你Mac的时间线
  4. java ee核心设计思想,JavaEE核心设计思想是什么 (5.0分)
  5. layui弹出输入框
  6. python实现两个txt文件提取不同的数据
  7. 【python+情人节】玩个俄罗斯方块都是爱你的形状——三、自动拼图
  8. mysql哨兵机制_50-哨兵机制和持久化
  9. 怎样能点亮QQ面板上更多的图标(要免费的哦)
  10. IOS-resign keyboard 新法儿