AfterEffects模板云端渲染解决方案

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000 次 1年
简介: 本文介绍使用ICE高级模板渲染AfterEffects特效视频,通过组装不同的ClipsParam替换AE模板中的素材,达到视频批量生产的目的。

本文介绍使用ICE高级模板渲染AfterEffects特效视频,通过组装不同的ClipsParam替换AE模板中的素材,达到视频批量生产的目的。

概述

背景

Adobe AfterEffects能制作出丰富绚丽的视频特效而被设计师广泛使用。市面上有大量AE模板供设计师选择,设计师导入AE模板,并替换自己的素材,即可渲染出需要的视频。由于AE的封闭性,替换素材、批量合成这些工作往往还是需要人工来做,当有大量渲染任务时,人工成本巨高无比。

智能媒体生产ICE高级模板功能,专注于AE模板的批量渲染,且与OSS、VOD等服务无缝衔接,客户可以上传自己的AE模板和素材到云端,通过指定规则即可达到批量合成的目的。本篇介绍如何使用ICE进行AE模板的云端批量合成。

目标读者

使用AfterEffects进行视频合成的设计师和开发者,有批量合成AE特效视频的业务方。

方案介绍流程图

设计师通过AfterEffects设计视频模板,通过VE Exporter配置可替换素材,并导出ICE高级模板。

研发通过OpenAPI使用高级模板,根据业务需求替换模板中的素材渲染出多个视频。

方案优势

  • 云端素材替换

市面上的AE渲染平台依托于AE自有渲染引擎,上传一次AE工程只能渲染一个视频,达不到批量生产的目的。ICE可以在云端自由替换素材,上传一次模板可多次使用,通过不同的配置还能对素材进行预处理。同时ICE和OSS、VOD无缝衔接,可以直接引用OSS、VOD上的素材做渲染。

  • 高性能、低成本

智能媒体生产ICE依托于媒体处理服务MPS,有海量的GPU资源,可以从容应对高并发、大文件、高实时性的业务场景。ICE按照成片时长计费,用户即用即取,且保证高可用性。

方案实施

前提条件

  • 开通ICE服务。

  • 开通OSS或VOD服务。

  • 本地已安装Adobe AfterEffects。

操作步骤

步骤一:下载并安装VE Exporter

  1. VE Exporter下载及安装请参考插件下载和安装

  2. 安装完成后,即可在AfterEffects中打开VE Exporter。

步骤二:设置可替换参数,导出ICE高级模板

  1. 打开AE工程,在窗口栏中打开VE Exporter,选择创建标准模板2.0-载入合成,将源文件中的素材导入至插件素材列表。使用流程

  1. 点击不可修改文字,为需要替换的素材设置编辑组。可以每个可替换素材设置UI标记,在提交API合成时会用到。设置UI标记

  2. 点击导出模板,等待导出完成后,即可得到ICE高级模板文件(zip格式)。

步骤三:将高级模板注册到ICE

  1. 打开ICE控制台>云剪辑模板>高级模板。

  2. 点击上传模板,在弹框中选择步骤二得到的高级模板文件,并上传。上传模板

  3. 当模板状态为可用时,保存模板ID,即可通过OpenAPI来提交渲染了。模板状态

说明

也可通过OpenAPI来注册高级模板,参考:高级模板创建及使用

步骤四:使用模板ID和云端素材提交合成任务

  1. 根据模板ID获取高级模板

示例代码:

GetTemplateRequest request = new GetTemplateRequest();
request.setTemplateId("****20b48fb04483915d4f2cd8ac****");
GetTemplateResponse response = iceClient.getTemplate(request);
GetTemplateResponseBody.GetTemplateResponseBodyTemplate template = response.getBody().getTemplate();
System.out.println("templateId : " + template.getTemplateId());
System.out.println("clipsParam : " + template.getClipsParam());

返回示例:

{
    "RequestId":"******11-DB8D-4A9A-875B-275798******",
    "Template":{
        "TemplateId":"****20b48fb04483915d4f2cd8ac****",
        "Name":"标准模板",
        "Type":"VETemplate",
        "Status":"Available",
        "ModifiedSource":"OpenAPI",
        "CreateSource":"OpenAPI",
        "Config":"{\"oss_url\":\"http://your-bucket.oss-cn-shanghai.aliyuncs.com/object.zip\"}",
        "ClipsParam":"{\"name\":\"text\",\"media0\":\"mediaId\"}",
        "PreviewMedia":"",
        "CoverURL":""
    }
}

其中ClipsParam即为调用合成服务的ClipsParam参数,用户需要把mediaId换成自己的媒资id(或素材OSS地址),把text换成自己想替换的字幕文案。

其中mediaId,既可以换成图片的mediaId,也可以换成视频的mediaId。

  1. 替换ClipsParam中的text和mediaId

上一步获得的ClipsParam如下:

{
    "name":"text",
    "media0":"mediaId"
}

替换text和mediaId后即可作为ClipsParam参数调用合成服务:

{
    "name":"云小宝",
    "media0":"https://your-bucket.oss-cn-shanghai.aliyuncs.com/object01.jpg"
}

  1. 提交合成任务

调用 提交剪辑合成作业 接口提交合成任务,输入TemplateId、ClipsParam、成片地址,提交成功后可以得到JobId。

SubmitMediaProducingJobRequest request = new SubmitMediaProducingJobRequest();
request.setTemplateId("****20b48fb04483915d4f2cd8ac****");
request.setClipsParam("{\"Text7\":\"字幕7\",\"Text6\":\"字幕6\",\"Text5\":\"字幕5\",\"Text4\":\"字幕4\",\"Text3\":\"字幕3\",\"Text2\":\"字幕2\",\"Text1\":\"字幕1\",\"Text0\":\"字幕0\",\"Media3\":\"****20b48fb04483915d4f2cd8ac****\",\"Media2\":\"****20b48fb04483915d4f2cd8ac****\",\"Media1\":\"****20b48fb04483915d4f2cd8ac****\",\"Media0\":\"****20b48fb04483915d4f2cd8ac****\"}");
request.setOutputMediaConfig("{\"MediaURL\":\"http://your-bucket.oss-cn-shanghai.aliyuncs.com/object.mp4\"}");
SubmitMediaProducingJobResponse response = iceClient.submitMediaProducingJob(request);
System.out.println("jobid : " + response.getBody().getJobId());

根据JobId获取任务状态,当任务状态为Success时,视频渲染完成,即可通过地址访问视频了。

while (true) {
    GetMediaProducingJobRequest getMediaProducingJobRequest = new GetMediaProducingJobRequest();
    getMediaProducingJobRequest.setJobId(jobId);
    GetMediaProducingJobResponse getMediaProducingJobResponse = iceClient.getMediaProducingJob(getMediaProducingJobRequest);
    System.out.println("GetMediaProducingJobResponse : " + JSONObject.toJSONString(getMediaProducingJobResponse.body));
    String status = getMediaProducingJobResponse.getBody().getMediaProducingJob().getStatus();
    if ("Success".equals(status) || "Failed".equals(status)) {
        break;
    }
    Thread.sleep(1000);
}

常见问题

支持的AE功能、插件、素材类型有哪些

由于ICE使用VE引擎做AE工程渲染,暂不支持的AE全部功能,已支持的功能请参考:支持的AE功能支持的AE插件

设计师也可使用VE Cleaner将AE模板中暂时不被VE引擎支持的功能预处理掉,以实现模板在VE中正常渲染。

更多文档

欢迎加入智能媒体生产ICE官方答疑群咨询交流。二维码

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
XML Android开发 数据格式
简单使用BottomSheetBehavior实现底部弹窗
这次带来的是BottomSheetBehavior的简单使用,BottomSheetBehavior是Android Support Library23.2中引入的,它可以轻松实现底部动作条功能。
4982 0
|
11月前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
929 243
|
域名解析 应用服务中间件 对象存储
解决阿里云oss图片浏览器访问直接下载而不是打开
解决阿里云oss图片浏览器访问直接下载而不是打开
7259 0
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
315 2
|
自然语言处理 数据可视化 Java
用Python手把手教你WordCloud可视化
用Python手把手教你WordCloud可视化
|
人工智能 自然语言处理 搜索推荐
阿里推出 AtomoVideo 高保真图生视频框架,兼容多种文生图模型
【2月更文挑战第17天】阿里推出 AtomoVideo 高保真图生视频框架,兼容多种文生图模型
1296 5
阿里推出 AtomoVideo 高保真图生视频框架,兼容多种文生图模型
|
开发框架 JavaScript 前端开发
比较两个突出的node.js框架:koa和express
接上文讲述了 koa框架,这边文章比较一下这两个突出的node.js框架:koa和express
|
存储 NoSQL 容灾
数据库非功能需求分析
本文探讨了业务研发在技术设计中如何满足非功能需求,重点关注数据库系统的角色。内容涵盖数据库的可用性、可靠性、性能、可修改性、安全性及成本。文章强调了根据业务场景选择合适的数据类型(如关系型、非关系型、内存型、图数据库和时间序列数据库)以及考虑数据容量和增长速度。对于性能需求,讨论了响应时间、吞吐量和并发处理能力。此外,还提到了升级路径、兼容性、备份方案和成本控制(硬件、软件和人力成本)在数据库管理中的重要性。
502 0
解决Node.js mysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题
mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、JavaScript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在使用过程中,出现了“ER_NOT_SUPPORTED_AUTH_MODE”问题。
10769 1
|
PHP 开发工具
阿里云OpenAPI的PHP SDK
阿里云OpenAPI的PHP SDK
465 3