FFmpeg框架系列:视频添加多个水印
1. 业务场景
需求:给上传的视频添加指定水印图片。
2. 安装FFmpeg框架
我在这篇五分钟JAVA代码教会你:FFmpeg实现视频试看(window版本)中写的十分详细,在windows/Linux安装FFmepg,此处我就不过多阐述了。
3. 视频添加单个水印
左上角打水印:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=10:10 -codec:a copy end.mp4
左下角打水印:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=10:main_h-overlay_h-10 -codec:a copy end.mp4
右上角打水印:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=main_w-overlay_w-10:10 -codec:a copy end.mp4
右下角打水印:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 -codec:a copy end.mp4
正中间打水印:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 -codec:a copy end.mp4
3. 视频添加多个水印
添加多个图片,如下命令行:
F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe -i F:\\ffmpegDemo\\aaa.mp4 -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -filter_complex overlay=10:10,overlay=10:main_h-overlay_h-10,overlay=main_w-overlay_w-10:10,overlay=main_w-overlay_w-10:main_h-overlay_h-10,overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 F:\\ffmpegDemo\\aaa1.mp4";
通过多个水印图片,并指定水印显示的位置。
4. 完整源代码
4.1 加水印效果
4.2 完整源代码
public class ExecWindowCMD {
public static void main(String[] args) {
//单个水印
AddWaterMark();
//多个水印
/*AddWaterMarkMore();*/
}
//添加单个水印
public static void AddWaterMark(){
String cmdStr = "F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe -i F:\\ffmpegDemo\\test.mp4 -i F:\\ffmpegDemo\\logo.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 F:\\ffmpegDemo\\output1.mp4";
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("c:/nircmd.exe elevate " + cmdStr);
InputStream in = process.getInputStream();
while (in.read() != -1) {
System.out.println(in.read());
}
in.close();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----添加水印视频生成成功----");
}
//添加多个水印(左上角,左下角,右上角,右下角,正中间)
public static void AddWaterMarkMore(){
String cmdStr = "F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe -i F:\\ffmpegDemo\\aaa.mp4 -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -i F:\\ffmpegDemo\\logo.png -filter_complex overlay=10:10,overlay=10:main_h-overlay_h-10,overlay=main_w-overlay_w-10:10,overlay=main_w-overlay_w-10:main_h-overlay_h-10,overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 F:\\ffmpegDemo\\aaa1.mp4";
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("c:/nircmd.exe elevate " + cmdStr);
InputStream in = process.getInputStream();
while (in.read() != -1) {
System.out.println(in.read());
}
in.close();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----添加水印视频生成成功----");
}
}