智能生产制作提供专业在线的高级模板剪辑能力,针对视频制作中重复性内容和定制美化需求,您可以通过自定义模板和素材替换,实现批量化视频生产。通过阅读本文,您可以了解如何接入高级模板剪辑Web SDK。
使用说明
本文中引入的高级模板剪辑Web SDK的版本号1.0.0仅供参考。获取最新的版本,请参见高级模板剪辑工程——帮助信息。
操作步骤
- 引入高级模板剪辑Web SDK。
在项目前端页面文件中的
<head>
标签处引入高级模板剪辑Web SDK的CSS文件,如下所示:<head> <link rel="stylesheet" href="https://g.alicdn.com/thor-server/advanced-template-websdk/1.0.0/index.css"> </head>
在
<body>
标签处添加一个用以挂载剪辑界面的<div>
节点,并在<body>
标签末尾添加引入Web SDK的JS文件,同时添加一个用以调用Web SDK的<script>
节点。<body> <div id="aliyun-advanced-template" style="height:100vh"></div> // 您可以根据需要改变 container 高度 <script src="https://g.alicdn.com/thor-server/advanced-template-websdk/1.0.0/index.js"></script> <script> // 调用 SDK 的代码放在这里 </script> </body>
- 初始化高级模板剪辑Web SDK。
window.AliyunAdvancedTemplate.init(config);
- 参数
config
为对象,对象中的属性说明请参见config属性说明。 - 初始化函数
init()
示例请参见init()示例代码。
- 参数
config属性说明
参数 | 类型 | 必填 | 描述 | 引入版本 |
---|---|---|---|---|
locale | string | 否 | 界面语言,取值:
| 1.0.0 |
container | Element | 是 | Web SDK生成界面挂载的DOM节点。 | 1.0.0 |
projectId | string | 是 | 高级模板剪辑工程ID。 | 1.0.0 |
onBackButtonClick | () => void; | 否 | 左上角返回按钮响应函数,如果不传,则不显示此按钮。 | 1.0.0 |
updateEditingProject | (req: { ProjectId: string; Title?: string; TemplateId?: string; ClipsParam?: string }) => Promise<void>; | 是 | 修改剪辑工程标题或单击右上角保存响应函数,参数及返回值详情请参见UpdateEditingProject。 | 1.0.0 |
getEditingProject | (req: { ProjectId: string }) => Promise<Response<GetEditingProjectRsp>>; | 是 | 获取剪辑工程的元信息,例如:工程标题、模板ID等信息,参数及返回值详情请参见GetEditingProject。 | 1.0.0 |
getTemplateMaterials | (req: { TemplateId: string; FileList: string }) => Promise<Response<GetTemplateMaterialsRsp>>; | 是 | 获取高级模板的原始素材,参数及返回值详情请参见GetTemplateMaterials。 | 1.0.0 |
batchGetMediaInfos | (req: { AdditionType: 'FileInfo'; MediaIds: string }) => Promise<Response<BatchGetMediaInfosRsp>>; | 是 | 批量获取媒资信息,参数及返回值详情请参见BatchGetMediaInfos。 | 1.0.0 |
onChangeMaterial | () => Promise<MediaInfo>; | 是 | 编辑组素材区更换素材功能响应函数。返回的Promise对象需要resolve被选中媒资的信息。 | 1.0.0 |
onConfirmPreview | (req: { ProjectTitle: string; TemplateId: string; TemplateSize: [number, number]; ClipsParam: string; }) => Promise<Response<{ MediaId: string }>>; | 是 | 预览视频按钮响应函数,参数依次为:模板ID、模板宽高、模板素材参数。返回的Promise对象需要resolve生成预览视频的 MediaId。 | 1.0.0 |
submitMediaProducingJob | (req: { ProjectId: string; TemplateId: string; TemplateSize: [number, number]; ClipsParam: string; }) => Promise<void>; | 是 | 提交合成任务,参数依次为:工程ID、模板ID、模板宽高、模板素材参数。返回的Promise对象需要resolve。参数及返回值详情请参见SubmitMediaProducingJob。 | 1.0.0 |
init()示例代码
重要 Web SDK只负责界面交互,不会发起请求,您需要通过Web SDK调用请求逻辑。请求本身应该先发送给您自己的服务端,您自己的服务端再根据AccessKey信息(AccessKey ID和AccessKey Secret)转发给相关的阿里云OpenAPI。
// 注意,WebSDK 本身并不提供 request 这个方法,这里仅作为示例,您可以使用您喜欢的网络请求库,如 axios 等
const projectId = 'exampleId';
window.AliyunAdvancedTemplate.init({
locale: 'zh-CN',
container: document.getElementById('aliyun-advanced-template'),
projectId,
onBackButtonClick: () => {
// 跳转回列表页
window.location.href = '/mediaEdit/list/advanced';
},
updateEditingProject: req => {
return request('UpdateEditingProject', req);
},
getEditingProject: req => {
return request('GetEditingProject', req);
},
getTemplateMaterials: req => {
return request('GetTemplateMaterials', req);
},
batchGetMediaInfos: req => {
return request('BatchGetMediaInfos', req);
},
onChangeMaterial: () => {
return new Promise(resolve => {
// 假设 showMediaModal 是您编写的一个函数,这个函数将展示一个 modal 组件,modal 中通过调用 ICE 的
// ListMediaBasicInfos 接口展示媒资库中的媒资供用户进行选择,用户选择后点击确定按钮,触发 onOk 方法
showMediaModal({
onOk(media) {
resolve(media);
}
});
});
},
onConfirmPreview: ({ ProjectTitle, TemplateId, TemplateSize, ClipsParam }) => {
const height = 360; // 假设按照 360P 进行预览
let width = Math.floor((height / TemplateSize[1]) * TemplateSize[0]); // 根据模板的比例算出宽度
if (width % 2 === 1) width += 1; // 保证宽度是偶数
const filename = `${encodeURIComponent(
ProjectTitle
)}_preview_${new Date().toISOString()}.mp4`; // 预览视频文件名由您自定义,这里只是一种示例
const outputMediaConfig = JSON.stringify({
MediaURL: `https://exampleBucket.oss-exampleRegion.aliyuncs.com/examplePath/${filename}`,
Width: width,
Height: height
});
return request('SubmitMediaProducingJob', {
ProjectId: projectId,
TemplateId,
ClipsParam,
OutputMediaConfig: outputMediaConfig
});
},
submitMediaProducingJob: ({ TemplateId, TemplateSize, ClipsParam }) => {
return new Promise((resolve, reject) => {
// 假设 showSubmitModal 是您编写的一个函数,这个函数将展示一个 modal 组件,modal 中提供表单供用户填写合成信息
// 比如文件名、存储路径、格式、分辨率等,当用户提交表单时,这些填写的信息将被整理成 formValues 传入 onOk 里
showSubmitModal({
onOk: async (formValues) => {
const res = await request('SubmitMediaProducingJob', {
...formValues,
ProjectId: projectId,
TemplateId,
ClipsParam
});
if (res.code === '200') {
console.log('success');
resolve();
} else {
console.error('failed');
reject();
}
}
});
});
}
});