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怎样获取视频时长及截取帧截图
本文URL:http://www.cqwzjz.cn/article/gghpgo.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 