首页 虚拟数字人开放平台 开发指南 3D数字人视频合成使用指南

3D数字人视频合成使用指南

3D数字人视频合成服务为您提供输入文本合成为3D虚拟数字人指定格式的视频,并且通过返回的视频链接下载视频内容。

功能介绍

  • 形象配置

    • 支持选择不同3D数字人形象,并进行装扮。具体可参考:配置数字人应用

    • 支持通过参数指定本次视频合成需要使用的3D数字人形象,具体数字人形象列表可以从平台3D资产中心获取(获取3D数字人形象code

  • 数字人驱动

    • 支持数字人表情、口型、动作驱动

  • 视频编码信息

    • 编码格式: h264

    • 帧率: 30FPS

  • 视频格式

    • 目前支持非透明视频和透明视频,可以通过接口参数IsAlpha来指定是否开启透明

    • 针对非透明视频目前视频格式只有MP4格式

      • MP4,固定绿幕色值的mp4视频, 色值为#0a9a38

    • 针对透明视频目前支持MOV、WEBM两种视频格式,可以通过接口参数AlphaFormat来指定透明视频格式:1、webm 2、mov

      • MOV:透明格式,生成的视频文件大小比较大

      • WEBM:透明格式,生成的视频文件大小相对MOV较小

  • 视频分辨率

    • 720P 和 1080P 横竖屏

  • 字幕

    • 支持字幕,字幕作为一个独立于视频的单独文件,支持下载

  • 背景图

    • 支持通过URL指定视频背景图,背景图分辨率需要与视频合成的分辨率保持一致,图片格式支持jpg、jpeg、png三种格式

  • 自定义数字人机位

    • 支持通过参数指定3D数字人的机位,目前支持以下7个机位,具体每个机位效果可以参考:数字人机位效果展示

      • 0: 全身近景机位

      • 1: 头部近景机位

      • 2: 全身远景机位

      • 3: 半身近景机位

      • 4: 半身远景机位

      • 5: 左边近景机位

      • 6: 右边近景机位

  • 自定义数字人角度

    • 支持通过参数指定3D数字人的角度,目前支持以下3个角度,具体每个角度效果可以参考:数字人角度效果展示

      • 0: 正面

      • 1: 左侧30度

      • 2: 右侧30度

  • 自定义数字人动作

    • 支持通过文本插入标签方式指定数字人播报动作,实现更加灵活的数字人动作控制,

  • 最大存储时间

    • 支持7天在线存储,7天后视频内容将无法下载

  • 支持最大输入1000个文本字符

    • 支持纯文本进行数字人视频合成

    • 支持阿里云语音合成服务的SSML标记语言,针对一些文本读音、数字人动作等进行自定义,参考:SSML使用

重要
  • 如果您期望获取透明通道的视频,可以直接设置IsAlpha为true,平台将生产MOV格式的透明视频,生成的视频文件大小比较大,1分钟时长的视频大小可能达到1G;同时您还可以设置IsAlpha为false,从而生成MP4视频格式,

  • 视频文件大小会小很多,然后通过第三方媒体制作工具针对绿幕视频进行抠图得到透明视频,我们已经提供绿幕相关色值。

  • 视频文件和字幕文件有效下载时间是7天,请在生成完成之后尽快下载视频和字幕,过期将无法再下载。

SSML使用

在Text字段直接传入SSML文本即可。SSML规则参考数字人服务SSML使用指南

前置条件

下述介绍使用3D数字人视频合成需要提前完成的步骤,每个步骤都需要完成才能顺利使用3D数字人视频合成服务。

  1. 申请阿里云账号, 具体参考准备工作

  2. 申请购买权限,完成购买开通服务, 具体参考开通服务

  3. 进入虚拟数字人开放平台创建并配置应用, 具体创建和配置流程可以参考:创建并配置数字人应用

说明

创建应用时需要选择离线数字人。

技术接入

警告

请确保完成上述全部前置步骤,获取到阿里云账号的AccessKey ID和AccessKey Secret(点击获取),以及获取到对应数字人应用的tenantId和appId。

下面介绍使用3D数字人视频合成服务的完整对接步骤以及涉及到API。虚拟数字人开放平台的服务端API采用OpenAPI形式对外输出,具体对接方案见:服务端 API 接入

使用流程:视频合成服务是离线进行视频合成,所以流程是先提交视频合成任务,得到任务TaskUuid,然后拿着TaskUuid调用查询视频合成服务信息查询API,查询任务状态(这里需要轮询,轮询周期最小间隔1s,建议3s),直到任务状态显示为已完成或者失败,状态为已完成的时候可以获取到对应的视频下载URL,然后直接通过URL可以下载到对应的视频。

1. SDK版本要求

重要

该功能需要升级虚拟数字人开放平台服务端SDK版本至1.0.5及以上。

2. 提交3D数字人视频合成任务

下面介绍通过Java调用OpenAPI提交一个3D数字人视频合成任务的代码示例, 并且返回任务UUID。

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;
import com.aliyun.avatar20220130.*;
import com.aliyun.avatar20220130.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
import com.aliyun.teautil.*;
import com.aliyun.teautil.models.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.avatar20220130.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "avatar.cn-zhangjiakou.aliyuncs.com";
        return new com.aliyun.avatar20220130.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.avatar20220130.Client client = Sample.createClient("accessKeyId", "accessKeySecret");
        SubmitTextTo3DAvatarVideoTaskRequest submitTextTo3DAvatarVideoTaskRequest = new SubmitTextTo3DAvatarVideoTaskRequest();
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.submitTextTo3DAvatarVideoTaskWithOptions(submitTextTo3DAvatarVideoTaskRequest, runtime);
        } catch (TeaException error) {
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

接口描述

参数

类型

是否必需

说明

App

Object

开发者应用信息。

App.AppId

String

开发者信息AppId,请参考接入数字人应用

Title

String

任务标题:

  • 任务标题最长64个字。

  • UTF-8编码格式

Text

String

合成的文本,最大支持1000个字符;同时支持纯文本和SSML文本

VideoInfo

Object

视频设置。

VideoInfo.Resolution

Number

视频分辨率, 默认1

  • 1:720x1280竖屏

  • 2:1280x720横屏

  • 3:1080x1920竖屏

  • 4:1920x1080横屏

VideoInfo.IsAlpha

Boolean

是否需要透明通道, 默认false。

  • true: 开启透明通道,视频格式为MOV

  • false:不开启透明通道,视频格式为MP4,包含绿幕

VideoInfo.AlphaFormat

Integer

透明视频格式,针对透明视频目前支持MOV、WEBM两种视频格式:1、webm 2、mov

VideoInfo.isSubtitles

Boolean

是否需要字幕,默认值:true

  • true: 生成字幕,字幕文件作为独立文件提供下载链接进行下载。

  • false:不生成字幕。

VideoInfo.BackgroundImageUrl

String

指定视频背景图URL。

  • 必须是有效可访问的URL背景图片地址,且背景图片的分辨率必须要与生成的视频分辨率保持一致。

  • 目前支持jpg,jpeg,png的图片格式。

(请升级SDK到最新版本使用)

AvatarInfo

Object

数字人相关配置

AvatarInfo.Locate

Integer

数字人机位

  • 0: 全身近景机位,默认机位

  • 1: 头部近景机位

  • 2: 全身远景机位

  • 3: 半身近景机位

  • 4: 半身远景机位

  • 5: 左边近景机位

  • 6: 右边近景机位

具体每个机位效果可以参考:数字人机位效果展示

AvatarInfo.Angle

Integer

数字人角度

  • 0: 正面,默认角度

  • 1: 左侧30度

  • 2: 右侧30度

具体每个角度效果可以参考:数字人角度效果展示

AvatarInfo.code

String

数字人形象code,从虚拟数字人开放平台-3D资产页面获取,不传则使用应用配置的默认形象点击查看形象code获取方法

说明

详细的API信息可以参考提交3D数字人文本视频合成任务

3. 获取3D数字人视频合成任务详情

当您提交一个任务并且获取到任务UUID之后, 您可以通过上面API返回的任务UUID获取任务详情。

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;
import com.aliyun.avatar20220130.*;
import com.aliyun.avatar20220130.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
import com.aliyun.teautil.*;
import com.aliyun.teautil.models.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.avatar20220130.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "avatar.cn-zhangjiakou.aliyuncs.com";
        return new com.aliyun.avatar20220130.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.avatar20220130.Client client = Sample.createClient("accessKeyId", "accessKeySecret");
        GetVideoTaskInfoRequest getVideoTaskInfoRequest = new GetVideoTaskInfoRequest();
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.getVideoTaskInfoWithOptions(getVideoTaskInfoRequest, runtime);
        } catch (TeaException error) {
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}
说明

详细的API信息可以参考:获取视频合成任务详细。当任务状态为已完成时,可以从TaskResult中获取到对应的视频和字幕的URL,然后可以进行视频和字幕文件的下载。

警告

该接口调用方可能会进行轮询调用,强烈建议轮询间隔不要小于1s,建议设置为3s,当任务量较大的情况要增加间隔时间,避免出现接口限流异常(接口返回“error :code: 400, Request was denied due to user flow control. request id: xx-xx-xx-xx-xx”则表示触发了接口限流)。

4. 取消3D数字人视频合成任务

针对未开始的视频合成任务,您可以通过返回的任务UUID进行取消任务,已开始或者已完成的任务无法取消。

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;
import com.aliyun.avatar20220130.*;
import com.aliyun.avatar20220130.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
import com.aliyun.teautil.*;
import com.aliyun.teautil.models.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.avatar20220130.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        Config config = new Config()
                // 您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "avatar.cn-zhangjiakou.aliyuncs.com";
        return new com.aliyun.avatar20220130.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.avatar20220130.Client client = Sample.createClient("accessKeyId", "accessKeySecret");
        CancelVideoTaskRequest cancelVideoTaskRequest = new CancelVideoTaskRequest();
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.cancelVideoTaskWithOptions(cancelVideoTaskRequest, runtime);
        } catch (TeaException error) {
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要,请打印 error
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}
说明

详细的API信息可以参考:取消视频合成任务

5. 数字人机位效果展示

5.1 横屏效果

  • 0: 全身近景机位全身近景0

  • 1: 头部近景机位头部近景0

  • 2: 全身远景机位横屏-全身远景

  • 3: 半身近景机位横屏-半身近景

  • 4: 半身远景机位半身远景0

  • 5: 左边近景机位左边远景0

  • 6: 右边近景机位右边远景0

5.2 竖屏效果

  • 0: 全身近景机位全身近景0

  • 1: 头部近景机位头部近景0

  • 2: 全身远景机位全身远景0

  • 3: 半身近景机位半身近景0

  • 4: 半身远景机位半身远景0

  • 5: 左边近景机位左边远景0

  • 6: 右边近景机位右边远景0

6. 数字人角度效果展示

6.1 横屏效果(以全身近景机位为例展示角度效果)

  • 0: 正面,默认角度全身近景0

  • 1: 左侧30度全身近景30

  • 2: 右侧30度全身近景-30

6.2 竖屏效果(以全身近景机位为例展示角度效果)

  • 0: 正面,默认角度全身近景0

  • 1: 左侧30度全身近景30

  • 2: 右侧30度全身近景-30

阿里云首页 虚拟数字人 相关技术圈