功能介绍

短视频SDK导入编辑功能提供视频编辑与导出功能,支持视频图片素材混合导入、提供滤镜、配音、时间特效、过渡效果等丰富的编辑效果,编辑核心类AliyunIEditor。

版本差异

版本 功能描述
专业版 支持所有功能。
标准版 支持除字幕、动图、MV外的其他功能。
基础版 不支持。

编辑流程

编辑流程 流程说明
配置参数 该模块相关接口用来创建/销毁编辑器。
导入视频 该模块相关接口可以用来在编辑开始前组装视频源,获取编辑初始化需要的URI路径。
开始编辑 该模块相关接口可以用来在编辑过程中动态裁剪视频、动态更换视频源、动态调整视频转场时间及转场效果。
设置特效 该模块接口用来编辑滤镜效果、动效滤镜(灵魂出窍等)效果、动图效果等。
预览控制 该模块相关接口用来控制编辑器的预览播放。
合成输出 该模块相关接口用来控制合成输出。

配置参数

配置项 配置实例
创建编辑器
AliyunEditorFactory#creatAliyunEditor(Uri uri);
初始化编辑器
AliyunIEditor#init(SurfaceView surfaceView);//设置预览窗口

导入视频

配置项 配置实例
导入添加视频/照片
AliyunIImport#addMediaClip(AliyunClip clip);
导入移除视频/照片
AliyunIImport#removeMedia(int id);
导入更换顺序
AliyunIImport#swap(int pos1, int pos2);
导入生成视频源配置文件
AliyunIImport#generateProjectConfigure();
导入设置合成输出参数(帧率、码率、GOP、输出分辨率、编码器、质量等级、画面模式)
AliyunIImport#setVideoParam(AliyunVideoParam param);

开始编辑

配置项 配置实例
获取视频源管理器
AliyunIEditor#getSourcePartManager();//获取视频源管理器
在最后添加视频/照片
AliyunIClipConstructor#addMediaClip(AliyunClip clip);
在指定位置的添加视频/照片
AliyunIClipConstructor#addMediaClip(int index, AliyunClip clip);
更新替换指定位置的视频源
AliyunIClipConstructor#updateMediaClip(int index, AliyunClip clip);
删除最后一个视频源
AliyunIClipConstructor#deleteMediaClip();
删除某一个指定的视频源
AliyunIClipConstructor#deleteMediaClip(int index);
应用更新的视频源列表(旧的将清空)
AliyunIClipConstructor#updateAllClips(List<AliyunClip> clips);
获取当前视频源个数
AliyunIClipConstructor#getMediaPartCount();
获取当前视频源列表
AliyunIClipConstructor#getAllClips();
交换视频源顺序
AliyunIClipConstructor#swap(int pos1, int pos2);
应用更新的视频源
AliyunIEditor#applySourceChange();//应用更新的视频源

设置特效

  • 滤镜

    该模块接口用来编辑滤镜效果。

    配置项 配置实例
    添加滤镜效果
    AliyunIEditor#applyFilter(EffectBean effect);
    移除滤镜效果
    AliyunIEditor#applyFilter(new EffectBean());//设置路径为null即表示移除滤镜
  • 动效滤镜
    该模块接口用来编辑动效滤镜(灵魂出窍等)效果。
    配置项 配置实例
    添加特效滤镜
    AliyunIEditor#addAnimationFilter(EffectFilter filter);
    移除特效滤镜
    AliyunIEditor#removeAnimationFilter(EffectFilter filter);
    清除所有的特效滤镜
    AliyunIEditor#clearAllAnimationFilter();
  • 动图/气泡/文字
    该模块接口用来编辑动图效果。
    • 使用UI控制器

      UI控制器添加动图,指阿里云SDK针对短视频常见的动图交互逻辑(缩放、旋转、镜像)封装的一套动图控制框架。涉及的核心接口类包括:AliyunIEditor、AliyunPasterManager、AliyunPasterController和AliyunPasterBaseView,在动图控制框架下进行贴图交互遵循Demo展示的交互规则。

      • AliyunIEditor:编辑器核心类。
      • AliyunPasterManager:UI控制框架中的贴图/字幕管理器,负责添加贴图。
      • AliyunPasterController:UI控制框架中针对单个贴图的控制器,负责设置贴图显隐、移除贴图。还可以获取贴图的相关属性信息,比如显示时长等。
      • AliyunPasterBaseView:UI控制框架中对贴图展示View的接口抽象。在不改动交互的情况下,如果开发者需要自定义贴图展示UI,则只需要实现该接口。
      配置项 配置实例
      获取动图管理器(AliyunPasterManager)
      AliyunIEditor#createPasterManager();
      设置动图显示区域的大小(==必须在AliyunIEditor#init之前调用该接口==)
      AliyunPasterManager#setDisplaySize(int width, int height);
      添加普通动图/气泡动图(返回UI controller——AliyunPasterController)
      AliyunPasterManager#addPaster(String path);//全局
      AliyunPasterManager#addPasterWithStartTime(String path, long startTime, long duration);//指定时间段内
      添加文字
      AliyunPasterManager#addSubtitle(String text, String font);//全局
      AliyunPasterManager#addSubtitleWithStartTime(String text, String font, long startTime, long duration);//指定时间段
      设置动图/气泡/文字的UI实现View(AliyunPasterBaseView)该接口必须调用
      AliyunPasterController#setPasterView(AliyunPasterBaseView pasterView);
      设置动图恢复的回调
      AliyunPasterManager#setOnPasterRestoreListener(OnPasterRestored listener);
      移除动图(将动图从UI框架中移除掉)
      AliyunPasterController#removePaster();
      显示动图(将动图渲染到视频上,并且从UI层面消失)
      AliyunPasterController#editCompleted();
      隐藏动图(将动图从视频渲染上移除掉,并且显示在UI层面)
      AliyunPasterController#editStart();
      创建一个贴图View层的预览播放器
      AliyunPasterController#createPasterPlayer(TextureView view);
      移除动图
      AliyunPasterController#removePaster();
    • 不使用UI控制器

      不使用UI控制器,需要开发者自主实现上层对动图的编辑交互,使用复杂度较高,不推荐。渲染动图只需要将动图素材的对象、对应位置、大小等信息传递给渲染器。

      不使用UI控制器添加动图,指使用阿里云SDK提供的一套贴图渲染接口实现贴图功能。实际上,UI控制器框架内部也是使用这套接口来完成的。涉及的核心接口类包括:AliyunIEditor、AliyunPasterManager和AliyunPasterRender。
      • AliyunIEditor:编辑器核心类。AliyunPasterManager——UI控制框架中的贴图/字幕管理器,负责添加贴图。
      • AliyunPasterRender:贴图渲染核心类。该接口只用来完成贴图渲染到视频,而上层的UI交互逻辑需要开发者完成,且开发者要计算好对应位置、大小、旋转角度等信息。
      配置项 配置实例
      获取动图管理器(AliyunPasterManager)
      AliyunIEditor#createPasterManager();
      获取贴图渲染器(AliyunPasterRender)
      AliyunIEditor#getPasterRender();
      设置动图显示区域的大小(==必须在AliyunIEditor#init之前调用该接口==)
      AliyunPasterRender#setDisplaySize(int width, int height);
      AliyunPasterManager#setDisplaySize(int width, int height);
      添加动图
      AliyunPasterRender#addEffectPaster(EffectPaster paster);
      显示动图
      AliyunPasterRender#showPaster(EffectPaster paster);
      隐藏动图
      AliyunPasterRender#hidePaster(EffectPaster paster);
      移除动图
      AliyunPasterRender#removePaster(EffectPaster paster);
      设置贴图保存和恢复的回调
      AliyunPasterRender#setOnPasterResumeAndSave(OnPasterResumeAndSave listener);
  • 静态贴纸
    配置项 配置实例
    添加静态贴纸
    AliyunIEditor#addImage(EffectPicture picture);
    移除静态贴纸
    AliyunIEditor#removeImage(EffectPicture picture);
  • 水印
    配置项 配置实例
    水印
    AliyunIEditor#applyWaterMark(String imgPath, float sizeX, float sizeY, float posX, float posY);
    片尾水印
    AliyunIEditor#addTailWaterMark(String imagePath, float sizeX, float sizeY, float posX, float posY, long durationUs);
  • 转场
    配置项 配置实例
    添加转场配置导入添加视频/照片时可以配置转场信息
    AliyunVideoClip#setTransition(TransitionBase transition); //视频加转场
    AliyunImageClip#setTransition(TransitionBase transition); //图片加转场
    更新转场配置更新视频源时可以修改转场信息,并且更新转场信息
    AliyunEditor#setTransition(int index, TransitionBase transition); //设置一个转场,index为转场位置,从0开始记
    AliyunEditor#setTransition(Map<Integer, TransitionBase> transitions); //设置多个转场
  • 帧动画
    配置项 配置实例
    添加帧动画
    AliyunEditor#addFrameAnimation(ActionBase action);
    移除帧动画
    removeFrameAnimation(ActionBase action);
  • MV
    配置项 配置实例
    添加MV
    AliyunIEditor#applyMV(EffectBean effect);
    移除MV
    AliyunIEditor#applyMV(null);//设置为null表示移除
  • 背景音乐/多段配音
    配置项 配置实例
    添加背景音乐/配音,音乐不受时间特效影响,配音受时间特效影响
    AliyunIEditor#applyMusic(EffectBean effect);//音乐
    AliyunIEditor#applyDub(EffectBean effect);//配音
    移除背景音乐/配音
    AliyunIEditor#removeMusic(EffectBean effect);//音乐
    AliyunIEditor#removeDub(EffectBean effect);//配音
    调整背景音乐/配音与原音的比重
    AliyunIEditor#applyMusicMixWeight(int id, int weight);
    单独调整指定音频流的音量(背景音乐/配音/原音)
    AliyunIEditor#applyMusicWeight(int id, int weight);
    去噪(比较消耗资源,慎用)
    AliyunIEditor#denoise(int id, boolean needDenoise);
  • 音效
    SDK支持对每路音频流设置音效,目前提供的音效包括萝莉、大叔、混响、回声等。
    配置项 配置实例
    设置单路流音效

    音效支持叠加操作,想要切换音效需要先删除上次设置的音效。

    • id:指定的音频流id。
    • type:特效类型。
    • weight:特效效果参数,0-100。
    int audioEffect(int id, AudioEffectType type, int weight);
    删除某个音效
    音效支持叠加操作,想要切换音效需要先删除上次设置的音效。
    int removeAudioEffect(int id, AudioEffectType type);
  • 时间特效
    配置项 配置实例
    变速
    AliyunIEditor#rate(float rate, long startTime, long duration, boolean needOriginDuration);
    //3.7.0版本开始变速接口可以针对多段视频/图片添加
    反复
    AliyunIEditor#repeat(int times, long startTime, long duration, boolean needOriginDuration);
    倒放
    AliyunIEditor#invert();
    特别注意:对于GOP大于5的视频需要先转码,否则将无法倒播。对于视频GOP的检查可以用NativeParser#getMaxGopSize()来获取。转码时将GOP SIZE设置为1,即CropParam#setGop(1);
    删除变速特效
    AliyunIEditor#deleteTimeEffect(int id);
  • 涂鸦
    阿里云短视频SDK封装了一套涂鸦接口,包含画板、画笔等,整个涂鸦操作由涂鸦控制器(AliyunICanvasController)完成。画板:涂鸦对应的UI交互View,可以添加到UI交互的ViewGroup。画笔:一个android.graphics.Paint对象,开发者可以从外部设置,也可以使用默认画笔。
    配置项 配置实例
    获取涂鸦控制器(AliyunICanvasController)
    AliyunIEditor#obtainCanvasController(Context context, int w, int h);
    获取涂鸦画板View
    AliyunICanvasController#getCanvas();
    判断是否由涂鸦
    AliyunICanvasController#hasCanvasPath();
    设置涂鸦渲染到视频上
    AliyunICanvasController#applyPaintCanvas();
    移除渲染到视频上的涂鸦
    AliyunICanvasController#removeCanvas();
    撤销上一笔
    AliyunICanvasController#undo();
    清除画布
    AliyunICanvasController#clear();
    设置当前画笔颜色
    AliyunICanvasController#setCurrentColor(int color);
    设置当前画笔的粗细
    AliyunICanvasController#setCurrentSize(float size);
    设置自定义画笔
    AliyunICanvasController#setPaint(Paint paint);
    重制涂鸦画板
    AliyunICanvasController#resetPaintCanvas();
    撤销该次所有涂鸦操作
    AliyunICanvasController#cancel();
    确认该次所有涂鸦操作
    AliyunICanvasController#confirm();
    释放资源
    AliyunICanvasController#release();
  • 其他
    配置项 配置实例
    设置动态显示模式
    AliyunIEditor#addRunningDisplayMode(VideoDisplayMode mode, int streamId, long startTimeMills, long durationMills);
    设置模糊背景(填充模式下效果可见)
    AliyunIEditor#applyBlurBackground(int streamId, long startTimeMills, long durationMills, float blurRadius);

预览控制

配置项 配置实例
更换显示窗口
AliyunIEditor#setDisplayView(SurfaceView surfaceView);
AliyunIEditor#setDisplayView(TextureView textureView);//没有特殊需求不推荐使用该接口
开始播放
AliyunIEditor#play();
Seek
AliyunIEditor#seek();
强制绘制一帧
AliyunIEditor#draw();
暂停播放
AliyunIEditor#pause();
继续播放
AliyunIEditor#resume();
停止播放
AliyunIEditor#stop();
获取当前流的位置(不受时间特效影响)
AliyunIEditor#getCurrentStreamPosition();
获取当前播放的位置(受时间特效影响,即当前的播放时间)
AliyunIEditor#getCurrentPlayPosition();
获取流时长(不受时间特效影响)
AliyunIEditor#getStreamDuration();
获取播放总时长(受时间特效影响)
AliyunIEditor#getDuration();
设置静音播放
AliyunIEditor#setAudioSilence(boolean silence);
设置音量
AliyunIEditor#setVolume(int volume);
设置视频显示模式
AliyunIEditor#setDisplayMode(VideoDisplayMode mode);
填充模式下设置填充背景色
AliyunIEditor#setFillBackgroundColor(int color);

合成输出

配置项 配置实例
合成
AliyunIEditor#compose(AliyunVideoParam param, String outputPath, AliyunIComposeCallBack callback);
取消合成
AliyunIEditor#cancelCompose();