简体   繁体   English

如何在 android 工作室中使用 ffmpeg 添加 tic tok 等水印

[英]How to Add Watermark like tic tok using ffmpeg in android studio

I am trying To add Watermark Like Tic Tok using FFMPEG but it's Not working我正在尝试使用 FFMPEG 添加 Watermark Like Tic Tok 但它不起作用

        GeneralUtils.checkForPermissionsMAndAbove(MainActivity.this, true);
        LoadJNI vk = new LoadJNI();
        try {

            //String complexCommand = "ffmpeg -y -i /storage/emulated/0/in.mp4 -strict experimental -vf transpose=1 -s 160x120 -r 30 -aspect 4:3 -ab 48000 -ac 2 -ar 22050 -b 2097k /storage/emulated/0/out.mp4";
            /*String complexCommand = "ffmpeg -i /storage/emulated/0/in.mp4 -framerate 30000/1001 -loop 1 -i /storage/emulated/0/abcd.jpg -filter_complex\n" +
                    "  \"[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]\" -map \"[v]\"\n" +
                    "  -map 0:a -c:v libx264 -c:a copy -shortest /storage/emulated/0/out.mp4";*/
            //String complexCommand = "ffmpeg -y -i /storage/emulated/0/in.mp4 -strict experimental -vf movie=/storage/emulated/0/abcd.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out] -s 320x240 -r 30 -b 15496k -vcodec mpeg4 -ab 48000 -ac 2 -ar 22050 /storage/emulated/0/out.mp4";
            String complexCommand = "ffmpeg -i /storage/emulated/0/in.mp4 -i /storage/emulated/0/abcd.jpg -filter_complex \\\n" +
                    "\"overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2\" \\\n" +
                    "-codec:a copy /storage/emulated/0/out.mp4";

            String workFolder = getApplicationContext().getFilesDir().getAbsolutePath();
            //String[] complexCommand = {"ffmpeg","-i", "/sdcard/videokit/in.mp4"};
             vk.run(GeneralUtils.utilConvertToComplex(complexCommand) , workFolder , getApplicationContext());

            Log.i("test", "ffmpeg4android finished successfully");
        } catch (Throwable e) {
            Log.e("test", "vk run exception.", e);
        }

but noting work for me但注意到为我工作

as you can i have no knowledge about FFMPEG so if you give answere please write in brief.如您所知,我对FFMPEG一无所知,所以如果您给出答案,请简要写下。

thank you.谢谢你。

Its nothing to do with android but below are simple ffmpeg commands它与 android 无关,但下面是简单的 ffmpeg 命令

Top-Left To Bottom-Right loop:从左上到右下的循环:

ffmpeg -i video.mp4 -i watermark.png -filter_complex \
 "[0:v][1:v]overlay=x='if(lt(mod(t,10),5),10,W-w-10)':y='if(lt(mod(t,10),5),10,H-h-10)'" \
 -codec:a copy out.mp4

Top-Right To Bottom-Left loop:从右上到左下的循环:

ffmpeg -i video.mp4 -i watermark.png -filter_complex \
 "[0:v][1:v]overlay=x='if(lt(mod(t,10),5),W-w-10,10)':y='if(lt(mod(t,10),5),10,H-h-10)'" \ 
 -codec:a copy out.mp4

Idea is very simple想法很简单

  • Take every 10sec duration, get remainder sec ie mod(t,10)每 10 秒持续一次,得到余数秒,即 mod(t,10)
  • if sec < 5, set top position else bottom position如果秒 < 5,设置顶部 position 否则底部 position

START HERE https://drive.google.com/file/d/0B2aT0QoEmtuaN0VJZ2Z4ODY3T2s/view File => New => import module => go find the folder downloaded at step1:从这里开始https://drive.google.com/file/d/0B2aT0QoEmtuaN0VJZ2Z4ODY3T2s/查看文件 => 新建 => 导入模块 => go 找到第 1 步下载的文件夹:

ffmpeg4android_demo_studio\ffmpeg4android_lib ffmpeg4android_demo_studio\ffmpeg4android_lib

Add permission in AndroidManifest.xml在 AndroidManifest.xml 中添加权限

if the version is higher than Android 6, add the following code in onCreate() of your Activity如果版本高于Android 6,在你的Activity的onCreate()中添加如下代码

 GeneralUtils.checkForPermissionsMAndAbove(MainActivity.this, false);

Alt+Enter if encounter red font, AndroidStudio would help you to modify "build.gradle(Module)" Alt+Enter 如果遇到红色字体,AndroidStudio 会帮你修改“build.gradle(Module)”

(Not sure if necessary) In build.gradle(Module) (不确定是否有必要)在 build.gradle(Module)

Android{....... defaultConfig{.... targetSdkVersion... ndk{ abiFilter "armeabi-v7a" } } }..... dependencies{... compile project(':ffmpeg4android_lib') } Android{....... defaultConfig{.... targetSdkVersion... ndk{ abiFilter "armeabi-v7a" } } }..... 依赖项{... compile project(':ffmpeg4android_lib') }

add following code in "gradle.properties"在“gradle.properties”中添加以下代码

android.useDeprecatedNdk=true android.useDeprecatedNdk=true

and then async project How to use WaterMarkHelper(by Johnny Tu) to add watermark on video After import "WaterMarkHelper.java" in your project, declare the following in your Activity然后是异步项目 How to use WaterMarkHelper(by Johnny Tu) 在视频上添加水印 在您的项目中导入“WaterMarkHelper.java”后,在您的活动中声明以下内容

WaterMarkHelper myHelper; WaterMarkHelper 我的助手;

initialize myHelper with arguments用 arguments 初始化 myHelper

Arguments description: Arguments 说明:

 String inputVideoPath        (ex:"/sdcard/input.mp4")
 String inputWaterMarkPath    (ex:"/sdcard/waterMark.png")
 String outputVideoPath        (ex:"/sdcard/output.mp4")
 String waterMarkX        the X-coordinate    
     Video width: main_w, Video height: main_h, Image Width: overlay_w, Image Height: overlay_h
 String waterMarkY

Download This下载这个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM