簡單說明一下用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)境)