android利用EpMedia给录像添加时间水印

413 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

做出来的例子效果如下:

这里写图片描述

第一步:集成EpMedia,

步骤在大神的github上都有,地址如下: github.com/yangjie1093…

添加时间水印,我的方法是我认为的笨方法,如果有别的好方法,可以告诉我一下。

首先在手机录屏开始的时候记录下开始时间,录屏结束的时候记录下结束时间,

然后把开始时间转换成String字符串,然后在用EpMedia 在视频的指定位置添加文字,让文字显示到时间为一秒。

再把开始时间加一秒,然后重复以上步骤,这样达到添加时间水印的效果。

代码入下:

String str1 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/TTF/msyh.ttf";
EpVideo epVideo = new EpVideo(videoUrl);
outPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/out1.mp4";
//根据开始时间还有视频的长度来添加文字
setText(epVideo, str1, duration);

EpEditor.exec(epVideo, new EpEditor.OutputOption(outPath), new OnEditorListener() {
         @Override
         public void onSuccess() {
              Log.e("aaa", "onSuccess-->");
         }

         @Override
         public void onFailure() {
              Log.e("aaa", "onFailure-->");
         }

         @Override
         public void onProgress(float v) {
              int i = (int) (v * 100);
              Log.e("aaa", "onProgress-->" + i);
         }
     });


    private void setText(EpVideo epVideo, String str1, int duration) {

        long start_mm = System.currentTimeMillis();

        if (duration > 0) {
            for (int i = 0; i < (duration + 1); i++) {
	         //把时间转换成字符串
                String s = setStringDate(start_mm);
                start_mm = start_mm + 1000;
                epVideo.addText(new EpText(10, 10, 70, EpText.Color.Red, str1, s, new EpText.Time(i, (i + 1))));
            }
        }

    }

注意:

在把时间装换成String字符串的时候,要先根据冒号(:)分割字符串,把冒号(:)使用转义符如下,不然会报错:

String[] split1 = split[1].split(":");
String str = split1[0] + "\\:" + split1[1] + "\\:" + split1[2];

还有就是经过测试发现 那个添加文字的时候 new EpText.Time(3,5),3和5分别代表开始时间 和 结束时间,5不是持续时间。

//参数分别是添加位置的X,Y坐标,文字的字号(单位px),文字颜色,字体文件的路径,内容,Time类为显示的起始时间和结束时间
epVideo.addText(new EpText(10,10,35,"red",ttfPath,text,new EpText.Time(3,5)));

在手机根目录新建一个名为TTF 的文件夹里面放一个为ttf格式的字体。就可以了,添加好时间水印的视屏放在了手机根目录里 名为 out1.MP4.

想看例子的的点击这里