1.自动判断格式并调用相应的转换工具,默认方法

[java] view plaincopy

/** 

     * 自动判断格式并调用相应的转换工具,默认方法 

     * @param srcVideoPath 

     * @param tarVideoPath 

     * @return 

     */  

    public static boolean videoConver(String srcVideoPath,String tarVideoPath){  

        boolean boo = true;  

        if(StringUtils.isNotEmpty(srcVideoPath) && StringUtils.isNotEmpty(tarVideoPath)){  

            srcVideoPath = BaseCommonUtil.replaceFliePathStr(srcVideoPath);  

            srcVideoPath = srcVideoPath.replaceAll("//", "/");  

            tarVideoPath = BaseCommonUtil.replaceFliePathStr(tarVideoPath);  

            tarVideoPath = tarVideoPath.replaceAll("//", "/");  

            String extendName = srcVideoPath.substring(srcVideoPath.lastIndexOf(".")+1,srcVideoPath.length());  

            String extendTarName = tarVideoPath.substring(tarVideoPath.lastIndexOf(".")+1,tarVideoPath.length());  

            //判断元资源是不是MP4格式,如果是则直接复制  

            if("MP4".equals(extendName.toUpperCase())){  

                try{  

                    if(!srcVideoPath.equals(tarVideoPath)){  

                        copyFile(new File(srcVideoPath),new File(tarVideoPath));  

                    }  

                }catch(IOException e){  

                    boo=false;  

                    logger.error("文件复制失败!",e);  

                }  

            }else{  

                // 直接用ffmpeg转换,如果不能转换则用mencoder转换  

                boo = processFfmpegOther(srcVideoPath, tarVideoPath);  

                if (!boo) {  

                    boo = processMencoderOther(srcVideoPath, tarVideoPath);  

                    if (!boo) {  

                        logger.error(" videoConver 暂不支持该格式!");  

                        boo = false;  

                    }  

                }  

            }  

              

            if("MP4".equals(extendTarName.toUpperCase())){  

                boo = execMp4Box(tarVideoPath);  

            }  

        }  

        return boo;  

    }  

2.Mp4Box 转换MP4

[java] view plaincopy

/** 

     * Mp4Box 转换MP4 

     * @param srcPath 源MP4路径 

     * @return 

     */  

    public static boolean execMp4Box(String srcPath){  

      if (!checkfile(srcPath)) {    

          logger.error("【" + srcPath + "】  不存在 !");   

            return false;    

        }    

          

        try {    

            Process process = Runtime.getRuntime().exec(mp4BoxPath + " -isma " + srcPath);  

            doWaitFor(process);    

            process.destroy();   

            if (!checkfile(srcPath)) {    

              logger.error("【" + srcPath + "】 execMp4Box 转换MP4 metadata 不成功 !");  

                return false;    

            }    

            return true;    

        } catch (Exception e) {   

          logger.error("【" + srcPath + "】execMp4Box   转换MP4 metadata 不成功 !",e);  

            return false;    

        }    

    }  

3.判断文件的类型,从而调用不同的解析工具

 

[java] view plaincopy

/** 

   * 判断文件的类型,从而调用不同的解析工具 

   * @return filePath 

   */  

   public static int checkContentType(String filePath) {    

       String type = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length())  .toLowerCase();    

         

       // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)    

         

       if (type.equals("avi")) {    

           return 0;    

       } else if (type.equals("mpg")) {    

           return 0;    

       } else if (type.equals("wmv")) {    

           return 0;    

       } else if (type.equals("3gp")) {    

           return 0;    

       } else if (type.equals("mov")) {    

           return 0;    

       } else if (type.equals("mp4")) {    

           return 0;    

       } else if (type.equals("asf")) {    

           return 0;    

       }else if (type.equals("asx")) {    

           return 0;    

       } else if (type.equals("flv")) {    

           return 0;    

             

       // 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),    

      // 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.       

             

       } else if (type.equals("wmv9")) {    

           return 1;    

       } else if (type.equals("rm")) {    

           return 1;    

       } else if (type.equals("rmvb")) {   

           return 1;    

       } else if (type.equals("swf")) {    

           return 2;    

       }  

       return 9;    

  

   }    

4.Mencoder 将源文件转换成其他格式 

[java] view plaincopy

/** 

     * Mencoder 将源文件转换成其他格式  

     * 如:wmv9,rm,rmvb 

     * @param srcVideoPath 视频文件(原) 

     * @param tarVideoPath 视频文件(新) 

     * @return 

     */  

    public static boolean processMencoderOther(String srcVideoPath,String tarVideoPath) {    

          if (!checkfile(srcVideoPath)) {    

              logger.error("【" + srcVideoPath + "】  不存在 !");  

              return false;    

          }    

        List commend = new java.util.ArrayList();    

          

        commend.add(mencoderPath);    

  

        commend.add(srcVideoPath);    

  

        // 音频采用mp3编码    

        commend.add("-oac");    

        commend.add("mp3lame");    

        // 采用高质DivX视频编码,视频码率为112kbps    

        commend.add("-ovc");    

        commend.add("lavc");    

        commend.add("-lavcopts");    

        commend.add("vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=-1:cmp=3:vb_strategy=1");    

        commend.add("-lameopts");    

        commend.add("abr:br=56");    

        // 声音采样频率设置,现为22K    

        commend.add("-srate");    

        commend.add("22050");    

        // -sws就是用来设置品质的,默认值为2    

        commend.add("-sws");    

        commend.add("3");    

        // 宽度为208,高度自动调整保持比例;    

        // -vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数    

       // commend.add("-vf");    

        //commend.add("scale=512:-3");    

        // 帧速率设置    

        commend.add("-ofps");    

        commend.add("18");    

          

        commend.add("-lameopts");    

        commend.add("vbr=3:br=128");    

        commend.add("-o");   

  

        commend.add(tarVideoPath);    

          

          

        try {   

             ProcessBuilder builder = new ProcessBuilder();   

             builder.command(commend);   

             Process process = builder.start();   

             doWaitFor(process);    

             process.destroy();   

            if (!checkfile(tarVideoPath)) {    

                logger.info(srcVideoPath + " is not exit! processMencoderOther  转换不成功 !");  

                return false;    

            }    

            return true;  

        } catch (Exception e) {    

            logger.error("【" + srcVideoPath + "】 processMencoderOther  转换不成功 !");  

            return false;  

        }    

    }    

5.Mencoder 将源文件转换成其他格式 

[java] view plaincopy

/** 

     * Mencoder 将源文件转换成其他格式  

     * 如:wmv9,rm,rmvb 

     * @param srcVideoPath 视频文件(原) 

     * @param tarVideoPath 视频文件(新) 

     * @param startTime 开始时间 形如:10秒 

     * @param endTime 结束时间 形如:120秒 

     * @return 

     */  

    public static boolean processMencoderByTime(String srcVideoPath,String tarVideoPath,String startTime,String endTime) {    

          if (!checkfile(srcVideoPath)) {    

              logger.error("【" + srcVideoPath + "】  不存在 !");  

              return false;    

          }    

        List commend = new java.util.ArrayList();    

          

        commend.add(mencoderPath);    

  

        commend.add(srcVideoPath);    

  

        // 音频采用mp3编码    

        commend.add("-oac");    

        commend.add("mp3lame");    

        // 采用高质DivX视频编码,视频码率为112kbps    

        commend.add("-ovc");    

        commend.add("lavc");    

        commend.add("-lavcopts");    

        commend.add("vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=-1:cmp=3:vb_strategy=1");    

        commend.add("-lameopts");    

        commend.add("abr:br=56");    

        // 声音采样频率设置,现为22K    

        commend.add("-srate");    

        commend.add("22050");    

        // -sws就是用来设置品质的,默认值为2    

        commend.add("-sws");    

        commend.add("3");    

        // 宽度为208,高度自动调整保持比例;    

        // -vf scale=-3:176宽度自动调整保持比例,高度为176;如果想保持原来的大小可以不要这个参数    

       // commend.add("-vf");    

        //commend.add("scale=512:-3");    

        // 帧速率设置    

        commend.add("-ofps");    

        commend.add("18");    

          

        commend.add("-ss");    

        if(startTime != null && !startTime.equals("")){  

         commend.add(getSplitStr(startTime));  

       }else{  

         commend.add("0");//默认从开始转换  

       }  

         

        

        commend.add("-endpos");    

         

       if(endTime != null && !endTime.equals("")){  

            commend.add((Long.parseLong(getSplitStr(endTime))-Long.parseLong(getSplitStr(startTime)))+"");  

      }else{  

            //VedioInfoHelps.getVideoInfo(srcVideoPath,"playingAllTime");  

            commend.add("600");//默认为60秒=10分钟  

      }  

          

        /*  

         * mode=3:cbr:br=24单声道 音频码率为24kbps;-lameopts  

         * mode=0:cbr:br=24立体声,音频码率为24kbps; 还可设置音量,-lameopts  

         * mode=3:cbr:br=32:vol=1,设置范置为1~10,但不宜设得太高  

         */    

        commend.add("-lameopts");    

        commend.add("vbr=3:br=128");    

        commend.add("-o");   

  

        commend.add(tarVideoPath);    

          

          

        try {   

             ProcessBuilder builder = new ProcessBuilder();   

             builder.command(commend);   

             Process process = builder.start();   

             doWaitFor(process);    

             process.destroy();   

            if (!checkfile(tarVideoPath)) {    

                logger.info(tarVideoPath + " is not exit!  processMencoderByTime 转换不成功 !");  

                return false;    

            }    

            return true;  

        } catch (Exception e) {    

            logger.error("【" + srcVideoPath + "】  processMencoderByTime 转换不成功 !",e);  

            return false;  

        }    

    }    

6.Mencoder 将源文件转换成其他格式 (自定义执行的shell):

[java] view plaincopy

/** 

     * Mencoder 将源文件转换成其他格式 (自定义执行的shell): 

     * 例如:mencoder -i 03.flv 03.avi  

     * @param prefix 前缀 

     * @param srcVideoPath 视频文件(原) 

     * @param middlefix 中间的字符转 

     * @param srcVideoPath 视频文件(转换后的路径)  

     * @param suffix 结束的字符串 

     * @return 

     */  

    public static boolean processMencoderShellScript(String prefix,String srcVideoPath,String middlefix,String tarVideoPath,String suffix) {    

        if (!checkfile(srcVideoPath)) {    

             logger.error("【" + srcVideoPath + "】  不存在 !");  

            return false;    

        }    

  

        List commend = new java.util.ArrayList();    

  

        commend.add(mencoderPath);    

  

        if(prefix != null && !prefix.equals("")){  

         commend.add(prefix);    

        }  

  

        commend.add(srcVideoPath);    

          

        if(middlefix != null && !middlefix.equals("")){  

         commend.add(middlefix);    

        }  

           

        commend.add(tarVideoPath);    

          

        if(suffix != null && !suffix.equals("")){  

         commend.add(suffix);    

        }  

          

        try {    

             ProcessBuilder builder = new ProcessBuilder();   

             builder.command(commend);   

             Process process = builder.start();   

             doWaitFor(process);    

             process.destroy();   

            if (!checkfile(tarVideoPath)) {    

                logger.info(tarVideoPath + " is not exit! processMencoderShellScript 转换不成功 !");  

                return false;    

            }    

            return true;    

        } catch (Exception e) {    

            logger.error("【" + srcVideoPath + "】 processMencoderShellScript  转换不成功 !");  

            return false;    

        }    

    }    

更多0

上一篇:java 实现视频转换通用工具类:获取视频元数据信息(一)

下一篇:java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)

查看原文