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

猜你喜欢

转载自blog.csdn.net/u010312671/article/details/108739115