Java获取视频封面图,利用FFmpegFrameGrabber获取视频封面图

这篇具有很好参考价值的文章主要介绍了Java获取视频封面图,利用FFmpegFrameGrabber获取视频封面图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

依赖

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

传入视频流获取图片byte

    /**
     * 获取视频截图
     *
     * @param frameNumber 视频的指定帧数
     * @param vName       视频名称
     * @param videoBytes  视频字节
     * @return 图片byte数组
     */
    private byte[] getCoverImageBytes(Integer frameNumber, String vName, byte[] videoBytes) {
        Double videoSize = DoubleUtil.getDouble2(videoBytes.length / 1024.0 / 1024.0);
        long timeMillis = System.currentTimeMillis();
        logger.info("截取视频截图开始 视频名称:{} 视频大小:{}MB", vName, videoSize);
        try (ByteArrayInputStream is = new ByteArrayInputStream(videoBytes);
             FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(is);
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             Java2DFrameConverter converter = new Java2DFrameConverter()) {
            grabber.start();
            //视频的最大帧数,减少10帧是因为最后几帧会出现获取不到图片的情况
            int ftp = grabber.getLengthInFrames() - 10;
            frameNumber = ftp < frameNumber ? ftp : frameNumber;
            //设置视频指定帧数
            grabber.setFrameNumber(frameNumber);
            //设置视频截取帧(默认取第一帧)
            Frame frame = grabber.grabImage();
            //绘制图片
            BufferedImage bi = converter.getBufferedImage(frame);
            ImageIO.write(bi, "jpg", os);
            grabber.stop();
            logger.info("截取视频截图结束,处理时间: {}秒", (System.currentTimeMillis() - timeMillis) / 1000);
            return os.toByteArray();
        } catch (FrameGrabber.Exception e) {
            logger.error("FrameGrabber.Exception :{}", e.getMessage());
        } catch (IOException e) {
            logger.error("IOException :{}", e.getMessage());
        }
        logger.info("获取视频封面图失败 vName:{}", vName);
        return null;
    }

传入视频流获取图片文件

/**
     * 传入视频文件,生成对应的封面图文件
     *
     * @param frameNumber 帧数
     * @param file        视频文件
     */
    private void coverImage(Integer frameNumber, File file) {
        String vName = file.getName();
        Double videoSize = DoubleUtil.getDouble2(file.length() / 1024.0 / 1024.0);
        long timeMillis = System.currentTimeMillis();
        logger.info("截取视频截图开始 视频名称:{} 视频大小:{}MB", vName, videoSize);
        try (FileInputStream is = new FileInputStream(file);
             FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(is);
             Java2DFrameConverter converter = new Java2DFrameConverter()) {
            grabber.start();
            //视频的最大帧数,减少10帧是因为最后几帧会出现获取不到图片的情况
            int ftp = grabber.getLengthInFrames() - 10;
            frameNumber = ftp < frameNumber ? ftp : frameNumber;
            //设置视频指定帧数
            grabber.setFrameNumber(frameNumber);
            // 图片名称
            String targetFileName = vName.substring(0, vName.lastIndexOf(".")) + "_vc.jpg";
            logger.info("图片名称:{}", targetFileName);
            File imageFile = new File("D:\\my_work\\" + targetFileName);
            //设置视频截取帧(默认取第一帧)
            Frame frame = grabber.grabImage();
            //绘制图片
            BufferedImage bi = converter.getBufferedImage(frame);
            ImageIO.write(bi, "jpg", imageFile);
            grabber.stop();
            logger.info("截取视频截图结束,处理时间: {}秒", (System.currentTimeMillis() - timeMillis) / 1000);
        } catch (FrameGrabber.Exception e) {
            logger.error("FrameGrabber.Exception :{}", e.getMessage());
        } catch (IOException e) {
            logger.error("IOException :{}", e.getMessage());
        }

java截取视频的封面图,Java,Java IO,java,音视频文章来源地址https://www.toymoban.com/news/detail-861453.html

到了这里,关于Java获取视频封面图,利用FFmpegFrameGrabber获取视频封面图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2实现截取视频第一帧图像作为开始封面

    要在Vue中实现截取视频的第一帧作为封面,你可以使用HTML5的元素和Canvas API来实现。loadeddata事件监听必须在视频加载完成后执行,然后通过Canvas的drawImage方法将视频帧绘制到Canvas上,并使用toDataURL方法将Canvas内容转换为Base64编码的图像数据URL 在你的Vue组件中,使用元素来加

    2024年02月12日
    浏览(8)
  • uni-app从后端返回的mp4链接视频截取一帧为封面

    一、需求: 后端返回包含视频链接的数组对象,格式如下: 从上面的mp4视频中截取一帧设置为封面,如下图,下面的封面图从视频中截取而来。 二、代码实现: 按照上面的代码,其中posterList就是对应的每一个视频的封面base64数组,一切看起来都挺好,在H5正常运行,但是在

    2024年02月14日
    浏览(10)
  • Java实现截取视频第一帧

    目录 前言 一、通过Java借助第三方库实现 1.引用ffmpeg 使用maven,导入pom依赖:  工具类 2.引用jcodec 二、使用第三方存储自带的方法实现(如阿里云OSS、华为云OBS) 在实际项目中,会遇到上传视频后,需要截取视频的首帧或指定帧为图片,作为展示使用的需求。这个需求本身

    2024年02月06日
    浏览(16)
  • uniapp使用视频地址获取视频封面

    很多时候我们都需要使用视频的第一帧当作视频的封面,今天我们从uni-app的安卓app这个环境来实现下这个需求。文中需要你对uniapp的renderjs有一定了解,可以先看我的这篇文章初识renderjs uniapp 安卓APP端(ios未测试) 方法:使用renderjs实现对DOM元素的操作,创建video元素获取视

    2024年02月13日
    浏览(14)
  • 利用PowerShell和Mkvtoolnix批量去除视频封面

    PowerShell Version : 5.1.22621.2506 Get-ChildItem \\\"*.mp4\\\" 筛选出当前目录下所有后缀为 .mp4 的文件 foreach 遍历所有文件 Start-Process 开启新的进程执行 \\\"C:Program FilesMKVToolNixmkvmerge.exe\\\" 可执行文件 -ArgumentList 添加可执行文件参数 $file.BaseName 获取文件的无后缀名称 其余参数为 Mkvtoolnix 的命令

    2024年01月16日
    浏览(10)
  • canvas获取视频封面及个别电脑获取到空图

    PS:获取封面前提是浏览器要支持视频编码格式,不支持就不能通过该方式获取 读取视频封面: base64转file: 下载:

    2024年02月17日
    浏览(13)
  • vue 获取上传视频的第一帧做为视频封面

    上一篇文章记录了vue上传视频,接下来,需要在上传成功后截取视频第一帧做为视频封面。 具体实现如下: 上传视频之后,在成功回调函数中拿到视频地址, video.src=url ,然后,使用canvas截取图片。 截取视频第一帧使用的是canvas,相关步骤如下: canvas 可以用来截取图片。

    2024年02月03日
    浏览(17)
  • uniapp 上传视频到阿里云之后回显视频获取视频封面

    1.initial-time Number 指定视频初始播放位置,单位为秒(s)。 没什么卵用 2.使用 uni.createVideoContext(“myVideo”, this).seek(number)。 没什么卵用 t_1000 等于截取视频第 1秒作为封面

    2024年04月11日
    浏览(12)
  • JavaScrip获取视频第一帧作为封面图

    在JavaScript中,你可以使用HTML5的video元素来加载视频,然后使用Canvas来捕获视频的第一帧作为封面图。以下是一个简单的例子: 请注意,这个例子中使用了loadeddata事件,该事件在视频的第一帧加载完成后触发。这里创建了一个Canvas元素,通过drawImage方法将视频的第一帧绘制在

    2024年01月16日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包