当前位置: 首页 > news >正文

视频生成缩略图


文章目录

    • 视频生成缩略图
      • 使用ffmpeg


视频生成缩略图

最近有个需求,视频上传之后在列表和详情页需要展示缩略图

使用ffmpeg

首先引入jar包

<dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.4.3</version>
</dependency>
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.3</version>
</dependency>
<dependency><groupId>org.bytedeco.javacpp-presets</groupId><artifactId>ffmpeg-platform</artifactId><version>4.0.2-1.4.3</version>
</dependency>

代码如下

public String getThumbnails(String videoFilePath){String path = "/Users/zhanghe/Desktop/pic/";String fileName =  videoFilePath.substring(videoFilePath.lastIndexOf("/") + 1, videoFilePath.lastIndexOf("."))+"_thumb.jpg";String filePath = StringUtils.join(path, fileName);File targetFile = new File(filePath);try {FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videoFilePath);ff.start();// 视频总帧数int videoLength = ff.getLengthInFrames();org.bytedeco.javacv.Frame f  = null;int i = 0;while (i < videoLength) {// 过滤前20帧,因为前20帧可能是全黑的// 这里看需求,也可以直接根据帧数取图片f = ff.grabFrame();if (i > 20 && f.image != null) {break;}i++;}int owidth = f.imageWidth;int oheight = f.imageHeight;// 对截取的帧进行等比例缩放int width = 800;int height = (int) (((double) width / owidth) * oheight);Java2DFrameConverter converter = new Java2DFrameConverter();BufferedImage fecthedImage = converter.getBufferedImage(f);BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);bi.getGraphics().drawImage(fecthedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),0, 0, null);ImageIO.write(bi, "jpg", targetFile);ff.stop();System.out.println(targetFile.getPath());return targetFile.getPath();} catch (IOException e) {e.printStackTrace();}return "";}

参考文献

  • 视频生成缩略图
http://www.lryc.cn/news/506849.html

相关文章:

  • 页面无滚动条,里面div各自有滚动条
  • DIY-ESP8266移动PM2.5传感器-带屏幕-APP
  • 【Canvas与技法】椭圆画法
  • 多核CPU调度是咋搞的?
  • 【Jenkins】pipeline 的基础语法以及快速构建一个 jenkinsfile
  • 工作中如何提高技术实力?
  • 画图,matlab,
  • Java虚拟机类加载(解析阶段)[虚方法表的生成以及其存在意义]
  • 电子元器件与电路之-MOS管的介绍和作用
  • python实现word转html
  • nginx模块ngx-fancyindex 隐藏标题中的 / 和遇到的坑
  • 第二十四天 循环神经网络(RNN)LSTM与GRU
  • RocketMQ如何保证消息顺序?
  • LabVIEW实现GSM/GPRS通信
  • 关于如何做技术文档
  • 基于多尺度动态卷积的图像分类
  • RK3576 介绍
  • 如何评估并持续优化AI呼出机器人的使用效果
  • Ubuntu上如何部署Nginx?
  • 制造业4.0:AI与机器人如何重塑生产线
  • ChatGPT与领域特定语言的集成
  • 【记录50】uniapp安装uview插件,样式引入失败分析及解决
  • 【WPF】把DockPanel的内容生成图像
  • 买卖股票的最佳时机 - 合集
  • lshw学习——简单介绍
  • 深入理解Kafka:核心设计与实践原理读书笔记
  • OnOn-WebSsh (昂~昂~轻量级WebSSH) 可实现 网页 中的 ssh 客户端操作,支持多用户多线程操作 ssh 持久化
  • LDP+LBP代码解析及应用场景分析
  • 51c视觉~合集33
  • element plus的table组件,点击table的数据是,会出现一个黑色边框