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