扫一扫咨询方案
English
中文
English
登录/注册

{user.username}

ID: {user.id}

剪辑 SDK 文档

SDK > iOS SDK > 剪辑特效类—SXEffect

剪辑特效类—SXEffect

更新时间 : 2021-07-12 13:50:01

SXEffect

特效类包含转场,文字动画,滤镜,视频特效等,可以通过type属性判断。

需要通过添加入轨道或者主轨道组来初始化,不独立存在。

特效有不同的时间应用方式:

typedef enum : NSUInteger {
    SXEffectTimeFollowStart,                // 效果时间跟随轨道start time
    SXEffectTimeFollowDisplayTime,          // 效果时间跟随轨道display time
    SXEffectTimeFollowEnd,                  // 效果时间反向跟随轨道out time(display + duration)
    SXEffectTimeFollowWholeProcess          // 效果时间与轨道显示时间保持一致
}SXEffectTimeFollowType;
/**
 * 获取效果跟随轨道时间方式
 * @note 例如跟随轨道开始时间与轨道一同开始、跟随轨道的结束时间与轨道一同结束等,默认跟随方式为kFollowDisplayTime
 */
@property (nonatomic, assign) SXEffectTimeFollowType followType;
/**
 * 不同时间跟随方式followOffsetTime的参照时间是不一样的,跟随方式祥见SXEffectTimeFollowType类型说明
 * kFollowStart:效果开始时间为相对于轨道开始时间的局部时间
 * kFollowDisplayTime: 效果开始时间为相对于轨道开始显示时间的局部时间
 * kFollowEnd: 效果开始时间为相对于轨道结束时间的局部时间,并且时间方向为反向
 * kFollowWholeProcess:无效,效果于轨道显示时间一致,同时开始同时结束
 */
@property (nonatomic, assign) double followOffsetTime;
  1. SXFilterEffect 滤镜

    1. 通过滤镜资源的路径来初始化。

    2. 可以通过轨道获得上面应用的所有滤镜,或者和ID来获取相对应的滤镜。

    3. 可以替换资源来切换效果。

    4. 可以设置透明度修改滤镜的程度。

    5. 可以添加在多媒体轨道上。

      //example:
      SXMediaTrack *track = (SXMediaTrack *)_model.track;
      if (!_currentFilter || !model.folderPath) {
      //移除该轨道上所有滤镜
      for (SXFilterEffect *filter in [track getFilters]) {
          [track removeFilter:filter.getEffectId];
      }
      _currentFilter = nil;
      }
      SXResource *resource = [[SXResource alloc] initWithType:SXResourceTypeFilter path:model.folderPath];
      if (_currentFilter) {
      //滤镜设置新的资源路径
          [_currentFilter setResource:resource];
      }else {
      //轨道中添加一个滤镜
          _currentFilter = [track addFilter:resource index:0];
      //滤镜跟随方式为时间与轨道一致
          [_currentFilter setEffectFollowType:SXEffectTimeFollowTypeFollowWholeProcess];
      }
  2. SXAnimationEffect 动画特效

    1. 通过动画资源的路径来初始化。

    2. 可以通过轨道获得上面应用的所有动画,或者和ID来获取相对应的动画。

    3. 可以替换资源来切换效果。

    4. 可以通过 speed 或 durationOfOneCycle 来设置动画的速度。

    5. 注意动画时间不要叠加。

    6. 可以添加在多媒体轨道上。

      //example:
      SXMediaTrack *track = (SXMediaTrack *)_model.track;
      if (!_currentVideoAnimation || !model.folderPath) {
      //移除该轨道上所有动画
      for (SXAnimationEffect *animation in [track getAnimations]) {
          [track removeAnimation:animation.getEffectId];
      }
      _currentVideoAnimation = nil;
      }
      if (animationPath) {
      SXResource *resource = [[SXResource alloc] initWithType:SXResourceTypeAnimation path:animationPath];
      if (_currentVideoAnimation) {
         //动画设置新的资源路径
          [_currentVideoAnimation setResource:resource];
      }else {
      //轨道中添加一个动画
          _currentVideoAnimation = [track addAnimation:resource index:0];
      //动画为出场动画
          [_currentVideoAnimation setFollowType:SXEffectTimeFollowTypeFollowStart];
      }
      //设置动画时长
      _currentVideoAnimation.duration = _sliderView.value;
      //设置动画一次循环的时间
      _currentVideoAnimation.durationOfOneCycle = _sliderView.value;
      }
  3. SXVideoEffect 视频特效

    1. 通过视频特效资源的路径来初始化。

    2. 可以通过轨道获得上面应用的所有视频特效,或者和ID来获取相对应的视频特效。

    3. 可以替换资源来切换效果。

    4. 注意特效时间不要叠加。

    5. 可以添加在多媒体轨道和主轨道组上。

  4. SXTextAnimationEffect 文字动画特效

    1. 通过文字动画的路径来初始化。

    2. 可以通过文字轨道获得上面应用的所有动画,或者和ID来获取相对应的动画。

    3. 可以替换资源来切换效果。

    4. 可以通过 speed 或 durationOfOneCycle 来设置动画的速度。

    5. 注意动画时间不要叠加。

    6. 可以添加在文字轨道上。

  5. SXTrackAnimationEffect 轨道动画

    1. 通过轨道动画的路径来初始化。

    2. 可以通过贴纸轨道获得上面应用的所有动画,或者和ID来获取相对应的动画。

    3. 可以替换资源来切换效果。

    4. 可以通过 speed 或 durationOfOneCycle 来设置动画的速度。

    5. 注意动画时间不要叠加。

    6. 可以添加在贴纸轨道上。

  6. 内置特效

    typedef enum : NSUInteger {
    SXGenericEffectTypeColorAdjustment = 0,
    SXGenericEffectTypeChromaKey,
    SXGenericEffectTypeGaussianBlur,
    SXGenericEffectTypeFaceBeauty,
    SXGenericEffectTypeMultipleColorKey,
    SXGenericEffectTypeTrackMatte
    }SXGenericEffectType;

    以SXGenericEffectTypeColorAdjustment举例:

    1. 直接在轨道上添加颜色调节,后续可以调节相对应的参数

    2. 可以通过轨道获得上面应用的颜色调节,或者和ID来获取相对应的颜色调节。

    3. 可以通过 setAttribute 的相关方法调节参数, getAttributeValue 方法获取属性,相应属性的key和值类型参考文档内置特效

    4. 可以添加在多媒体轨道上。

      //example:
      SXMediaTrack *track = (SXMediaTrack *)_model.track;
      SXGenericEffect *colorAdujst = [track getGenericEffects].firstObject;
      if (!colorAdujst) {
          colorAdujst = [track addGenericEffect:SXGenericEffectTypeColorAdjustment index:0];
          [colorAdujst setFollowType:SXEffectTimeFollowWholeProcess];
          float value = [[colorAdujst getAttributeValue:SXColorSettingsBrightness] floatValue];
      }