java对视频的转换

 

java实现视频的转换功能:有两种实现方法ffmpeg和mencoder,ffmpeg支持的视频格式有asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等mencoder支持的视频格式wmv9,rm,rmvb。能用ffmpeg转换的尽量使用ffmpeg进行转换。mencoder转换视频不仅转换速度慢而且容易报错在转换到一半时经常报:应用程序错误“0x6342dae”指令引用的“0x022b6000”内存。该内存不能为“written” 然后就终止了 。

ffmpeg的实现方法:

 public synchronized String compressFile(String path,Integer breate,String fileName){
  //低精度  
  List<String> commend = new ArrayList<String>();  
     commend.add("E:/ffmpeg.exe");  
     commend.add("-i");  
     commend.add(path);
     
     commend.add("-ab");   //比特率
     commend.add(breate+"k");   
     commend.add("-ac");   //声道
     commend.add("1");  
     commend.add("-ar");   //采样率
     commend.add("22050");     //44100  22050
     commend.add("-y");  
     String newP = "D:/www/test/";
     File ff = new File(newP);
  if(!ff.exists()){
   ff.mkdirs();
  }
  String newName = newP+"/"+fileName+"_"+breate+".mp3";
       commend.add(newName);
  try {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
   ProcessBuilder builder = new ProcessBuilder();  
   builder.command(commend);  
   Process process = builder.start();
   InputStream is = process.getErrorStream(); // 获取ffmpeg进程的输出流
   BufferedReader br = new BufferedReader(new InputStreamReader(is)); // 缓冲读入
   StringBuilder buf = new StringBuilder(); // 保存ffmpeg的输出结果流
   String line = null;
   while((line = br.readLine()) != null) {
    buf.append(line); // 循环等待ffmpeg进程结束
   }
   return newName;
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return null;
  }
 }

mencoder是实现方法:

    private String processAVI(String filepath,int type, String outputPath) {
         List<String> commend = new java.util.ArrayList<String>();
         commend.add("e:/mencoder.exe");
         commend.add(filepath);
         commend.add("-oac");
         commend.add("mp3lame");
         commend.add("-lavcopts");
         commend.add("acodec=mp3:abitrate=64");
         commend.add("-ovc");
         commend.add("xvid");
         commend.add("-xvidencopts");
         commend.add("bitrate=600");
         commend.add("-of");
         commend.add("avi");
         commend.add("-o");
         commend.add(outputPath);
        
//         String str = "E:/mencoder.exe D:/www/test/av.rm -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o rmvb.avi";
        

         try {
             ProcessBuilder builder = new ProcessBuilder();
             builder.command(commend);
             builder.redirectErrorStream(true);
             Process process = builder.start();
             BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
             while (stdout.readLine()!= null) {
                 System.out.println(stdout.readLine());
              }
             return outputPath;
         } catch (Exception e) {
             e.printStackTrace();
             return null;
         }
     }

对于以上的实现方法仍旧在转换上还是存在问题大家能给些建议吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值