Android使用FFmpeg給視頻添加多個圖片水印

簡單說明一下用FFmpeg給視頻加多個圖片水印的方法,此處添加的是三個圖片水印,沒有測試更多的。
Android用的FFmpeg相關(guān)庫網(wǎng)上已經(jīng)有很多例子,這里就不詳細說明了。

代碼:

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";  //表示音頻拷貝,無需處理音頻時添加,可節(jié)省加水印時間
                commands[13] = outputUrl; //水印添加完成后的視頻文件地址

                FFmpegKit.execute(commands, new FFmpegKit.KitInterface() {
                    @Override
                    public void onStart() {
                        Log.d("xxxxx","開始執(zhí)行...");
                    }

                    @Override
                    public void onProgress(int progress) {
                        Log.d("xxxxx","執(zhí)行進度..."+progress);
                    }

                    @Override
                    public void onEnd(int result) {
                        Log.d("xxxxx","執(zhí)行完成...");
                    }
                });
            }
        };
        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]就表示在第一個操作的基礎(chǔ)上再覆蓋圖片水印2于視頻底部中間的位置,并命名此操作為[bkg2]

最后[bkg2][3:v]overlay=main_w-overlay_w:0,在之前的操作基礎(chǔ)上在視頻右上角添加圖片水印3。

操作名可自定義。


參考:

在Android中使用FFmpeg(android studio環(huán)境)
android端使用ffmpeg給視頻添加圖片水印
FFmpeg命令行語法之-filter_complex (Android環(huán)境)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容