亲宝软件园·资讯

展开

Java 视频格式转换 使用开源项目JAVAE2 进行视频格式转换

懵懂小子 人气:0
想了解使用开源项目JAVAE2 进行视频格式转换的相关内容吗,懵懂小子在本文为您仔细讲解Java 视频格式转换的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:JAVAE2,视频格式转换,Java,视频格式转换,开源项目JAVAE2,下面大家一起来学习吧。

使用开源项目JAVAE 进行视频格式转换

JAVAE简介:

JAVE (Java音频视频编码器)库是ffmpeg项目的Java包装器。开发人员可以利用JAVE2将音频和视频文件从一种格式转换为另一种格式。在示例可以转换成一个AVI文件MG,您可以更改一个DivX视频(youtube) Flash FLV,您可以转换WAV音频文件到MP3和Ogg Vorbis,您可以分离和转换音频和视频跟踪代码,您可以调整视频,改变他们的大小和比例等。JAVE2还支持许多其他格式、容器和操作。

官网地址: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

快速上手

导包

<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("获取视频时长:{}", 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);
    //截取视频作为图片保存
    /*
    *第一个参数 视频源文件信息类
    * 第二个参数 截取的宽度
    * 第三个参数 截取的高度
    * 第四个参数 截取的是那一帧
    * 第五个参数是 截取的图片质量 1-31 数字越小质量越高
    *
    **/
    screenExtractor.renderOneImage(multimediaObject, size.getWidth(), size.getHeight(), 3000, target, 31);

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

 }


 /**
  * @param source  源文件
  * @param targetPath 转码后的路径
  */
 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();
   //设置视频编码
   video.setCodec("h264");

   if (ObjectUtil.isNotNull(bitRate)) {
    //设置比特率
    video.setBitRate(bitRate * 1000);
   }
   File target = new File(targetPath);
   AudioAttributes audio = new AudioAttributes();
   //设置编码器名称
   audio.setCodec("aac");
   EncodingAttributes attrs = new EncodingAttributes();
   //设置转换后的格式
   attrs.setFormat("mp4");
   attrs.setAudioAttributes(audio);
   attrs.setVideoAttributes(video);
   Encoder encoder = new Encoder();
   encoder.encode(multimediaObject, target, attrs);
   //花费毫秒数

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

   System.out.println("转换后视频宽:" + size1.getWidth());
   System.out.println("转换后视频高:" + size1.getHeight());
   System.out.println("转换后视频比特率:" + video1.getBitRate() / 1000);
   System.out.println("转换后视频编码:" + video1.getDecoder());

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



}

效果 (flv 转MP4)

加载全部内容

相关教程
猜你喜欢
用户评论