Java-截取视频资料中的某一帧作为缩略图_java 通过视频的字节码流获取第一帧图片当作视频缩略图

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。


最近项目中有一个需求,就是要实现视频资料的收藏功能,当时想了想,收藏记录实现并不是很难,但是想展现出视频的缩略图,就要想想其他办法了,所以就想到了截取视频资料中的某一帧作为缩略图,我没有选择截取第一帧,选择的是第五帧,因为第一帧可能没有内容。

基础知识

JavaCV:功能很强大,封装了很多很视频、图片相关的内容。

JavaCV 是一款基于JavaCPP

调用方式(JNI的一层封装),由多种开源计算机视觉库组成的包装库,封装了包含FFmpegOpenCVtensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在内的计算机视觉领域的常用库和实用程序类。

JavaCV基于Apache License Version 2.0协议和GPLv2两种协议 ,

JavaCV支持Windows、Linux、MacOS,Android、IOS在内的Java平台上调用这些接口。


FFmpegFrameGrabber

FFmpegFrameGrabber可以理解为解码器,也可以理解为帧收集器,可以获取视频资料的各种详细信息,时长,宽高,帧等,很强大。


BufferedImage,ImageIO

BufferedImage类是Image的一个子类,是一个带缓冲区图像类,主要作用是将一幅图片加载到内存中。

ImageIO提供read()和write()静态方法,读写照片

将图片加载到内存中

 //需要是一个本地文件
 String imgPath = "‪C:\Users\Administrator\Videos\999.jpg";  
 BufferedImage image = ImageIO.read(new FileInputStream(imgPath));

将内存中的图片写到本地

BufferedImage bi=~某个值
File outputfile  = new File("save.png");
//参数 
// bi:要写入的RenderedImage 
// png:格式类型
// outputfile:要写入的OutputStream 
ImageIO.write(bi,"png",outputfile);  


MultipartFile

MultipartFile在上一篇文章中介绍过了。[Java文件上传实例并解决跨域问题https://blog.csdn.net/promsing/article/details/120089365https://blog.csdn.net/promsing/article/details/120089365](https://bbs.csdn.net/topics/618540462)

具体实现

引入依赖

本功能使用的Jar包是javacv,javacv-platform。因为这个包有150多M,很多依赖项都用不到,所以,将不需要的移除取出。

<!--start:视频获取某一帧的图片-->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>1.4.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flycapture</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libdc1394</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect2</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>librealsense</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>videoinput</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tesseract</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>leptonica</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flandmark</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>artoolkitplus</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.4.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flycapture-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libdc1394-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect2-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>librealsense-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>videoinput-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tesseract-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>leptonica-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flandmark-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>artoolkitplus-platform</artifactId>


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值