zoukankan      html  css  js  c++  java
  • Java调用linux命令ffmpeg视频转码

    mport java.io.*;
    import java.lang.*;
    import java.util.*;
    import java.text.*;
    import java.net.*;
    public class MediocreExecJavac
    {
    //运行命令
    public void runCmd(String command){
    try
    {           
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(command);
    InputStream stderr = proc.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;
    System.out.println("<ERROR>");
    while ( (line = br.readLine()) != null)
    System.out.println(line);
    System.out.println("</ERROR>");
    int exitVal = proc.waitFor();
    System.out.println("Process exitValue: " + exitVal);
    } catch (Throwable t)
    {
    t.printStackTrace();
    }
    }

    //视频转码,infile输入文件(包括完整路径),outfile输出文件
    public boolean transfer(String infile,String outfile){
    String avitoflv = "ffmpeg -i "+infile+" -ar 22050 -ab 56 -f flv -y -s 320x240 "+outfile;
    String flvto3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb -vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
    String avito3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb -vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
    //avi -> jpg
    String avitojpg = "ffmpeg -i " + infile + " -y -f image2 -ss 00:00:10 -t 00:00:01 -s 350x240 " + outfile;
    try
    {           
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(avitoflv);
    InputStream stderr = proc.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;
    System.out.println("<ERROR>");
    while ( (line = br.readLine()) != null)
    System.out.println(line);
    System.out.println("</ERROR>");
    int exitVal = proc.waitFor();
    System.out.println("Process exitValue: " + exitVal);
    } catch (Throwable t)
    {
    t.printStackTrace();
    return false;
    }
    return true;
    }

    //读取文件,fileName输入文件,id行数
    public static String readFile(String fileName,int id)
    {
    String dataStr = "";
    FileInputStream fis = null;
    try
    {
    FileReader file = new FileReader(fileName);//建立FileReader对象,并实例化为fr
    BufferedReader br=new BufferedReader(file);//建立BufferedReader对象,并实例化为br
    int i=1;
    String Line=br.readLine();//从文件读取一行字符串
    //System.out.println("Line1="+Line+"="+Line);
    //判断读取到的字符串是否不为空
    //while(Line!=null){
    //System.out.println(Line + "<br>");//输出从文件中读取的数据
    //if(i==line){dataStr=Line;break;}else{i=i+1;}
    //Line=br.readLine();//从文件中继续读取一行数据
    //}
    dataStr=Line;
    br.close();//关闭BufferedReader对象
    }
    catch(Exception e){
    }finally{
    try
    {
    if(fis!=null)
    fis.close();
    }catch(Exception e){}
    }
    return dataStr;
    }

       //读时长信息
    public String readtime(String file)
    {
    String str="/opt/cgogo/test/info.txt";
    String timelen = "";
    String cmd = "timelen "+file;
    runCmd(cmd);
    timelen=readFile(str,1);

      return timelen;
    }

        public static void main(String args[])
    {
    MediocreExecJavac me = new MediocreExecJavac();
    String infile = "/opt/cgogo/test/02.avi";
    String outfile = "01.flv";

    //时长
    String timelen = me.readtime(infile);
    System.out.println("02.avi timelen is :" + timelen);
    //转码
    if(me.transfer(infile,outfile)){
    System.out.println("the transfer is ok!");
    }else{
    System.out.println("the transfer is error!");
    }
    }
    }
  • 相关阅读:
    十步完全理解SQL
    c#退出应用程序办法
    几个有意思的算法题
    GeoServer不同服务器安装配置、数据发布及客户端访问
    开启httpd服务的时候 显示Could not reliably determine the server`s fully qualified domain name
    Working With OpenLayers(Section 1: Creating a Basic Map)
    GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
    模拟远程HTTP的POST请求
    模拟提交带附件的表单
    支付宝手机网站接口对接
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400495.html
Copyright © 2011-2022 走看看