|
@@ -3,7 +3,13 @@ package com.iden.common.videotool;
|
|
|
import com.iden.common.util.DateUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.File;
|
|
|
+import java.io.InputStreamReader;
|
|
|
import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
@Slf4j
|
|
|
public class VideoTool {
|
|
@@ -20,9 +26,10 @@ public class VideoTool {
|
|
|
Long endTime = shootEndTime.getTime() ;
|
|
|
|
|
|
//ms
|
|
|
- long duration = 0L;
|
|
|
+ long duration = getVideoTime(ffmpegPath,videoFilePath) * 1000;
|
|
|
|
|
|
- String cmd = ffmpegPath + " -y -i " + videoFilePath + " -r 1 " + saveDir + "%04d.jpg";
|
|
|
+
|
|
|
+ String cmd = ffmpegPath + " -y -i " + videoFilePath + " -r 1 " + saveDir + "%08d.jpg";
|
|
|
|
|
|
log.info("开始运行视频分解为图片命令:" + cmd);
|
|
|
Runtime.getRuntime().exec(cmd);
|
|
@@ -51,4 +58,65 @@ public class VideoTool {
|
|
|
log.info("视频剪辑完成");
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取视频总时间
|
|
|
+ * @param ffmpeg_path ffmpeg路径
|
|
|
+ * @param video_path 视频路径
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static int getVideoTime( String ffmpeg_path,String video_path) {
|
|
|
+ List<String> commands = new java.util.ArrayList<String>();
|
|
|
+ commands.add(ffmpeg_path);
|
|
|
+ commands.add("-i");
|
|
|
+ commands.add(video_path);
|
|
|
+ try {
|
|
|
+ ProcessBuilder builder = new ProcessBuilder();
|
|
|
+ builder.command(commands);
|
|
|
+ final Process p = builder.start();
|
|
|
+
|
|
|
+ //从输入流中读取视频信息
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ String line = "";
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
+ sb.append(line);
|
|
|
+ }
|
|
|
+ br.close();
|
|
|
+
|
|
|
+ //从视频信息中解析时长
|
|
|
+ String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
|
|
|
+ Pattern pattern = Pattern.compile(regexDuration);
|
|
|
+ Matcher m = pattern.matcher(sb.toString());
|
|
|
+ if (m.find()) {
|
|
|
+ int time = getTimelen(m.group(1));
|
|
|
+ System.out.println(video_path+",视频时长:"+time+", 开始时间:"+m.group(2)+",比特率:"+m.group(3)+"kb/s");
|
|
|
+ return time;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ //格式:"00:00:10.68"
|
|
|
+ private static int getTimelen(String timelen){
|
|
|
+ int min=0;
|
|
|
+ String strs[] = timelen.split(":");
|
|
|
+ if (strs[0].compareTo("0") > 0) {
|
|
|
+ min+=Integer.valueOf(strs[0])*60*60;//秒
|
|
|
+ }
|
|
|
+ if(strs[1].compareTo("0")>0){
|
|
|
+ min+=Integer.valueOf(strs[1])*60;
|
|
|
+ }
|
|
|
+ if(strs[2].compareTo("0")>0){
|
|
|
+ min+=Math.round(Float.valueOf(strs[2]));
|
|
|
+ }
|
|
|
+ return min;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ System.out.println(getVideoTime("D:\\program\\ffmpeg\\ffmpeg-4.3.1-2021-01-01-essentials_build\\bin\\ffmpeg.exe","e:/output99.mp4"));
|
|
|
+ }
|
|
|
}
|