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

Insert picture description here

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("----添加水印视频生成成功----");
    }
 }

Guess you like

Origin blog.csdn.net/u010312671/article/details/108739115