资讯专栏INFORMATION COLUMN

java 获取视频第一帧 | Java工具类

klivitamJ / 1227人阅读

摘要:目录前言前言环境依赖环境依赖代码代码总结总结前言本文提供提取视频文件的第一帧工具类。其中包括从下载视频的策略。说明一下该参数表示输出的图片只有张。

目录

前言

环境依赖

代码

总结


前言

本文提供提取mp4视频文件的第一帧java工具类。其中包括从url下载视频的策略。

环境依赖

Maven环境依赖

                    org.bytedeco            javacv-platform            1.5.5                            cn.hutool            hutool-all            5.5.2        

ffmpeg环境依赖

可以参照我之前写的去安装部署一下:windows ffmpeg安装部署_阿良的博客-CSDN博客

代码

不废话,上工具类。

package ai.guiji.csdn.tools;import cn.hutool.core.util.IdUtil;import cn.hutool.http.HttpUtil;import org.bytedeco.javacpp.Loader;import java.io.IOException;import java.util.Optional;/** @Author huyi @Date 2021/11/11 11:08 @Description: 提取视频第一帧 */public class ExtractVideoFirstFrameUtil {  /**   * 提取主方法   *   * @param path MP4视频路径   * @param tmpDir 临时目录   * @return 视频第一帧   * @throws Exception 异常   */  public static String extract(String path, String tmpDir) throws Exception {    String mp4Path;    if (path.startsWith("http")) {      mp4Path = tmpDir + "/" + IdUtil.simpleUUID() + ".mp4";      HttpUtil.downloadFile(path, mp4Path);    } else {      mp4Path = path;    }    return ffmpegExtractImage(mp4Path, tmpDir + "/" + IdUtil.simpleUUID() + ".jpg")        .orElseThrow(() -> new Exception("提取失败"));  }  /**   * 提取视频第一帧图片   *   * @param mp4Path 视频地址   * @param picPath 图片地址   * @return 提取的图片地址   */  public static Optional ffmpegExtractImage(String mp4Path, String picPath) {    String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);    ProcessBuilder extractBuilder =        new ProcessBuilder(            ffmpeg, "-i", mp4Path, "-f", "image2", "-ss", "1","-frames:v", "1", picPath);    try {      extractBuilder.inheritIO().start().waitFor();    } catch (InterruptedException | IOException e) {      e.printStackTrace();      return Optional.empty();    }    // 返回图片文件路径    return Optional.of(picPath);  }}

验证一下

  public static void main(String[] args) throws Exception {    //    System.out.println(extract("C://Users//huyi//Desktop//test1.mp4",    // "C://Users//huyi//Desktop"));    System.out.println(        extract("https://xx.xx.xx.xx/test2.mp4", "C://Users//huyi//Desktop"));  }

代码说明 

1、ffmpeg的命令里面我加了一个参数 "-frames:v 1",不加虽然报错但是图片还是正常输出。说明一下该参数表示输出的图片只有1张。如不加,报错如下:

总结

可以按照需求调整入参。

分享

        书上说,天下没有不散之宴席。不要怕,书上还说了,人生何处不相逢。——《雪中悍刀行》

如果本文对你有用的话,请不要吝啬你的赞,谢谢!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123158.html

相关文章

  • python 获取MP4视频一帧 | Python工具

    摘要:目录前言前言环境部署环境部署代码代码总结总结前言获取视频第一帧图片,的视频路径支持链接。验证一下,验证代码如下总结没啥好总结的,我也做了个工具类,给自己做个记忆点。雪中悍刀行如果本文对你有帮助的话,请不要吝啬你的赞,谢谢 目录 前言 环境部署 代码 总结  前言 获取MP4视频第一帧图片,...

    Scorpion 评论0 收藏0
  • 高仿腾讯QQ Xplan(X计划)的H5页面(2):动画控制

    摘要:比如地球自转时播放背景音乐,动画一旦开始则停止穿越云层后播放视频,其他时候视频是停止的。在上面做动画分析的时候,是把这个开场动画分开来设想的,但是上面的用上状态机之后,意外的发现这个入场动画可以以另外一个放进来。 上一篇知道如何制作threejs地球之后,就正式coding了,当然还是使用最心爱的Vue。本篇会有一些代码,但是都是十几行的独立片段,相信你不用担心。 布局 在进入本篇主题...

    wyk1184 评论0 收藏0
  • 前端知识点总结——H5

    摘要:前端知识点总结新特性新的语义标签增强型表单音频和视频绘图绘图地理定位拖动增强型表单新新的表单元素新特性数据列表本身不可见为提供输入建议列表新特性进度条左右晃动进度条具有指定进度值进度条新特性刻度尺用于标示一个值所值的范围不 前端知识点总结——H5 1.html5新特性 (1)新的语义标签 (2)增强型表单* (3)音频和视频 (4)Canvas绘图 (5)SVG绘图 (6)地...

    el09xccxy 评论0 收藏0
  • 前端知识点总结——H5

    摘要:前端知识点总结新特性新的语义标签增强型表单音频和视频绘图绘图地理定位拖动增强型表单新新的表单元素新特性数据列表本身不可见为提供输入建议列表新特性进度条左右晃动进度条具有指定进度值进度条新特性刻度尺用于标示一个值所值的范围不 前端知识点总结——H5 1.html5新特性 (1)新的语义标签 (2)增强型表单* (3)音频和视频 (4)Canvas绘图 (5)SVG绘图 (6)地...

    用户84 评论0 收藏0
  • QQ音乐的动效歌词是如何实践的?

    摘要:最终方案也确定采用序列帧动画方案。所以,要想在电影或者视频上显示效果,首先要做的是编写特效文件,然后再将特效文件解析成序列帧动画的位图,最后将这些位图按照特定的顺序和一定的帧率进行播放,就能看到各种特效的动画。 本文由云+社区发表作者:QQ音乐技术团队 一、 背景 1. 现状 歌词浏览已经成为音乐app的标配,展示和动画效果也基本上大同小异,主要是单行的逐字染色的卡拉OK效果和多行的...

    Edison 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<