Android使用FFmpeg给视频添加多个图片水印

简单说明一下用FFmpeg给视频加多个图片水印的方法,此处添加的是三个图片水印,没有测试更多的。
Android用的FFmpeg相关库网上已经有很多例子,这里就不详细说明了。

代码:

Runnable compoundRun=new Runnable() {
            @Override
            public void run() {
                String[] commands = new String[14];
                commands[0] = "ffmpeg";
                commands[1] = "-i";
                commands[2] = videoUrl;   //原视频地址
                commands[3] = "-i";
                commands[4] = image1; //图片水印1地址
                commands[5] = "-i";
                commands[6] = image2; //图片水印2地址
                commands[7] = "-i";
                commands[8] = image3; //图片水印3地址
                commands[9] = "-filter_complex";
                commands[10] = "[0:v][1:v]overlay=(main_w-overlay_w)/2:0[bkg1];[bkg1][2:v]overlay=(main_w-overlay_w)/2:main_h-overlay_h[bkg2];[bkg2][3:v]overlay=main_w-overlay_w:0";
                commands[11] = "-codec:a";  //音频选项,后加copy表示音频拷贝
                commands[12] = "copy";  //表示音频拷贝,无需处理音频时添加,可节省加水印时间
                commands[13] = outputUrl; //水印添加完成后的视频文件地址

                FFmpegKit.execute(commands, new FFmpegKit.KitInterface() {
                    @Override
                    public void onStart() {
                        Log.d("xxxxx","开始执行...");
                    }

                    @Override
                    public void onProgress(int progress) {
                        Log.d("xxxxx","执行进度..."+progress);
                    }

                    @Override
                    public void onEnd(int result) {
                        Log.d("xxxxx","执行完成...");
                    }
                });
            }
        };
        ThreadPoolUtils.execute(compoundRun);

-filter_complex解释:

[0:v][1:v]overlay=(main_w-overlay_w)/2:0[bkg1];[bkg1][2:v]overlay=(main_w-overlay_w)/2:main_h-overlay_h[bkg2];[bkg2][3:v]overlay=main_w-overlay_w:0

[0:v]表示原视频,[1:v]表示图片水印1,[2:v]表示图片水印2,[3:v]表示图片水印3
overlay表示水印覆盖的位置,main_w-overlay_w表示视频宽度-水印宽度,高度0
所以overlay=(main_w-overlay_w)/2:0表示顶部中间。[0:v][1:v]overlay=(main_w-overlay_w)/2:0表示图片水印1覆盖在原视频顶部中间位置,[bkg1]用来命名这一操作。

那么[bkg1][2:v]overlay=(main_w-overlay_w)/2:main_h-overlay_h[bkg2]就表示在第一个操作的基础上再覆盖图片水印2于视频底部中间的位置,并命名此操作为[bkg2]

最后[bkg2][3:v]overlay=main_w-overlay_w:0,在之前的操作基础上在视频右上角添加图片水印3。

操作名可自定义。


参考:

在Android中使用FFmpeg(android studio环境)
android端使用ffmpeg给视频添加图片水印
FFmpeg命令行语法之-filter_complex (Android环境)

你可能感兴趣的:(Android使用FFmpeg给视频添加多个图片水印)