Java怎样获取视频时长及截取帧截图

小编给大家分享一下Java怎样获取视频时长及截取帧截图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都做网站、邹平网络推广、小程序开发、邹平网络营销、邹平企业策划、邹平品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供邹平建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

示例

添加依赖

      org.bytedeco      javacv-platform      1.4.4    

上述这段 maven 依赖包含了完整的 javacv 功能 (非常多,依赖Jar就占大概有500MB),由于这里只使用到了其中 ffmpeg 这块的特性,因此也可以像下面这样排除掉无关的部分

      org.bytedeco      javacv      1.4.4                        org.bytedeco          javacpp                          org.bytedeco.javacpp-presets          flycapture                          org.bytedeco.javacpp-presets          libdc1394                          org.bytedeco.javacpp-presets          libfreenect                          org.bytedeco.javacpp-presets          libfreenect2                          org.bytedeco.javacpp-presets          librealsense                          org.bytedeco.javacpp-presets          videoinput                          org.bytedeco.javacpp-presets          opencv                          org.bytedeco.javacpp-presets          tesseract                          org.bytedeco.javacpp-presets          leptonica                          org.bytedeco.javacpp-presets          flandmark                          org.bytedeco.javacpp-presets          artoolkitplus                            org.bytedeco      javacv-platform      1.4.4                        org.bytedeco          javacv                          org.bytedeco.javacpp-presets          flycapture-platform                          org.bytedeco.javacpp-presets          libdc1394-platform                          org.bytedeco.javacpp-presets          libfreenect-platform                          org.bytedeco.javacpp-presets          libfreenect2-platform                          org.bytedeco.javacpp-presets          librealsense-platform                          org.bytedeco.javacpp-presets          videoinput-platform                          org.bytedeco.javacpp-presets          opencv-platform                          org.bytedeco.javacpp-presets          tesseract-platform                          org.bytedeco.javacpp-presets          leptonica-platform                          org.bytedeco.javacpp-presets          flandmark-platform                          org.bytedeco.javacpp-presets          artoolkitplus-platform                  

核心代码

获取视频时长

/**   * 获取视频时长,单位为秒   *   * @param video 源视频文件   * @return 时长(s)   */  public static long getVideoDuration(File video) {    long duration = 0L;    FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video);    try {      ff.start();      duration = ff.getLengthInTime() / (1000 * 1000);      ff.stop();    } catch (FrameGrabber.Exception e) {      e.printStackTrace();    }    return duration;  }

截取视频指定帧为图片

/**   * 截取视频获得指定帧的图片   *   * @param video  源视频文件   * @param picPath 截图存放路径   */  public static void getVideoPic(File video, String picPath) {    FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video);    try {      ff.start();      // 截取中间帧图片(具体依实际情况而定)      int i = 0;      int length = ff.getLengthInFrames();      int middleFrame = length / 2;      Frame frame = null;      while (i < length) {        frame = ff.grabFrame();        if ((i > middleFrame) && (frame.image != null)) {          break;        }        i++;      }      // 截取的帧图片      Java2DFrameConverter converter = new Java2DFrameConverter();      BufferedImage srcImage = converter.getBufferedImage(frame);      int srcImageWidth = srcImage.getWidth();      int srcImageHeight = srcImage.getHeight();      // 对截图进行等比例缩放(缩略图)      int width = 480;      int height = (int) (((double) width / srcImageWidth) * srcImageHeight);      BufferedImage thumbnailImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);      thumbnailImage.getGraphics().drawImage(srcImage.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);      File picFile = new File(picPath);      ImageIO.write(thumbnailImage, "jpg", picFile);      ff.stop();    } catch (IOException e) {      e.printStackTrace();    }  }

测试用例

public static void main(String[] args) {    String videoPath = ResourceUtils.CLASSPATH_URL_PREFIX + "video.mp4";    File video = null;    try {      video = ResourceUtils.getFile(videoPath);    } catch (FileNotFoundException e) {      e.printStackTrace();    }    String picPath = "video.jpg";    getVideoPic(video, picPath);    long duration = getVideoDuration(video);    System.out.println("videoDuration = " + duration);  }

以上是“Java怎样获取视频时长及截取帧截图”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


文章名称:Java怎样获取视频时长及截取帧截图
标题路径:http://ybzwz.com/article/gghpgo.html