java实现用ffmpeg 获取视频时长

1546年前 (2020-07-17)java技术3588

首先需要引入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<String> commands = new java.util.ArrayList<String>();
    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;
}


本文原创,转载必追究版权。

分享给朋友:

相关文章

jquery 操作html元素(及CSS)

jquery 操作html元素(及CSS)

 $("li").addClass("aui-user-view-cell aui-img") ;  //给元素添加样式$('#a1...

Java 实现用户资料完整度的前端显示(或根据填写资料自动评分)

前端使用 Bootstrap 的进度条组件显示百分比,后台读取权重并计算信息完整度,并将计算的结果返回给前端,供页面显示。CSS1<link href="static/sc/...

dwz +jfinal 批量多文件上传 实例

页面部分:<link href="${root}/style/dwz/uploadify/css/uploadify.css" rel="sty...

office 2010安装、激活、激活工具下载

office 2010安装、激活、激活工具下载

 首先下载好工具包(包括office 2010安装程序、激活工具及Microsoft .NET Framework 4.0),点击工具包下载进行下载;安装好office 2010。如果是wi...

java 实现自增编号+Oracle序列

原理:a,a++,fillStr(a, 9, false, "0");新建序列:create sequence seq_lineminvalue 1maxvalue 9999999...

Java判断是数字还是字符串

方法一:利用正则表达式public class Testone {public static void main(String[] ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。