视频生成缩略图

server/2024/12/19 15:57:32/

文章目录

    • 视频生成缩略图
      • 使用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.ppmy.cn/server/151476.html

相关文章

《向量数据库指南》——Milvus Cloud 2.5:Sparse-BM25引领全文检索新时代

Milvus Cloud BM25:重塑全文检索的未来 在最新的Milvus Cloud 2.5版本中,我们自豪地引入了“全新”的全文检索能力,这一创新不仅巩固了Milvus Cloud在向量数据库领域的领先地位,更为用户提供了前所未有的灵活性和效率。作为大禹智库的向量数据库高级研究员,以及《向量数据…

低延迟!实时处理!中软高科AI边缘服务器,解决边缘计算多样化需求!

根据相关统计&#xff0c;随着物联网的发展和5G技术的普及&#xff0c;到2025年&#xff0c;全球物联网设备连接数将达到1000亿&#xff0c;海量的计算数据使得传输到云端再处理的云计算方式显得更捉襟见肘。拥有低延迟、实时处理、可扩展性和更高安全性的边缘计算应运而生&…

使用k6进行kafka负载测试

1.安装环境 kafka环境 参考Docker搭建kafka环境-CSDN博客 xk6-kafka环境 ./xk6 build --with github.com/mostafa/xk6-kafkalatest 查看安装情况 2.编写脚本 test_kafka.js // Either import the module object import * as kafka from "k6/x/kafka";// Or in…

【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案

错误日志 [ 8754.700227] usb 2-3: new full-speed USB device number 3 using xhci_hcd [ 8754.867389] usb 2-3: New USB device found, idVendor0e0f, idProduct0002, bcdDevice 1.00 [ 8754.867421] usb 2-3: New USB device strings: Mfr1, Product2, SerialNumber0 [ 87…

Pikachu-XXE靶场(注入攻击)

1.攻击测试 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe "a" > ]> <foo>&xxe;</foo> 2.查看文件 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///E:/ph…

前端的Python应用指南(一):快速构建 Web 服务器 - Flask vs Node.js 对比

随着前端开发技术的不断发展&#xff0c;前端开发者的技术栈也在不断扩展。如今&#xff0c;前端开发者不仅要掌握 HTML、CSS、JavaScript&#xff0c;还要掌握后端技术&#xff0c;成为全栈开发者。而在后端技术的选择上&#xff0c;Python 和 Node.js 是两种非常流行的选择。…

UE5 猎户座漂浮小岛 10 技能 火球

1. 火球 1.1. 添加输入与动画 技能映射 设置动画蓝图 蓝图 1.2. 火球技能蓝图 1.3. 发射蓝图 右手释放火球 class spawn actor socket location 设置火球对玩家不造成伤害 火球飞出 设置重力为0 1.4. 生命周期 1.5. 添加可被伤害的NPC 新建父类、子类NPC蓝图 编辑父类蓝图…

Gin- Cookie\Session相关

Cookie&#xff0c;Session是什么&#xff1f; Cookie直译小饼干&#xff0c;是一些数据信息&#xff0c;类似于小型文本文件&#xff0c;存储在浏览器上。Cookie是进行第一次登录之后&#xff0c;由服务器创建后返回给浏览器的。之后&#xff0c;每当浏览器再次向同一服务器发…