三個步驟:
- 本地生成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);