开发者社区> 问答> 正文

使用ffmpeg转码时怎么判断转码是否已经结束了呢

if(!strFileType.equals(".mp4")&&!strFileType.equals(".flv")&&!strFileType.equals(".mov"))
 {
 commend.add("E:\ffmpeg\bin\ffmpeg.exe");

 commend.add("-i");
 commend.add(resourcePath);
 commend.add("-ab");
 commend.add("56");
 commend.add("-ar");
 commend.add("22050");
 commend.add("-qscale");
 commend.add("8");
 commend.add("-r");
 commend.add("15");
 commend.add("-s");
 commend.add("600x500");
 commend.add(ServletActionContext.getServletContext().getRealPath("/videos")+"//"+savename+".flv"); 
                      vE.setVEUrl(savename+".flv");
                                              try {
                            ProcessBuilder builder = new ProcessBuilder(commend);   
                            Process p=builder.start();         //p.waitFor();好像不行啊?。。阻塞了貌似
                        }
                    catch (IOException e) {
                        e.printStackTrace();
                    }

展开
收起
蛮大人123 2016-02-25 10:48:09 6682 0
2 条回答
写回答
取消 提交回答
  • process = Runtime.getRuntime().exec(cmd);
    br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
    while (br.readLine() != null) ;

    2019-07-17 18:47:16
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪
    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;
    
               while ( (line = br.readLine()) != null)
    
                    System.out.println(line);
               int exitVal = proc.waitFor();
    
                System.out.println("Process exitValue: " + exitVal);
    
           } catch (Throwable t) {
    
               t.printStackTrace();
    
            }
    
       }
    
       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;
    
            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;
    
    
    
                while ( (line = br.readLine()) != null)
    
                    System.out.println(line);
    
               int exitVal = proc.waitFor();
    
               System.out.println("Process exitValue: " + exitVal);
    
           } catch (Throwable t) {
    
                t.printStackTrace();
    
               return false;
    
            }
    
            return true;
    
        }
    
        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
    
                String 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="/root/Desktop/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 = "/root/Desktop/a.mp4";
           String outfile = "/root/Desktop/1.flv";
    
           String timelen = me.readtime(infile);
    
          System.out.println("timelen is :" + timelen);
            if(me.transfer(infile,outfile)) {
                System.out.println("the transfer is ok!");
    
            } else {
    
               System.out.println("the transfer is error!");
    
           }
    
        }
    
    }
    2019-07-17 18:47:16
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载