现在的位置: 首页 > 综合 > 正文

java 实现视频转换通用工具类:视频截图-Ffmpeg(四) java 实现视频转换通用工具类:获取视频元数据信息(一)

2018年01月27日 ⁄ 综合 ⁄ 共 2433字 ⁄ 字号 评论关闭

  

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

 

 

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


1.ffmpeg 截图,自定义命令行

/**
       *  ffmpeg 截图,自定义命令行
       * @param srcVideoPath 源文件
       * @param shellLine 自定义shell命令行
       * @param tarImagePath 目标文件
       * @return
       */
       public static boolean processFfmpegImage(String srcVideoPath,String shellLine,String tarImagePath) {   
       	 if (!checkfile(srcVideoPath)) {  
       		logger.error("【" + srcVideoPath + "】  不存在 !");
                return false;  
            }  
           List<String> commend = new java.util.ArrayList<String>();  

           commend.add(ffmpegPath);  

           commend.add("-i");  

           commend.add(srcVideoPath);  
           
           commend.add(shellLine); 

           commend.add(tarImagePath);  

           try {  
               ProcessBuilder builder = new ProcessBuilder(); 
               builder.command(commend); 
               Process process = builder.start(); 
               InputStream is = process.getErrorStream(); 
               InputStreamReader inputStreamReader = new InputStreamReader(is); 
               BufferedReader inputBufferedReader = new BufferedReader( 
                   inputStreamReader); 
               String line = null; 
               StringBuilder stringBuilder = new StringBuilder(); 
              while ((line = inputBufferedReader.readLine()) != null) { 
                 stringBuilder.append(line); 
               } 
               inputBufferedReader.close(); 
               inputBufferedReader = null; 
               inputStreamReader.close(); 
               inputStreamReader = null; 
               is.close(); 
               is = null; 
               if (!checkfile(tarImagePath)) {  
            	   logger.info(tarImagePath + " is not exit! processFfmpegImage 转换不成功 !");
                   return false;  
               }  
               return true;  
           } catch (Exception e) {
        	   logger.error("【" + srcVideoPath + "】  processFfmpegImage 转换不成功 !");
               return false; 
           }
       }  

2.ffmpeg 截图,并指定图片的大小

/**
      * ffmpeg 截图,并指定图片的大小
      * @param srcVideoPath
      * @param tarImagePath 截取后图片路径
      * @param width 截图的宽
      * @param hight 截图的高
      * @param offsetValue 表示相对于文件开始处的时间偏移值 可以是分秒
      * @param vframes 表示截图的桢数
      * 
      * @return
      */
      public static boolean processFfmpegImage(String srcVideoPath,String tarImagePath,int width,int hight,float offsetValue,float vframes) {  
      	 if (!checkfile(srcVideoPath)) {  
      		  logger.error("【" + srcVideoPath + "】  不存在 !");
               return false;  
           }  
          List<String> commend = new java.util.ArrayList<String>();  

          commend.add(ffmpegPath);  

          commend.add("-i");  

          commend.add(srcVideoPath);  
          
          commend.add("-y");  

          commend.add("-f"); 
          
          commend.add("image2");  
          
          commend.add("-ss");  
          
          commend.add(offsetValue+"");  //在视频的某个插入时间截图,例子为5秒后
          
          commend.add("-vframes");  
          
          commend.add(vframes + "");  //截图的桢数
          
          commend.add("-s");  
          
          commend.add(width + "x" +hight); //截图的的大小

          commend.add(tarImagePath);  

          try {  
        	  ProcessBuilder builder = new ProcessBuilder(); 
              builder.command(commend); 
              Process process = builder.start(); 
              doWaitFor(process);  
              process.destroy(); 
              if (!checkfile(tarImagePath)) {  
            	  logger.info(tarImagePath + " is not exit!  processFfmpegImage 转换不成功 !");  
                  return false;  
              }  
              return true;  
          } catch (Exception e) {
        	  logger.error("【" + srcVideoPath + "】 processFfmpegImage  转换不成功 !");
              return false; 
          }
      }  

抱歉!评论已关闭.