2D数字人视频合成使用指南
2D数字人视频合成服务为您提供输入文本合成为2D虚拟数字人指定格式的视频,并且通过返回的视频链接下载视频内容。
功能介绍
形象配置
支持自定义上传2D数字人形象。具体可联系运营。
数字人驱动
支持数字人表情、口型驱动
视频编码信息
编码格式: H264
帧率: 30FPS
视频格式
目前支持MP4和MOV两种视频格式,可以通过接口参数IsAlpha来指定,开启透明通道则视频格式为MOV,不开启则为MP4绿幕视频
MP4,固定绿幕色值的mp4视频, 色值为#0a9a38
MOV,透明格式,生成的视频文件大小比较大
视频分辨率
跟上传的2D数字人视频分辨率保持一致
字幕
支持字幕,字幕作为一个独立与视频的单独文件,支持下载
自定义背景图
支持通过URL指定视频背景图,背景图分辨率需要与视频合成的分辨率保持一致,图片格式支持jpg、jpeg、png三种格式
自定义发音人
支持通过参数指定本次视频合成需要使用的发音人以及声音的语速、语调、音量调节,具体发音人列表可以从平台2D资产中心获取(点击查看发音人code获取方法)
自定义形象
支持通过参数指定本次视频合成需要使用的2D数字人形象,具体数字人形象列表可以从平台2D资产中心获取(点击查看形象code获取方法)
最大存储时间
支持7天在线存储,7天后视频内容将无法下载
支持最大输入1000个文本字符
同时支持阿里云语音合成服务的SSML标记语言,针对一些文本读音等进行自定义,关于支持的SSML范围见下方:支持范围。
如果您期望获取透明通道的视频,可以直接设置IsAlpha为true,平台将生产MOV格式的透明视频,生成的视频文件大小比较大,1分钟的时长视频大小可能达到1G;同时您还可以设置IsAlpha为false,从而生成MP4视频格式,视频文件大小会小很多,然后通过第三方媒体制作工具针对绿幕视频进行抠图得到透明视频,我们已经提供绿幕相关色值。
视频文件和字幕文件有效下载时间是7天,请在生成完成之后尽快下载视频和字幕,过期将无法再下载。
SSML使用
1. 使用方式
在Text字段直接传入SSML文本即可。SSML规则可参考下方。
2. 支持范围
使用SSML需要符合阿里云语音合成服务的SSML标记语言规则,关于该语言规范要求可以参考阿里云语音合成服务《SSML标记语言介绍》,示例:<speak>需要调用SSML标签的文本</speak>,目前平台仅支持以下标签。
标签 | 作用 | 示例 | 提示 |
<phoneme> | 用于控制标签内文本的读音,英文文本不支持该标签 | <speak> 去<phoneme alphabet="py" ph="dian3 dang4 hang2">典当行</phoneme>把这个玩意当掉 </speak> | |
<say-as> | 用于指示出标签内文本的信息类型,进而按照该类型的默认发音方式发音 | 读数值: <speak><say-as interpret-as="cardinal">12345</say-as></speak> 读数字: <speak><say-as interpret-as="digits">12345</say-as></speak> 读手机号: <speak><say-as interpret-as="telephone">12345</say-as></speak> 读人名: <speak> 她的曾用名是<say-as interpret-as="name">曾小凡</say-as> </speak> | 目前平台支持:人名、地址、车牌号、标点符号、ID、日期、时间、计量单位、数值、数字、手机号、字母、单词。具体可以参考阿里云语音合成服务文档:https://help.aliyun.com/document_detail/101645.html#sectiondiv-9yg-x47-l08。 |
关于SSML的更多信息可以直接参考:阿里云语音合成服务SSML标记语言介绍:https://help.aliyun.com/document_detail/101645.html。
前置条件
下述介绍使用2D数字人视频合成需要提前完成的步骤,每个步骤都需要完成才能顺利使用2D数字人视频合成服务。
申请阿里云账号,具体参考准备工作
申请购买权限,完成购买开通服务,具体参考开通服务
进入虚拟数字人开放平台创建并配置应用,具体创建和配置流程可以参考:创建并配置数字人应用。
创建应用时需要选择离线数字人。
技术接入
请确保完成上述全部前置步骤,获取到阿里云账号的AccessKey ID和AccessKey Secret(点击获取),以及获取到对应数字人应用的tenantId和appId。
下面介绍接入2D数字人视频合成的完整步骤以及涉及到API。虚拟数字人开放平台的服务端API采用OpenAPI形式对外输出,具体对接方案见:服务端 API 接入。
使用流程:视频合成服务是离线进行视频合成,所以流程是先提交视频合成任务,得到任务TaskUuid,然后拿着TaskUuid调用查询视频合成服务信息查询API,查询任务状态(这里需要轮询,轮询周期最小间隔1s,建议3s),直到任务状态显示为已完成或者失败,状态为已完成的时候可以获取到对应的视频下载URL,然后直接通过URL可以下载到对应的视频。
1. SDK版本要求
该功能需要升级虚拟数字人开放平台服务端SDK版本至1.0.5及以上。
2. 提交2D数字人视频合成任务
下面介绍通过Java调用OpenAPI提交一个2D数字人视频合成任务的代码示例, 并且返回任务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");
SubmitTextTo2DAvatarVideoTaskRequest submitTextTo2DAvatarVideoTaskRequest = new SubmitTextTo2DAvatarVideoTaskRequest();
RuntimeOptions runtime = new RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
client.submitTextTo2DAvatarVideoTaskWithOptions(submitTextTo2DAvatarVideoTaskRequest, 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 | 是 | 任务标题:
|
Text | String | 是 | 合成的文本,最大支持1000个字符 |
VideoInfo | Object | 是 | 视频设置。 |
VideoInfo.IsAlpha | Boolean | 否 | 是否需要透明通道, 默认false。 true: 开启透明通道,视频格式为MOV false:不开启透明通道,视频格式为MP4,包含绿幕 |
VideoInfo.isSubtitles | Boolean | 否 | 是否需要字幕。 默认值:true true: 生成字幕,字幕文件作为独立文件提供下载链接进行下载。 false:不生成字幕。 |
Video.BackgroundImageUrl | String | 否 | 指定视频背景图URL。 必须是有效可访问的URL背景图片地址,且背景图片的分辨率必须要与生成的视频分辨率保持一致。 目前支持jpg,jpeg,png的图片格式。 (请升级SDK到最新版本使用) |
AudioInfo | Object | 否 | 音频相关配置,不传则使用资产中配置的默认值 |
AudioInfo.Voice | String | 否 | TTS播报发音人code,从虚拟数字人开放平台-2D资产管理页面获取,不传则使用资产中配置的发音人(点击查看发音人code获取方法) |
AudioInfo.SpeechRate | Integer | 否 | TTS播报声音语速,取值范围:-500~500,不传则使用资产中配置的默认值 |
AudioInfo.Volume | Integer | 否 | TTS播报声音音量,取值范围:0~100,不传则使用资产中配置的默认值 |
AudioInfo.PitchRate | Integer | 否 | TTS播报声音语调,取值范围:-500~500,不传则使用资产中配置的默认值 |
AvatarInfo | Object | 否 | 数字人形象相关配置 |
AvatarInfo.Code | String | 否 | 数字人形象code,从虚拟数字人开放平台-2D资产页面获取,不传则使用应用配置的默认形象(点击查看形象code获取方法) |
详细的API信息可以参考提交2D数字人文本视频合成任务。
3. 获取2D数字人视频合成任务详情
当您提交一个任务并且获取到任务UUID之后, 您可以通过返回的任务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. 取消2D数字人视频合成任务
针对未开始的视频合成任务,您可以通过返回的任务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. 2D数字人形象code获取方法
从虚拟数字人开放平台控制台进入到2D数字人资产管理页面,点击数字人形象,在右侧预览页面可以找到对应的“形象code”,点击复制即可。

6. 发音人code获取方法
从虚拟数字人开放平台控制台进入到2D数字人资产管理页面,点击数字人形象,在右侧预览页面点击配置形象,进入到数字人形象配置页面,点击左侧声音面板找到对应的 “发音人”,复制即可。
