截取视频第一帧当做封面

看了好多处理视频的框架 比如ffmpeg,很多都需要依赖安装第三方插件,比较麻烦,找到一个内嵌进去不需要额外安装的:jcodec

一 首先代码中添加依赖

java 复制代码
    <!--视频生成预览图用-->
        <dependency>
            <groupId>org.jcodec</groupId>
            <artifactId>jcodec</artifactId>
            <version>0.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.jcodec</groupId>
            <artifactId>jcodec-javase</artifactId>
            <version>0.2.3</version>
        </dependency>

二 截取业务逻辑代码编写

生成的预览图你可以输出到一个地址,这里我是转换成了base64,然后存储到了数据库中,前台拿到也可以直接用。

java 复制代码
    /**
     * 截取图片第一帧作为预览图
     *
     * @param path
     * @param suffix
     * @return
     */
    private String generatorPreviewImg(String path,String suffix){
        ByteArrayInputStream byteArrayInputStream;
        try {
            File videoFile = new File(path);
            // 获取视频的第一帧作为预览图
            Picture frame = FrameGrab.getFrameFromFile(videoFile, 1);
            // 将视频帧转换为BufferedImage
            BufferedImage image = AWTUtil.toBufferedImage(frame);
            // 生成的预览图
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            ImageIO.write(image, "jpg", outputStream);
            byteArrayInputStream = new ByteArrayInputStream(outputStream.toByteArray());
        }catch (IOException | JCodecException e){
            throw new RuntimeException(e);
        }
        return getBase64(byteArrayInputStream,suffix);
    }
java 复制代码
    /**
     * 将图片转为base64
     *
     * @param in
     * @param suffix
     * @return
     */
    private String getBase64(InputStream in,String suffix){
        // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        byte[] buffer = null;
        // 读取图片字节数组
        try (InputStream inputStream =  in) {
            buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String base64 = Base64.encodeBase64String(buffer);
        // 拼接前面的格式 data:image/jpeg;base64,/9j/4AAQSkxxxxxxx
        return "data:image/" + suffix + ";base64," + base64;
    }
相关推荐
零匠学堂202511 小时前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
Silicore_Emma11 小时前
芯谷科技—D8227 双通道音频功率放大集成电路产品简介与应用推广
单片机·音视频·功率放大器·芯谷科技·便携式音频设备·双通道音频·车载音频系统
生活爱好者!11 小时前
【影视项目】NAS 部署稳定视频订阅源咪咕
服务器·网络·docker·容器·音视频
智算菩萨13 小时前
2025年Sora类视频生成模型架构剖析:时空编码与扩散机制
架构·音视频
Hello.Reader14 小时前
用纯 Go 实现一个 AES-128 加密 m3u8 视频下载器(不依赖 ffmpeg)
golang·ffmpeg·音视频·m3u8
EasyCVR14 小时前
安防监控EasyCVR视频汇聚平台RTSP流播放异常的原因排查
音视频
DisonTangor15 小时前
Step-Audio-R1 首个成功实现测试时计算扩展的音频语言模型
人工智能·语言模型·开源·aigc·音视频
音视频牛哥16 小时前
从低延迟到高可用:RTMP与 HTTP/HTTPS-FLV在App播放体系中的角色重构
人工智能·音视频·音视频开发·http-flv播放器·https-flv播放器·ws-flv播放器·wss-flv播放器
Hommy8817 小时前
如何利用剪映小助手实现视频批量剪辑?
aigc·音视频·批量剪辑·剪映
EasyGBS17 小时前
EasyGBS新版本(v3.7.168)发布!视频能力再度升级!
音视频