短视频SDK支持基于AE模板剪同款的功能,即通过导入AE制作的模板,通过替换模板中的视频、图片、文字等元素,实时编辑与预览,最后导出生成新的同款视频。

版本支持

版本 是否支持
专业版 支持
说明 短视频SDK 3.35.0及以上版本才支持基于AE模板剪同款功能。
标准版 不支持
基础版 不支持

相关类功能

类名 功能
AliyunAETemplate 模板。
AliyunAETemplateAssetMedia 模板媒体类素材。
AliyunAETemplateAssetText 模板文字类素材。
AliyunAETemplateEditor 模板编辑器。
AliyunAETemplatePlayer 模板预览播放器。
AliyunAETemplateRender 模板渲染导出器。

使用限制

  • 仅3.35.0及以上版本的短视频SDK专业版支持基于AE模板剪同款功能。
  • 已购买并申请开通了剪同款模块,购买方式,请参见获取License
  • 使用基于AE模板剪同款功能,需要按全量集成的方式引入剪同款引擎库,详细方法,请参见pod方式集成(推荐)
  • 基于AE模板剪同款不支持armv7架构的真机和模拟器,请在arm64架构的真机下运行,可以通过以下API进行功能入口的控制。
    BOOL support = [AliyunAETemplateManager canSupport];
    if (support) {
        // 打开功能入口
    }

制作AE模板

创作剪同款的AE模板,请参见高级模板设计师手册

编辑模板

代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能


#import <AliyunVideoSDKPro/AliyunVideoSDKPro.h>


// 通过模板路径创建编辑器
self.editor = [[AliyunAETemplateEditor alloc] initWithTemplatePath:self.templatePath];

// 获取可替换素材列表
NSArray *array = self.editor.currentTemplate.replaceableAssets;

// 替换素材
AliyunAETemplateAsset *item = [array objectAtIndex:0];
if ([item isKindOfClass:AliyunAETemplateAssetMedia.class]) {
    AliyunAETemplateAssetMedia *mediaAsset = (AliyunAETemplateAssetMedia *)item;
    mediaAsset.replacedPath = @"filePath";
    [self.editor commit];
}
else if ([item isKindOfClass:AliyunAETemplateAssetText.class]) {
    AliyunAETemplateAssetText *textAsset = (AliyunAETemplateAssetText *)item;
    textAsset.replacedText = titleTextField.text;
    [self.editor commit];
}

// 替换背景音乐
[self.editor replaceAudio:@"musicPath"];

实时预览

代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

// 监听播放回调
self.editor.player.delegate = self
    // 开始播放
    [self.editor.player start];


#pragma mark - AliyunAETemplatePlayerDelegate

- (void)playerDidLoaded {
}

- (void)playerDidEnd {
}

- (void)playProgress:(double)progress {
}

- (void)playError:(NSInteger)errorCode {
}

渲染导出

代码中需要使用的参数详情,请参考接口文档。接口链接请参见相关类功能

// 监听渲染回调
self.editor.render.delegate = self
    // 开始渲染
    [self.editor.render start];


#pragma mark - AliyunAETemplateRenderDelegate

- (void)templateRenderStarted {
    NSLog(@"templage render started");
}

- (void)templateRenderFinished:(NSURL *)outputUrl {
    NSLog(@"templage render completed");
}

- (void)templateRenderCancelled {
    NSLog(@"templage render cancel");
}

- (void)templateRenderFailed:(NSError *)error {
    NSLog(@"templage render error:%@", error);
}

- (void)templateRenderProgress:(CGFloat)progress {
    NSLog(@"templage render progress:%f", progress);
}