java ffmpeg 进度_java实现用ffmpeg 获取视频时长

首先需要引入ffmpeg.exe

调用int time = ConvertM3U8.getVideoTime(downloadPath);

方法:static String ffmpegpath="D:\\Program Files\\ffmpeg-20200628-4cfcfb3-win64-static\\bin\\ffmpeg.exe"; // ffmpeg.exe的目录

static String ffmpegpath= Global.getProfile()+"\\ffmpeg.exe";

public static int getVideoTime(String video_path) {

List commands = new java.util.ArrayList();

commands.add(ffmpegpath);

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;

}

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;

}

http://www.swzhinan.com/

本文由站长原创或收集,不代表本站立场,如若转载,请注明出处:http://www.swzhinan.com/post/272.html

你可能感兴趣的:(java,ffmpeg,进度)