怎么用java读取ffmpeg输出流

 我来答
桃子的幸福on
推荐于2018-03-23 · 知道合伙人互联网行家
桃子的幸福on
知道合伙人互联网行家
采纳数:1044 获赞数:2228
在校计算机专业学生

向TA提问 私信TA
展开全部
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;
  }
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式