java实现用ffmpeg 获取视频时长

1545年前 (2020-07-17)java技术2916

首先需要引入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;
}


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

分享给朋友:

相关文章

 程序员的中秋礼物.......

程序员的中秋礼物.......

【小姐你好,我是程序员】“小姐你好,我是程序员。”女生礼貌地回答:“你好,程先生。”男:“……哦,叫我序员就可以了。”   【程序员的愿望】有一天一个程序员见到了上帝。上...

org.tigris.subversion.javahl.ClientException:Attempted to lock an already-locked dir

 svn更新或提交时候报错:org.tigris.subversion.javahl.ClientException:Attempted to lock an already-locke...

freemarker 判断日期变量为空处理 及InvalidReferenceException异常处理

at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98);InvalidR...

freeMarker Jfinal 获取session里的值

问题:freeMaker session取值的常用格式都试过 session["xxx"],session.xxx 直接xxx 都取不出来?????解决:JFinal与Struts...

js/jquery 日历控件及实例下载

js/jquery 日历控件及实例下载

实现日历控件效果:页面:<link href="${base}/resource/${profile.path}/css/lhgcalendar.css" rel="...

MyEclipse10.7注册码生成

注意经验里的工具可能不可用,请点击 生成注册码工具  下载。提取码:p1w4MyEclipse10.7注册码激活步骤:点击下面的链接http://jingyan.baidu.com/arti...

发表评论

访客

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