文章详情

使用开源项目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 进行视频格式转换

以上就是使用开源项目JAVAE 进行视频格式转换的详细内容。

版权:版权申明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 70068002@qq.com 举报,一经查实,本站将立刻删除。

转载请注明出处:https://www.stntk.com/2625.html/dongtai/houduan/

相关推荐
php数据库怎样去重复的数据
当涉及到数据库去重功能时,PHP可以与数据库交互并执行相应的操作。以下是一个示例的PHP代码,用于从数据库中删除重复的记录并保留唯一的数据:…
头像
后端开发 2024-05-26
1,069
如何在 Python 中使用 try…else 块
在 Python 编程中,我们经常会遇到需要处理异常的情况。使用 try…except 块是一种常见的处理方法,它可以捕获和处理代码中可能出…
头像
后端开发 2024-05-26
1,353
php发送/显示 base64 编码图像
我需要向客户端发送一个 base64 编码的字符串。因此,我打开并读取服务器上的图像文件,对其进行编码并将该数据与 image/jpeg 内…
头像
后端开发 2024-05-26
11,560
php 生成条形码(支持任意php框架)
一:插件安装 在php中我们可以使用php-barcode-generator插件来生成条形码,php-barcode-generator插…
头像
后端开发 2024-05-26
1,020
如何在ThinkPHP6中使用队列技术
ThinkPHP 6(TP6)是一个流行的PHP框架,它提供了一些有用的工具和组件,其中之一就是队列(Queue)服务。队列是一种用于异步处…
头像
后端开发 2024-05-26
1,600
cURL error 60: SSL certificate problem: unable to get local issuer certificate 解决方法
fastadmin开发小程序登录功能报错: cURL error 60: SSL certificate problem: unable t…
头像
后端开发 2024-05-26
1,117
发表评论
暂无评论

还没有评论呢,快来抢沙发~

点击联系客服

在线时间:8:00-16:00

客服电话

400-888-8888

客服邮箱

70068002@qq.com

扫描二维码

关注微信公众号