溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JAVAE2 項(xiàng)目如何實(shí)現(xiàn)對(duì)視頻格式進(jìn)行轉(zhuǎn)換

發(fā)布時(shí)間:2020-11-06 14:43:52 來源:億速云 閱讀:378 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)JAVAE2 項(xiàng)目如何實(shí)現(xiàn)對(duì)視頻格式進(jìn)行轉(zhuǎn)換,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

JAVAE簡(jiǎn)介:

JAVE (Java音頻視頻編碼器)庫是ffmpeg項(xiàng)目的Java包裝器。開發(fā)人員可以利用JAVE2將音頻和視頻文件從一種格式轉(zhuǎn)換為另一種格式。在示例可以轉(zhuǎn)換成一個(gè)AVI文件MG,您可以更改一個(gè)DivX視頻(youtube) Flash FLV,您可以轉(zhuǎn)換WAV音頻文件到MP3和Ogg Vorbis,您可以分離和轉(zhuǎn)換音頻和視頻跟蹤代碼,您可以調(diào)整視頻,改變他們的大小和比例等。JAVE2還支持許多其他格式、容器和操作。

官網(wǎng)地址:https://www.mvnjar.com/ws.schild/jave-all-deps/2.4.2/detail.html

github地址:https://github.com/a-schild/jave2/tree/master/jave-example

maven地址:https://mvnrepository.com/artifact/ws.schild/jave-all-deps

快速上手

導(dǎo)包

<dependency>
 <groupId>ws.schild</groupId>
 <artifactId>jave-all-deps</artifactId>
 <version>2.4.2</version>
</dependency>

工具類

package com.example.javae2.util;


import cn.hutool.core.util.ObjectUtil;
import ws.schild.jave.*;

import java.io.File;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

public class VideoUtils {



 private static Map<String, Integer> sizeBitRateMap;

 static {
  sizeBitRateMap = new HashMap<>();
  sizeBitRateMap.put("1920*1080", 4992);
  sizeBitRateMap.put("1280*720", 2496);
  sizeBitRateMap.put("1024*576", 1856);
  sizeBitRateMap.put("840*480", 1216);
  sizeBitRateMap.put("768*432", 1088);
  sizeBitRateMap.put("640*360", 896);
  sizeBitRateMap.put("424*240", 576);
 }


 public static void main(String[] args) {
  VideoUtils videoUtils = new VideoUtils();
  videoUtils.convertVideoToMP4(new File("C:\\temp\\javae2\\0001.嗶哩嗶哩-頸椎操[流暢版].flv"),"C:\\temp\\javae2\\0001.嗶哩嗶哩-頸椎操[流暢版].mp4");

  //videoUtils.getVideoInfoAndGenerateThumbnail(new File("C:\\\\temp\\\\javae2\\\\0001.嗶哩嗶哩-頸椎操[流暢版].mp4"), "C:\\\\temp\\\\javae2\\\\0001.嗶哩嗶哩-頸椎操[流暢版]..jpg");


 }

 /**
  * 截取視頻的一針作為封面圖
  *
  * @param file   視頻文件
  * @param thumbnailPath 截取圖片保存路徑
  * @return
  */
 public void getVideoInfoAndGenerateThumbnail(File file, String thumbnailPath) {
  MultimediaObject multimediaObject = new MultimediaObject(file);
  try {
   MultimediaInfo info = multimediaObject.getInfo();
   VideoInfo videoInfo = info.getVideo();
   logger.info("獲取視頻時(shí)長(zhǎng):{}", info.getDuration() / 1000);
   if (ObjectUtil.isNotNull(videoInfo)) {
    VideoSize size = videoInfo.getSize();
    int width = size.getWidth();
    int height = size.getHeight();
    logger.info("視頻寬:{} 視頻高{}", width, height);
    logger.info("比特率:{}", videoInfo.getBitRate() / 1000);
    ScreenExtractor screenExtractor = new ScreenExtractor();
    File target = new File(thumbnailPath);
    //截取視頻作為圖片保存
    /*
    *第一個(gè)參數(shù) 視頻源文件信息類
    * 第二個(gè)參數(shù) 截取的寬度
    * 第三個(gè)參數(shù) 截取的高度
    * 第四個(gè)參數(shù) 截取的是那一幀
    * 第五個(gè)參數(shù)是 截取的圖片質(zhì)量 1-31 數(shù)字越小質(zhì)量越高
    *
    **/
    screenExtractor.renderOneImage(multimediaObject, size.getWidth(), size.getHeight(), 3000, target, 31);

   }
  } catch (EncoderException e) {
   e.printStackTrace();
  }

 }


 /**
  * @param source  源文件
  * @param targetPath 轉(zhuǎn)碼后的路徑
  */
 public void convertVideoToMP4(File source, String targetPath) {
  MultimediaObject multimediaObject = new MultimediaObject(source);
  try {
   MultimediaInfo info = multimediaObject.getInfo();
   VideoInfo videoInfo = info.getVideo();
   VideoSize size = videoInfo.getSize();
   System.out.println("原視頻寬:" + size.getWidth());
   System.out.println("原視頻高:" + size.getHeight());
   System.out.println("原視頻比特率:" + videoInfo.getBitRate() / 1000);
   System.out.println("原視頻編碼:" + videoInfo.getDecoder());

   Integer bitRate = sizeBitRateMap.get(size.getWidth() + "*" + size.getHeight());
   VideoAttributes video = new VideoAttributes();
   //設(shè)置視頻編碼
   video.setCodec("h364");

   if (ObjectUtil.isNotNull(bitRate)) {
    //設(shè)置比特率
    video.setBitRate(bitRate * 1000);
   }
   File target = new File(targetPath);
   AudioAttributes audio = new AudioAttributes();
   //設(shè)置編碼器名稱
   audio.setCodec("aac");
   EncodingAttributes attrs = new EncodingAttributes();
   //設(shè)置轉(zhuǎn)換后的格式
   attrs.setFormat("mp4");
   attrs.setAudioAttributes(audio);
   attrs.setVideoAttributes(video);
   Encoder encoder = new Encoder();
   encoder.encode(multimediaObject, target, attrs);
   //花費(fèi)毫秒數(shù)

   MultimediaObject multimediaObjectOfter = new MultimediaObject(Paths.get(targetPath).toFile());
   MultimediaInfo info1 = multimediaObjectOfter.getInfo();
   VideoInfo video1 = info1.getVideo();
   VideoSize size1 = video1.getSize();

   System.out.println("轉(zhuǎn)換后視頻寬:" + size1.getWidth());
   System.out.println("轉(zhuǎn)換后視頻高:" + size1.getHeight());
   System.out.println("轉(zhuǎn)換后視頻比特率:" + video1.getBitRate() / 1000);
   System.out.println("轉(zhuǎn)換后視頻編碼:" + video1.getDecoder());

  } catch (EncoderException e) {
   e.printStackTrace();
  }
 }



}

效果 (flv 轉(zhuǎn)MP4)

JAVAE2 項(xiàng)目如何實(shí)現(xiàn)對(duì)視頻格式進(jìn)行轉(zhuǎn)換

上述就是小編為大家分享的JAVAE2 項(xiàng)目如何實(shí)現(xiàn)對(duì)視頻格式進(jìn)行轉(zhuǎn)換了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI