下面介绍一个通过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(); } } }