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

作者:懵懂小子 时间:2023-11-08 07:18:24 

使用开源项目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)

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

来源:https://www.cnblogs.com/java-hardly-road/p/11820431.html

标签:开源项目,JAVAE2,视频格式转换,java
0
投稿

猜你喜欢

  • Java中List集合去重方法以及效率对比

    2021-11-03 00:15:52
  • 浅谈Java中replace与replaceAll区别

    2021-07-05 12:56:56
  • Java实现发送邮件并携带附件

    2023-07-23 19:02:25
  • c# 编写的简单飞行棋游戏

    2022-12-05 05:10:59
  • 详解Spring Boot最核心的27个注解,你了解多少?

    2023-11-20 06:23:35
  • Java数据结构之双向链表图解

    2023-02-07 10:07:22
  • java中hasNextInt判断后无限循环输出else项的解决方法

    2023-11-15 10:12:44
  • 聊聊Controller中RequestMapping的作用

    2021-12-08 20:48:45
  • Android Studio 3.1.3升级至3.6.1后旧项目的兼容操作方法

    2022-03-27 10:15:41
  • 使用mybatis插件PageHelper实现分页效果

    2023-03-29 15:12:03
  • 介绍Jersey-Jersey入门基础

    2023-11-18 06:34:26
  • Kotlin协程Job生命周期结构化并发详解

    2023-05-23 10:08:17
  • SpringCloud读取Nacos配置中心报错及遇到的坑:Could not resolve placeholder ‘xxx’ in value ‘${xxx}

    2022-12-26 04:41:02
  • hibernate4基本配置方式详解

    2023-03-11 11:07:43
  • 浅谈Android Studio如何Debug对应so文件C/C++代码

    2023-11-20 03:23:35
  • Android Studio连接手机设备教程

    2021-06-10 14:40:23
  • 二叉搜索树实例练习

    2022-09-20 22:03:06
  • 详解Android TextView属性ellipsize多行失效的解决思路

    2022-03-02 16:00:32
  • maven无法依赖spring-cloud-stater-zipkin的解决方案

    2023-09-12 01:54:51
  • Spring @Async无法实现异步的解决方案

    2021-10-22 13:32:46
  • asp之家 软件编程 m.aspxhome.com