三个步骤:
- 本地生成file文件
- MultipartFile转为file,获取时长(毫秒),换算毫秒为时分秒
- 删除本地的file文件
导入maven,该jar包可能会自动下载失败,需手动下载的,请移步:
- CSDN下载: jave-1.0.2.jar --计算视频时长所必需的jar包
- 网盘下载:链接:https://pan.baidu.com/s/1eION3Z4mDi-Jo-vNRdd56w 提取码:b1xx
<dependency>
<groupId>it.sauronsoftware</groupId>
<artifactId>jave</artifactId>
<version>1.0.2</version>
</dependency>
注意:下载后,需手动将zip包解压,放至本地maven仓库,下图为本机路径(若无配置,跟我一致):
VideoUtil:
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.MultimediaInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.UUID;
/**
* @Author: Hanweihu
* @Description:
* @Date: Created in 8:33 2019/7/30
*/
@Slf4j
@Component
public class VideoUtil {
/**
* @Description: 获取视频时长(时分秒)
* @author: Hanweihu
* @date: 2019/7/30 8:35
* @params: [file]
* @return: java.lang.String
*/
public String ReadVideoTimeMs(MultipartFile file) {
Encoder encoder = new Encoder();
long ms = 0;
try {
// 获取文件类型
String fileName = file.getContentType();
// 获取文件后缀
String pref = fileName.indexOf("/") != -1 ? fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()) : null;
String prefix = "." + pref;
// 用uuid作为文件名,防止生成的临时文件重复
final File excelFile = File.createTempFile(UUID.randomUUID().toString().replace("-", ""), prefix);
// MultipartFile to File
file.transferTo(excelFile);
MultimediaInfo m = encoder.getInfo(excelFile);
ms = m.getDuration();
//程序结束时,删除临时文件
VideoUtil.deleteFile(excelFile);
} catch (Exception e) {
e.printStackTrace();
}
int ss = 1000;
int mi = ss * 60;
int hh = mi * 60;
int dd = hh * 24;
long day = ms / dd;
long hour = (ms - day * dd) / hh;
long minute = (ms - day * dd - hour * hh) / mi;
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
String strHour = hour < 10 ? "0" + hour : "" + hour;//小时
String strMinute = minute < 10 ? "0" + minute : "" + minute;//分钟
String strSecond = second < 10 ? "0" + second : "" + second;//秒
if (strHour.equals("00")) {
return strMinute + ":" + strSecond;
} else {
return strHour + ":" + strMinute + ":" + strSecond;
}
}
/**
* @Description: 删除文件
* @author: Hanweihu
* @date: 2019/7/30 8:35
* @params: [files]
* @return: void
*/
private static void deleteFile(File... files) {
for (File file : files) {
if (file.exists()) {
file.delete();
}
}
}
}
调用 ReadVideoTimeMs 方法即可:
String duration = videoUtil.ReadVideoTimeMs(multipartFile);