中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎樣獲取視頻時長及截取幀截圖

發布時間:2021-09-27 10:16:54 來源:億速云 閱讀:180 作者:小新 欄目:編程語言

小編給大家分享一下Java怎樣獲取視頻時長及截取幀截圖,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

示例

添加依賴

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

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

<dependency>      <groupId>org.bytedeco</groupId>      <artifactId>javacv</artifactId>      <version>1.4.4</version>      <exclusions>        <exclusion>          <groupId>org.bytedeco</groupId>          <artifactId>javacpp</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>flycapture</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>libdc1394</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>libfreenect</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>libfreenect2</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>librealsense</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>videoinput</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>opencv</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>tesseract</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>leptonica</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>flandmark</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>artoolkitplus</artifactId>        </exclusion>      </exclusions>    </dependency>    <dependency>      <groupId>org.bytedeco</groupId>      <artifactId>javacv-platform</artifactId>      <version>1.4.4</version>      <exclusions>        <exclusion>          <groupId>org.bytedeco</groupId>          <artifactId>javacv</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>flycapture-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>libdc1394-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>libfreenect-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>libfreenect2-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>librealsense-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>videoinput-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>opencv-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>tesseract-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>leptonica-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>flandmark-platform</artifactId>        </exclusion>        <exclusion>          <groupId>org.bytedeco.javacpp-presets</groupId>          <artifactId>artoolkitplus-platform</artifactId>        </exclusion>      </exclusions>    </dependency>

核心代碼

獲取視頻時長

/**   * 獲取視頻時長,單位為秒   *   * @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怎樣獲取視頻時長及截取幀截圖”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泗水县| 怀集县| 武威市| 光泽县| 曲靖市| 安新县| 金沙县| 镇平县| 铁岭市| 阿巴嘎旗| 山阴县| 博湖县| 三江| 萝北县| 什邡市| 定州市| 荆州市| 靖远县| 扶沟县| 平罗县| 彰化市| 建德市| 日照市| 贵定县| 湘阴县| 临沭县| 台前县| 宝应县| 长春市| 博乐市| 德钦县| 广丰县| 高平市| 水城县| 龙口市| 通辽市| 陆良县| 松溪县| 绥阳县| 呼玛县| 永平县|