智能生产制作提供专业在线的高级模板剪辑能力,针对视频制作中重复性内容和定制美化需求,您可以通过自定义模板和素材替换,实现批量化视频生产。通过阅读本文,您可以了解如何接入高级模板剪辑Web SDK。

使用说明

本文中引入的高级模板剪辑Web SDK的版本号1.0.0仅供参考。获取最新的版本,请参见高级模板剪辑工程——帮助信息

操作步骤

  1. 引入高级模板剪辑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>
  2. 初始化高级模板剪辑Web SDK。
    window.AliyunAdvancedTemplate.init(config);

config属性说明

参数类型必填描述引入版本
localestring界面语言,取值:
  • zh-CN(默认值):中文。
  • en-US:英文。
1.0.0
containerElementWeb SDK生成界面挂载的DOM节点。1.0.0
projectIdstring高级模板剪辑工程ID。1.0.0
onBackButtonClick() => void;左上角返回按钮响应函数,如果不传,则不显示此按钮。1.0.0
updateEditingProject(req: { ProjectId: string; Title?: string; TemplateId?: string; ClipsParam?: string }) => Promise<void>;修改剪辑工程标题或单击右上角保存响应函数,参数及返回值详情请参见UpdateEditingProject1.0.0
getEditingProject(req: { ProjectId: string }) => Promise<Response<GetEditingProjectRsp>>;获取剪辑工程的元信息,例如:工程标题、模板ID等信息,参数及返回值详情请参见GetEditingProject1.0.0
getTemplateMaterials(req: { TemplateId: string; FileList: string }) => Promise<Response<GetTemplateMaterialsRsp>>;获取高级模板的原始素材,参数及返回值详情请参见GetTemplateMaterials1.0.0
batchGetMediaInfos(req: { AdditionType: 'FileInfo'; MediaIds: string }) => Promise<Response<BatchGetMediaInfosRsp>>;批量获取媒资信息,参数及返回值详情请参见BatchGetMediaInfos1.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。参数及返回值详情请参见SubmitMediaProducingJob1.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();
          }
        }
      });
    });
  }
});