使用开源项目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)
以上就是使用开源项目JAVAE 进行视频格式转换的详细内容,更多关于Java 视频格式转换的资料请关注自学编程网其它相关文章!