美文网首页多媒体科技Android 文章音视频处理学习
Android使用FFmpeg给视频添加多个图片水印

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

作者: aldonk | 来源:发表于2018-04-30 21:54 被阅读332次

    简单说明一下用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给视频添加多个图片水印

        本文链接:https://www.haomeiwen.com/subject/xtgzlftx.html