zoukankan      html  css  js  c++  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;
    }
    }

  • 相关阅读:
    C# 操作txt
    下周学习计划(0815——0822)
    配置允许外界访问的端口
    修改表结构
    C# return和break
    js Ajax的几种操作方法
    WebForm
    Extjs4新特性
    25、手把手教你Extjs5(二十五)Extjs5常用组件--form的基本用法
    24、手把手教你Extjs5(二十四)模块Form的自定义的设计[3]
  • 原文地址:https://www.cnblogs.com/guoke-jsp/p/5250591.html
Copyright © 2011-2022 走看看