在项目中很多小伙伴会用到添加视频或者音频功能需求,那么再添加之后需要显示音视频的内容时长,在这里给大家分享一个jar包:jave,可以实现转换WAV音频文件到MP3、获取音视频播放时长、视频高宽、音视频格式等等;
简介:
JAVE (Java音频视频编码器)库是ffmpeg项目的Java包装器。开发人员可以利用JAVE将音频和视频文件从一种格式转换为另一种格式。在示例可以转换成一个AVI文件MPEG,您可以更改一个DivX视频(youtube) Flash FLV,您可以转换WAV音频文件到MP3和Ogg Vorbis,您可以分离和转换音频和视频跟踪代码,您可以调整视频,改变他们的大小和比例等。JAVE还支持许多其他格式、容器和操作。
官方:http://www.sauronsoftware.it/projects/jave/index.php
实现
第一步:
添加pom依赖
<dependency>
<groupId>it.sauronsoftware</groupId>
<artifactId>jave</artifactId>
<version>1.0.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/jave-1.0.2.jar</systemPath>
</dependency>
这个jar包需要去官方下载,然后添加到项目中,在pom中进行本地依赖管理起来;
下载地址 http://www.sauronsoftware.it/projects/jave/download.php
第二步:
测试demo
package cn.mztjt.hephaistos.bapi.utils.io;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.InputFormatException;
import it.sauronsoftware.jave.MultimediaInfo;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: Wangzhen
* @Date: 2020-02-27 13:44
* @Description:
*/
public class VideoUtils {
public static void main(String[] args) {
File source = new File("F:\\迅雷下载\\古惑仔\\古惑仔3之只手遮天.mp4");
Encoder encoder = new Encoder();
FileChannel fc = null;
String size = "";
try {
MultimediaInfo m = encoder.getInfo(source);
long ls = m.getDuration();
System.out.println("此视频时长为:" + ls / 60000 + "分" + (ls) / 1000 + "秒!");
//视频帧宽高
System.out.println("此视频高度为:" + m.getVideo().getSize().getHeight());
System.out.println("此视频宽度为:" + m.getVideo().getSize().getWidth());
System.out.println("此视频格式为:" + m.getFormat());
FileInputStream fis = new FileInputStream(source);
fc = fis.getChannel();
BigDecimal fileSize = new BigDecimal(fc.size());
size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
System.out.println("此视频大小为" + size);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != fc) {
try {
fc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* @param path
* @return Map
*/
public static Map<String, Object> getVoideMsg(String path) {
Map<String, Object> map = new HashMap<String, Object>();
File file = new File(path);
Encoder encoder = new Encoder();
FileChannel fc = null;
String size = "";
if (file != null) {
try {
MultimediaInfo m = encoder.getInfo(file);
long ls = m.getDuration();
FileInputStream fis = new FileInputStream(file);
fc = fis.getChannel();
BigDecimal fileSize = new BigDecimal(fc.size());
size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
map.put("height", m.getVideo().getSize().getHeight());
map.put("width", m.getVideo().getSize().getWidth());
map.put("format", m.getFormat());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != fc) {
try {
fc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return map;
}
/**
* 获取时长(单位:秒)
*
* @param url 必须是远程url
* @return 单位秒
* @throws InputFormatException
* @throws EncoderException
* @throws IOException
*/
public static long getDurationByUrl(String url) throws InputFormatException, EncoderException, IOException {
File file = getFileByUrl(url);
MultimediaInfo m = new Encoder().getInfo(file);
System.out.println(file.getName());
if (file.exists()) {
file.delete();
System.out.println(file.getAbsolutePath());
}
return m.getDuration() / 1000;
}
}