FFmpeg frame series: add multiple watermarks to videos
1. Business scenario
Requirements: Add a specified watermark image to the uploaded video.
2. Install FFmpeg framework
I will teach you in this five-minute JAVA code: FFmpeg implementation video demo (window version) is very detailed , install FFmepg on windows/Linux, I will not elaborate here.
3. Add a single watermark to the video
Watermark in the upper left corner:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=10:10 -codec:a copy end.mp4
Watermark in the lower left corner:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=10:main_h-overlay_h-10 -codec:a copy end.mp4
Watermark in the upper right corner:
ffmpeg -i xxx.mp4 -i shuiyin.png -filter_complex overlay=main_w-overlay_w-10:10 -codec:a copy end.mp4
Watermark in the lower right corner:
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
Watermark in the middle:
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. Add multiple watermarks to the video
Add multiple pictures, the following command line:
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";
Pass multiple watermark pictures and specify the position where the watermark is displayed.
4. Complete source code
4.1 Watermarking effect
4.2 Complete source code
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("----添加水印视频生成成功----");
}
}