全部产品
云市场

导入编辑

更新时间:2019-06-14 09:08:55

功能介绍

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

版本差异

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

编辑流程

视频编辑的流程如下:

1. 配置参数
2. 导入视频
3. 开始编辑
4. 设置特效
5. 预览控制
6. 合成导出

配置参数

初始化

本模块相关接口用来创建/销毁编辑器实例。

  • 创建编辑器

    1. AliyunEditorFactory#creatAliyunEditor(Uri uri)
  • 初始化编辑器

    1. AliyunIEditor#init(SurfaceView surfaceView);//设置预览窗口

导入视频

本模块相关接口可以用来在编辑开始前组装视频源,获取编辑初始化需要的URI路径。

  • 导入添加视频/照片

    1. AliyunIImport#addMediaClip(AliyunClip clip);
  • 导入移除视频/照片

    1. AliyunIImport#removeMedia(int id);
  • 导入更换顺序

    1. AliyunIImport#swap(int pos1, int pos2);
  • 导入生成视频源配置文件

    1. AliyunIImport#generateProjectConfigure();
  • 导入设置合成输出参数(帧率、码率、GOP、输出分辨率、编码器、质量等级、画面模式)

    1. AliyunIImport#setVideoParam(AliyunVideoParam param);

开始编辑

动态更新

本模块相关接口可以用来在编辑过程中动态裁剪视频、动态更换视频源、动态调整视频转场时间及转场效果。

  • 获取视频源管理器

    1. AliyunIEditor#getSourcePartManager();//获取视频源管理器
  • 在最后添加视频/照片

    1. AliyunIClipConstructor#addMediaClip(AliyunClip clip);
  • 在指定位置的添加视频/照片

    1. AliyunIClipConstructor#addMediaClip(int index, AliyunClip clip);
  • 更新替换指定位置的视频源

    1. AliyunIClipConstructor#updateMediaClip(int index, AliyunClip clip);
  • 删除最后一个视频源

    1. AliyunIClipConstructor#deleteMediaClip();
  • 删除某一个指定的视频源

    1. AliyunIClipConstructor#deleteMediaClip(int index);
  • 应用更新的视频源列表(旧的将清空)

    1. AliyunIClipConstructor#updateAllClips(List<AliyunClip> clips);
  • 获取当前视频源个数

    1. AliyunIClipConstructor#getMediaPartCount();
  • 获取当前视频源列表

    1. AliyunIClipConstructor#getAllClips();
  • 交换视频源顺序

    1. AliyunIClipConstructor#swap(int pos1, int pos2);
  • 应用更新的视频源

    1. AliyunIEditor#applySourceChange();//应用更新的视频源

设置特效

滤镜

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

  • 添加滤镜效果

    1. AliyunIEditor#applyFilter(EffectBean effect);
  • 移除滤镜效果

    1. AliyunIEditor#applyFilter(new EffectBean());//设置路径为null即表示移除滤镜

动效滤镜

该模块接口用来编辑动效滤镜(灵魂出窍等)效果。

  • 添加特效滤镜

    1. AliyunIEditor#addAnimationFilter(EffectFilter filter);
  • 移除特效滤镜

    1. AliyunIEditor#removeAnimationFilter(EffectFilter filter);
  • 清除所有的特效滤镜

    1. AliyunIEditor#clearAllAnimationFilter();

动图/气泡/文字

该模块接口用来编辑动图效果。

  • 使用UI控制器

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

    AliyunIEditor:编辑器核心类。AliyunPasterManager:UI控制框架中的贴图/字幕管理器,负责添加贴图。AliyunPasterController:UI控制框架中针对单个贴图的控制器,负责设置贴图显隐、移除贴图。还可以获取贴图的相关属性信息,比如显示时长等。AliyunPasterBaseView:UI控制框架中对贴图展示View的接口抽象。在不改动交互的情况下,如果开发者需要自定义贴图展示UI,则只需要实现该接口。

    • 获取动图管理器(AliyunPasterManager)

      1. AliyunIEditor#createPasterManager();
    • 设置动图显示区域的大小(==必须在AliyunIEditor#init之前调用该接口==)

      1. AliyunPasterManager#setDisplaySize(int width, int height);
    • 添加普通动图/气泡动图(返回UI controller——AliyunPasterController)

      1. AliyunPasterManager#addPaster(String path);//全局
      2. AliyunPasterManager#addPasterWithStartTime(String path, long startTime, long duration);//指定时间段内
    • 添加文字

      1. AliyunPasterManager#addSubtitle(String text, String font);//全局
      2. AliyunPasterManager#addSubtitleWithStartTime(String text, String font, long startTime, long duration);//指定时间段
    • 设置动图/气泡/文字的UI实现View(AliyunPasterBaseView)该接口必须调用

      1. AliyunPasterController#setPasterView(AliyunPasterBaseView pasterView);
    • 设置动图恢复的回调

      1. AliyunPasterManager#setOnPasterRestoreListener(OnPasterRestored listener);
    • 移除动图(将动图从UI框架中移除掉)

      1. AliyunPasterController#removePaster();
    • 显示动图(将动图渲染到视频上,并且从UI层面消失)

      1. AliyunPasterController#editCompleted();
    • 隐藏动图(将动图从视频渲染上移除掉,并且显示在UI层面)

      1. AliyunPasterController#editStart();
    • 创建一个贴图View层的预览播放器

      1. AliyunPasterController#createPasterPlayer(TextureView view);
    • 移除动图

      1. AliyunPasterController#removePaster();
  • 不使用UI控制器

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

    不使用UI控制器添加动图,指使用阿里云SDK提供的一套贴图渲染接口实现贴图功能。实际上,UI控制器框架内部也是使用这套接口来完成的。涉及的核心接口类包括:AliyunIEditor、AliyunPasterManager和AliyunPasterRender。

    AliyunIEditor:编辑器核心类。AliyunPasterManager——UI控制框架中的贴图/字幕管理器,负责添加贴图;AliyunPasterRender:贴图渲染核心类。该接口只用来完成贴图渲染到视频,而上层的UI交互逻辑需要开发者完成,且开发者要计算好对应位置、大小、旋转角度等信息。

    • 获取动图管理器(AliyunPasterManager)

      1. AliyunIEditor#createPasterManager();
    • 获取贴图渲染器(AliyunPasterRender)

      1. AliyunIEditor#getPasterRender();
    • 设置动图显示区域的大小(==必须在AliyunIEditor#init之前调用该接口==)

      1. AliyunPasterRender#setDisplaySize(int width, int height);
      2. AliyunPasterManager#setDisplaySize(int width, int height);
    • 添加动图

      1. AliyunPasterRender#addEffectPaster(EffectPaster paster);
    • 显示动图

      1. AliyunPasterRender#showPaster(EffectPaster paster);
    • 隐藏动图

      1. AliyunPasterRender#hidePaster(EffectPaster paster);
    • 移除动图

      1. AliyunPasterRender#removePaster(EffectPaster paster);
    • 设置贴图保存和恢复的回调

      1. AliyunPasterRender#setOnPasterResumeAndSave(OnPasterResumeAndSave listener);

静态贴纸

  • 添加静态贴纸

    1. AliyunIEditor#addImage(EffectPicture picture);
  • 移除静态贴纸

    1. AliyunIEditor#removeImage(EffectPicture picture);

水印

  1. AliyunIEditor#applyWaterMark(String imgPath, float sizeX, float sizeY, float posX, float posY);

片尾水印

  1. AliyunIEditor#addTailWaterMark(String imagePath, float sizeX, float sizeY, float posX, float posY, long durationUs);

转场

  • 添加转场配置导入添加视频/照片时可以配置转场信息

    1. AliyunVideoClip#setTransition(TransitionBase transition) //视频加转场
    2. AliyunImageClip#setTransition(TransitionBase transition) //图片加转场
  • 更新转场配置更新视频源时可以修改转场信息,并且更新转场信息

    1. AliyunEditor#setTransition(int index, TransitionBase transition) //设置一个转场,index为转场位置,从0开始记
    2. AliyunEditor#setTransition(Map<Integer, TransitionBase> transitions) //设置多个转场

帧动画

针对非流资源可以添加帧动画效果。

  • 添加帧动画

    1. AliyunEditor#addFrameAnimation(ActionBase action)
  • 移除帧动画

    1. removeFrameAnimation(ActionBase action)

MV

  • 添加MV

    1. AliyunIEditor#applyMV(EffectBean effect);
  • 移除MV

    1. AliyunIEditor#applyMV(null);//设置为null表示移除

背景音乐/多段配音

  • 添加背景音乐/配音,音乐不受时间特效影响,配音受时间特效影响

    1. AliyunIEditor#applyMusic(EffectBean effect);//音乐
    2. AliyunIEditor#applyDub(EffectBean effect);//配音
  • 移除背景音乐/配音

    1. AliyunIEditor#removeMusic(EffectBean effect);//音乐
    2. AliyunIEditor#removeDub(EffectBean effect);//配音
  • 调整背景音乐/配音与原音的比重

    1. AliyunIEditor#applyMusicMixWeight(int id, int weight);
  • 单独调整指定音频流的音量(背景音乐/配音/原音)

    1. AliyunIEditor#applyMusicWeight(int id, int weight);
  • 去噪(比较消耗资源,慎用)

    1. AliyunIEditor#denoise(int id, boolean needDenoise)

音效

SDK支持对每路音频流设置音效,目前提供的音效包括萝莉,大叔,混响,回声等。

  • 设置单路流音效

id: 指定的音频流id, type: 特效类型, weight: 特效效果参数,0-100

  1. int audioEffect(int id, AudioEffectType type, int weight);
  • 删除某个音效

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

  1. int removeAudioEffect(int id, AudioEffectType type);

时间特效(变速、反复、倒放)

  • 变速

    1. AliyunIEditor#rate(float rate, long startTime, long duration, boolean needOriginDuration);
    2. //3.7.0版本开始变速接口可以针对多段视频/图片添加
  • 反复

    1. AliyunIEditor#repeat(int times, long startTime, long duration, boolean needOriginDuration);
  • 倒放

    1. AliyunIEditor#invert();
    2. 特别注意:对于GOP大于5的视频需要先转码,否则将无法倒播。对于视频GOP的检查可以用NativeParser#getMaxGopSize()来获取。转码时将GOP SIZE设置为1,即CropParam#setGop(1);
  • 删除变速特效

    1. AliyunIEditor#deleteTimeEffect(int id)

涂鸦

阿里云短视频SDK封装了一套涂鸦接口,包含画板、画笔等,整个涂鸦操作由涂鸦控制器(AliyunICanvasController)完成。画板:涂鸦对应的UI交互View,可以添加到UI交互的ViewGroup。画笔:一个android.graphics.Paint对象,开发者可以从外部设置,也可以使用默认画笔。

  • 获取涂鸦控制器(AliyunICanvasController)

    1. AliyunIEditor#obtainCanvasController(Context context, int w, int h);
  • 获取涂鸦画板View

    1. AliyunICanvasController#getCanvas();
  • 判断是否由涂鸦

    1. AliyunICanvasController#hasCanvasPath();
  • 设置涂鸦渲染到视频上

    1. AliyunICanvasController#applyPaintCanvas();
  • 移除渲染到视频上的涂鸦

    1. AliyunICanvasController#removeCanvas();
  • 撤销上一笔

    1. AliyunICanvasController#undo();
  • 清除画布

    1. AliyunICanvasController#clear();
  • 设置当前画笔颜色

    1. AliyunICanvasController#setCurrentColor(int color);
  • 设置当前画笔的粗细

    1. AliyunICanvasController#setCurrentSize(float size);
  • 设置自定义画笔

    1. AliyunICanvasController#setPaint(Paint paint);
  • 重制涂鸦画板

    1. AliyunICanvasController#resetPaintCanvas();
  • 撤销该次所有涂鸦操作

    1. AliyunICanvasController#cancel();
  • 确认该次所有涂鸦操作

    1. AliyunICanvasController#confirm();
  • 释放资源

    1. AliyunICanvasController#release();

其他

  • 设置动态显示模式

    1. AliyunIEditor#addRunningDisplayMode(VideoDisplayMode mode, int streamId, long startTimeMills, long durationMills)
  • 设置模糊背景(填充模式下效果可见)

    1. AliyunIEditor#applyBlurBackground(int streamId, long startTimeMills, long durationMills, float blurRadius)

预览控制

该模块相关接口用来控制编辑器的预览播放。

  • 更换显示窗口

    1. AliyunIEditor#setDisplayView(SurfaceView surfaceView);
    2. AliyunIEditor#setDisplayView(TextureView textureView);//没有特殊需求不推荐使用该接口
  • 开始播放

    1. AliyunIEditor#play();
  • Seek

    1. AliyunIEditor#seek();
  • 强制绘制一帧

    1. AliyunIEditor#draw();
  • 暂停播放

    1. AliyunIEditor#pause();
  • 继续播放

    1. AliyunIEditor#resume();
  • 停止播放

    1. AliyunIEditor#stop();
  • 获取当前流的位置(不受时间特效影响)

    1. AliyunIEditor#getCurrentStreamPosition();
  • 获取当前播放的位置(受时间特效影响,即当前的播放时间)

    1. AliyunIEditor#getCurrentPlayPosition();
  • 获取流时长(不受时间特效影响)

    1. AliyunIEditor#getStreamDuration();
  • 获取播放总时长(受时间特效影响)

    1. AliyunIEditor#getDuration();
  • 设置静音播放

    1. AliyunIEditor#setAudioSilence(boolean silence);
  • 设置音量

    1. AliyunIEditor#setVolume(int volume);
  • 设置视频显示模式

    1. AliyunIEditor#setDisplayMode(VideoDisplayMode mode);
  • 填充模式下设置填充背景色

    1. AliyunIEditor#setFillBackgroundColor(int color);

合成输出

  • 合成

    1. AliyunIEditor#compose(AliyunVideoParam param, String outputPath, AliyunIComposeCallBack callback);
  • 取消合成

    1. AliyunIEditor#cancelCompose();