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

java 实现视频转换通用工具类:视频加水印-通过Avs文件添加视频水印(五-2) java 实现视频转换通用工具类:获取视频元数据信息(一)java 实现视频转换通用工具类:视频截图-Ffmpeg(四)

2018年01月27日 ⁄ 综合 ⁄ 共 2538字 ⁄ 字号 评论关闭
下面介绍一个通过Avs文件添加视频水印:(注:只能用在windows 上,有些通知可能有需求

1.ffmpeg通过Avs文件添加视频水印
/**
      * ffmpeg通过Avs文件添加视频水印
      * @param avsPath avs文件路径
      * @param tarVideoPath 视频文件(新)
      * @return
      */
      public static boolean processFfmpegWmByAvs(String srcAvsPath,String tarVideoPath) {  
          if (!checkfile(srcAvsPath)) {  
        	  logger.error("【" + srcAvsPath + "】  不存在 !"); 
              return false;  
          }  
          
          //如果父目录不存在就创建一个
          tarVideoPath = BaseCommonUtil.replaceFliePathStr(tarVideoPath);
          BaseCommonUtil.mkdir(tarVideoPath.substring(0,tarVideoPath.lastIndexOf("/")));

          List<String> commend = new java.util.ArrayList<String>();  

          commend.add(ffmpegPath);
          
          commend.add("-y");  
          
          commend.add("-i");  
          
          commend.add(srcAvsPath);
          
          commend.add(tarVideoPath);  
          
          try {  
         	 ProcessBuilder builder = new ProcessBuilder(); 
              builder.command(commend); 
              Process process = builder.start(); 
              doWaitFor(process);  
              process.destroy(); 
              if (!checkfile(tarVideoPath)) {  
            	  logger.error("【" + srcAvsPath + "】 processFfmpegWmByAvs 视频添加水印不成功 !");
                  return false;  
              }  
              return true;  
          } catch (Exception e) {  
        	  logger.error("【" + srcAvsPath + "】processFfmpegWmByAvs  视频添加水印不成功 !");
              return false;  
          }  
      }  

2.生成Avs文件

/**
      * 生成Avs文件
      * @param srcPath  视频路径
      * @param tarAvsPath
      * @param waterMarkPath 水印图片路径
      * @param x
      * @param y
      * @param alpha
      * @return
      */
      public static boolean createAvsFile(String srcPath,String tarAvsPath,String waterMarkPath,int x,int y, float alpha){
		        if(!checkfile(srcPath)){   
		        	     logger.error("【" + srcPath + "】  视频文件不存在 !"); 
		                 return false;   
		          } 
		          
		          if(!checkfile(waterMarkPath)){   
		     	     logger.error("【" + waterMarkPath + "】  水印图片不存在 !"); 
		              return false;   
		         } 
		        
	            PrintWriter out=null;  
	            try {
	                //  这里设置avs文件的存放路径以及文件名
	                try {
	                	 StringBuffer n=new StringBuffer();
	                     n.append("video").append("=").append(" DirectShowSource ").append("(\"").append(srcPath).append("\")").append("\n");
	                     n.append("logo").append("=").append(" ImageSource ").append("(\"").append(waterMarkPath).append("\")").append("\n");
	                     n.append("logomask").append("=").append(" ImageSource ").append("(\"").append(waterMarkPath).append("\")").append("\n");
	                     //overlay参数
	                     n.append("overlay");
	                     n.append("(");
	                     n.append("video").append(","); //video
	                     n.append("logo").append(",");  //logo
	                     n.append("mask=logomask").append(",");  //mask
	                     n.append("y=").append(y).append(",");  //水印的纵坐标 y
	                     n.append("x=").append(x).append(",");  //水印的水平坐标  x
	                     n.append("mode=\"blend\"").append(",");  //水印模式:opacity
	                     n.append("opacity=").append(alpha);  //水印透明度
	                     n.append(")");
	                     n.append("\n");
						 out = new PrintWriter(new File(tarAvsPath));
						 out.print(n.toString());       
			             return true;
					} catch (FileNotFoundException e) {
						logger.error("创建【" + srcPath + "】createAvsFile  AVS文件不成功 !");
						return false;  
					}
	            } finally {
	            	if(out != null){
	            		 out.close();
	            	}
              }
     }


抱歉!评论已关闭.