java调用ffmpeg获取视频时长

public static void main(String[] args) {

    String result =    processFLV("E:\\test\\京视传媒\\体育类\\xiao.flv");
   
   
    PatternCompiler compiler =new Perl5Compiler();
    try {
        String regexDuration ="Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
        String regexVideo ="Video: (.*?), (.*?), (.*?)[,\\s]";
        String regexAudio ="Audio: (\\w*), (\\d*) Hz";
   
        Pattern patternDuration = compiler.compile(regexDuration,Perl5Compiler.CASE_INSENSITIVE_MASK);
        PatternMatcher matcherDuration = new Perl5Matcher();
        if(matcherDuration.contains(result, patternDuration)){
            MatchResult re = matcherDuration.getMatch();

            System.out.println("提取出播放时间  ===" +re.group(1));
            System.out.println("开始时间        =====" +re.group(2));
            System.out.println("bitrate 码率 单位 kb==" +re.group(3));
        }
       
        Pattern patternVideo = compiler.compile(regexVideo,Perl5Compiler.CASE_INSENSITIVE_MASK);
        PatternMatcher matcherVideo = new Perl5Matcher();
       
        if(matcherVideo.contains(result, patternVideo)){
            MatchResult re = matcherVideo.getMatch();
            System.out.println("编码格式  ===" +re.group(1));
            System.out.println("视频格式 ===" +re.group(2));
            System.out.println(" 分辨率  == =" +re.group(3));
        }
       
        Pattern patternAudio = compiler.compile(regexAudio,Perl5Compiler.CASE_INSENSITIVE_MASK);
        PatternMatcher matcherAudio = new Perl5Matcher();
       
        if(matcherAudio.contains(result, patternAudio)){
            MatchResult re = matcherAudio.getMatch();
            System.out.println("音频编码             ===" +re.group(1));
            System.out.println("音频采样频率  ===" +re.group(2));
        }

    } catch (MalformedPatternException e) {
        e.printStackTrace();
    }

    }
   

//  ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
    private static String processFLV(String inputPath) {
/*
      if (!checkfile(inputPath)){
          _log.warn(inputPath+" is not file");
          return false;
         }
*/
        List<String> commend=new java.util.ArrayList<String>();
       
//        commend.add("e:\\videoconver\\ffmpeg\\ffmpeg ");//可以设置环境变量从而省去这行
       commend.add("ffmpeg");
        commend.add("-i");
        commend.add(inputPath);
      
        try {

            ProcessBuilder builder = new ProcessBuilder();
            builder.command(commend);
            builder.redirectErrorStream(true);
            Process p= builder.start();

           //1. start
            BufferedReader buf = null; // 保存ffmpeg的输出结果流
            String line = null;
          //read the standard output

            buf = new BufferedReader(new InputStreamReader(p.getInputStream()));
           
            StringBuffer sb= new StringBuffer();
            while ((line = buf.readLine()) != null) {
             System.out.println(line);
             sb.append(line);
             continue;
                 }
            int ret = p.waitFor();//这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行
            //1. end
            return sb.toString();
        } catch (Exception e) {
//            System.out.println(e);
            return null;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值