更新时间:2024-12-12 GMT+08:00
分享

创建分身数字人视频制作任务

功能介绍

该接口用于创建分身数字人视频制作任务。

调用方法

请参见如何调用API

URI

POST /v1/{project_id}/2d-digital-human-videos

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

项目ID,获取方法请参考获取项目ID

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

用户Token。使用Token鉴权方式时必选。

通过调用IAM服务获取用户Token接口获取。

响应消息头中X-Subject-Token的值。

Authorization

String

使用AK/SK方式认证时必选,携带的鉴权信息。

X-Sdk-Date

String

使用AK/SK方式认证时必选,请求的发生时间。

格式为(YYYYMMDD'T'HHMMSS'Z')。

X-Project-Id

String

使用AK/SK方式认证时必选,携带项目ID信息。

X-App-UserId

String

第三方用户ID。不允许输入中文。

表3 请求Body参数

参数

是否必选

参数类型

描述

script_id

String

剧本ID。

说明:
  • 如果填写了script_id,model_asset_id、voice_config、scene_asset_id、video_config、shoot_scripts可以不填,以脚本中的配置为准。

  • 如果填写了script_id,并且同时也填写了model_asset_id、voice_config、scene_asset_id、video_config、shoot_scripts则以本接口中的配置为准。

model_asset_id

String

分身数字人模型资产ID,可以从资产库中查询。

voice_config

VoiceConfig object

音色配置。

video_config

VideoConfig object

视频输出配置。

shoot_scripts

Array of ShootScriptItem objects

拍摄脚本列表。

output_asset_config

OutputAssetConfig object

输出资产信息配置。

background_music_config

BackgroundMusicConfig object

背景音乐配置。

review_config

ReviewConfig object

内容审核配置。

callback_config

CallBackConfig object

回调设置。

表4 VoiceConfig

参数

是否必选

参数类型

描述

voice_asset_id

String

参数解释

音色资产ID,可以从资产库中查询。

约束限制

不涉及。

取值范围

字符长度1-256位。

默认取值

不涉及。

speed

Integer

参数解释

语速。50表示0.5倍语速,100表示正常语速,200表示2倍语速。

当取值为“100”时,表示一个成年人的正常语速,约为250字/分钟。

约束限制

不涉及。

取值范围:

50-200

默认取值:

100

pitch

Integer

参数解释

音高。

约束限制

不涉及。

取值范围:

50-200

默认取值:

100

volume

Integer

参数解释

音量。

约束限制

不涉及。

取值范围:

90-240

默认取值:

140

表5 VideoConfig

参数

是否必选

参数类型

描述

clip_mode

String

参数解释

输出视频的剪辑方式。

约束限制

不涉及。

取值范围

  • RESIZE:视频缩放。

  • CROP:视频裁剪。

默认取值:

RESIZE

codec

String

参数解释

视频编码格式及视频文件格式。

约束限制

仅分身数字人视频制作支持VP8编码。

取值范围

  • H264:h264编码,输出mp4文件。

  • VP8:vp8编码,输出webm文件。

默认取值

不涉及

bitrate

Integer

参数解释

输出平均码率。单位:kbps。

约束限制

  • 分身数字人视频制作采用质量优先,可能会超过设置的码率。

  • 分身数字人直播码率范围[1000, 8000]。

默认取值

不涉及

取值范围:

40-30000

width

Integer

参数解释

视频宽度。单位:像素。

约束限制

  • clip_mode=RESIZE时,当前支持1920x1080、1080x1920、1280x720、720x1280、3840x2160、2160x3840六种分辨率。4K分辨率视频需要分身数字人模型支持4K的情况下才能使用。

  • clip_mode=CROP,裁剪后视频,(dx,dy)为原点,保留视频像宽度为width。

  • 分身数字人直播目前只支持1080x1920、1920x1080。

默认取值

不涉及

取值范围:

0-3840

height

Integer

参数解释

视频高度。

单位:像素。

约束限制

  • clip_mode=RESIZE时,当前支持1920x1080、1080x1920、1280x720、720x1280、3840x2160、2160x3840六种分辨率分辨率。

  • clip_mode=CROP,裁剪后视频,(dx,dy)为原点,保留视频像高度为height。

  • 分身数字人直播目前只支持1080x1920、1920x1080。

默认取值

不涉及

取值范围:

0-3840

frame_rate

String

参数解释

帧率。单位:FPS。

约束限制

分身数字人视频固定25FPS。

默认取值:

25

is_subtitle_enable

Boolean

参数解释

输出的视频是否带字幕。

约束限制

分身数字人直播暂时不支持字幕。

取值范围

  • true: 打开字幕

  • false: 关闭字幕

默认取值:

false

subtitle_config

SubtitleConfig object

字幕配置。

dx

Integer

参数解释

裁剪视频左上角像素点横坐标。

说明:

以模特分辨率为画布大小,比如1920*1080分辨率的模特,dx最小值是0,最大值是1920。

约束限制

clip_mode= CROP时生效。

默认取值

不涉及

取值范围:

-1920-3840

dy

Integer

参数解释

裁剪视频左上角像素点纵坐标。

说明:

以模特分辨率为画布大小,比如1920*1080分辨率的模特,dy最小值是0,最大值是1080

约束限制

clip_mode= CROP时生效。

默认取值

不涉及

取值范围:

-1920-3840

is_enable_super_resolution

Boolean

参数解释

视频是否开启超分。

约束限制

仅分身数字人视频制作支持。

取值范围

  • true: 开启

  • false: 不开启

默认取值:

false

is_end_at_first_frame

Boolean

参数解释

视频结束帧是否跟起始帧相同。需要多个数字人视频无缝拼接时设置成true。

约束限制

仅分身数字人视频制作支持。

取值范围

  • true: 开启

  • false: 不开启

默认取值:

false

表6 SubtitleConfig

参数

是否必选

参数类型

描述

dx

Integer

参数解释

字幕框左下角像素点坐标。

约束限制

不涉及。

默认取值

不涉及。

取值范围:

0-1920

dy

Integer

参数解释

字幕框左下角像素点坐标。

约束限制

不涉及。

默认取值

不涉及。

取值范围:

0-1920

font_name

String

参数解释

字体。当前支持的字体请参考服务支持的字体

约束限制

不涉及。

取值范围

字符长度0-64位

默认取值:

HarmonyOS_Sans_SC_Black

font_size

Integer

参数解释

字体大小。接口的取值范围为0-120,实际业务使用的取值范围要求为24-120,请以业务实际使用要求为准。

约束限制

不涉及。

取值范围:

0-120

默认取值:

54

h

Integer

参数解释

字幕框高度。

约束限制

参数h用于方便前端计算字幕框左上角坐标,后台不使用该参数。

取值范围:

0-1920

w

Integer

参数解释

字幕框宽度。

约束限制

  • 字幕框宽度固定为屏幕宽度的80%

  • 参数w用于方便前端计算字幕框左上角坐标,后台不使用该参数

取值范围:

0-1920

表7 ShootScriptItem

参数

是否必选

参数类型

描述

sequence_no

Integer

参数解释

剧本序号。

约束限制

同一个剧本序号不重复。

默认取值

不涉及。

取值范围:

0-2147483647

shoot_script

ShootScript object

表演脚本。

subtitle_file_info

SubtitleFiles object

字幕文件信息。

表8 ShootScript

参数

是否必选

参数类型

描述

script_type

String

参数解释

脚本类型,即视频制作的驱动方式

约束限制

不涉及

取值范围

  • TEXT: 文本驱动,即通过TTS合成语音

  • AUDIO: 语音驱动

默认取值:

TEXT

text_config

TextConfig object

讲解词配置。

audio_drive_action_config

Array of AudioDriveActionConfig objects

语音驱动时的动作配置。

background_config

Array of BackgroundConfigInfo objects

背景配置。

layer_config

Array of LayerConfig objects

图层配置。

表9 TextConfig

参数

是否必选

参数类型

描述

text

String

参数解释

台词脚本。支持两种模式,纯文本模式和标签模式。

  • 纯文本模式:使用方法,如“大家好,我是人工智大家,是个虚拟主播”。

  • 标签模式:SSML标签的详细定义请参考文本驱动SSML定义

约束限制

不含SSML标签字符数最长10000个字符。

取值范围

字符长度0-131072位。

默认取值

不涉及。

表10 AudioDriveActionConfig

参数

是否必选

参数类型

描述

action_tag

String

动作标签

action_name

String

动作名称

action_start_time

Float

动作开始时间

取值范围:

0-2592000

表11 BackgroundConfigInfo

参数

是否必选

参数类型

描述

background_type

String

参数解释

背景类型。

约束限制

不涉及。

取值范围

  • IMAGE:图片背景,指定图片用作分身数字人背景。

  • COLOR:纯色背景,指定颜色RGB值作为分身数字人背景。

默认取值

不涉及

background_config

String

参数解释

背景文件的URL。

约束限制

  • 仅直播支持外部URL,其他业务通过资产库查询获取,不支持外部URL。

  • background_type=IMAGE时需要填写。

取值范围

字符长度1-2048位

默认取值

不涉及。

background_color_config

String

参数解释

纯色背景的RGB颜色值。

约束限制

background_type=COLOR时需要填写。

取值范围

字符长度0-16位

默认取值:

#FFFFFF

background_asset_id

String

参数解释

背景资产ID。

说明:

背景是背景图片时,填图片资产ID。

约束限制

不涉及

取值范围

字符长度0-64位

默认取值

不涉及

表12 LayerConfig

参数

是否必选

参数类型

描述

layer_type

String

参数解释

图层类型。

约束限制

不涉及。

取值范围

  • HUMAN: 人物图层

  • IMAGE: 素材图片图层

  • VIDEO: 素材视频图层

  • TEXT: 素材文字图层

默认取值

不涉及

asset_id

String

参数解释

图层所需资产的资产id,外部资产信息无需填写。

约束限制

不涉及。

取值范围

字符长度0-64位

默认取值

不涉及

group_id

String

参数解释

多场景素材编组。同一group_id的素材,在应用全局时共享位置信息。

约束限制

不涉及。

取值范围

字符长度0-64位

默认取值

不涉及

position

LayerPositionConfig object

图层位置配置。

size

LayerSizeConfig object

图层大小配置。

image_config

ImageLayerConfig object

素材图片图层配置。

video_config

VideoLayerConfig object

素材视频图层配置。

text_config

TextLayerConfig object

素材文字图层配置。

表13 LayerPositionConfig

参数

是否必选

参数类型

描述

dx

Integer

参数解释

图层左上角像素点的X轴位置值(画布左上角坐标是0x0)。

横屏(16:9)画布像素为1920x1080;竖屏(9:16)画布像素为1080x1920。

约束限制

该值为相对于画布的像素值,仅表示布局位置关系,与输出画面分辨率无关。

取值范围:

-1920-3840

默认取值:

0

dy

Integer

参数解释

图层图片左上角像素点的Y轴位置值(画布左上角坐标是0x0)。

横屏(16:9)画布像素为1920x1080;竖屏(9:16)画布像素为1080x1920。

约束限制

该值为相对于画布的像素值,仅表示布局位置关系,与输出画面分辨率无关。

取值范围:

-1920-3840

默认取值:

0

layer_index

Integer

参数解释

图片、视频、人物图的层顺序。

说明:

图层顺序为从1开始的整数,底层图层顺序是1,往上依次增加。

约束限制

如果出现重复则重复图层叠加关系随机。

取值范围:

1-100

默认取值:

100

表14 LayerSizeConfig

参数

是否必选

参数类型

描述

width

Integer

参数解释

图层图片宽度像素值(相对画布大小)。

横屏(16:9)画布像素为1920x1080;竖屏(9:16)画布像素为1080x1920。

约束限制

该值为相对于画布的像素值,仅表示布局位置关系,与输出画面分辨率无关。

取值范围:

1-7680

height

Integer

参数解释

图层图片高度像素值(相对画布大小)。

横屏(16:9)画布像素为1920x1080;竖屏(9:16)画布像素为1080x1920。

约束限制

该值为相对于画布的像素值,仅表示布局位置关系,与输出画面分辨率无关。|

取值范围:

1-7680

表15 ImageLayerConfig

参数

是否必选

参数类型

描述

image_url

String

参数解释

图片文件的URL。

约束限制

  • 仅直播支持外部URL,其他业务通过资产库查询获取,不支持外部URL。

    取值范围

    字符长度1-2048位。

    默认取值

    不涉及

表16 VideoLayerConfig

参数

是否必选

参数类型

描述

video_url

String

参数解释

视频文件的URL。

约束限制

  • 仅直播支持外部URL,其他业务通过资产库查询获取,不支持外部URL。

    取值范围

    字符长度1-2048位。

    默认取值

    不涉及。

video_cover_url

String

参数解释

视频封面文件的URL。

约束限制

  • 仅直播支持外部URL,其他业务通过资产库查询获取,不支持外部URL。

    取值范围

    字符长度1-2048位。

    默认取值

    不涉及。

loop_count

Integer

参数解释

循环播放视频次数。

特殊取值:

  • 0:表示不播放

  • -1:表示持续循环播放

约束限制

不涉及。

取值范围:

-1-100

默认取值:

-1

表17 TextLayerConfig

参数

是否必选

参数类型

描述

text_context

String

参数解释

文字图层的文本,内容需做Base64编码。

示例:若想添加文字水印“测试文字水印”,那么text_context的值为:5rWL6K+V5paH5a2X5rC05Y2w

约束限制

不涉及。

取值范围

字符长度0-1024位。

默认取值

不涉及。

font_name

String

字体。当前支持的字体请参考服务支持的字体

约束限制

不涉及。

取值范围

字符长度0-64位

默认取值:

HarmonyOS_Sans_SC_Black

font_size

Integer

参数解释

字体大小(像素)。接口的取值范围为0-120,实际业务使用的取值范围要求为4-120,请以业务实际使用要求为准。

约束限制

不涉及。

取值范围:

0-120

默认取值:

16

font_color

String

参数解释

字体颜色。RGB颜色值。

约束限制

不涉及。

取值范围

字符长度0-16位

默认取值:

#FFFFFF

表18 SubtitleFiles

参数

是否必选

参数类型

描述

text_subtitle_file

SubtitleFileInfo object

audio_subtitle_file

SubtitleFileInfo object

表19 SubtitleFileInfo

参数

是否必选

参数类型

描述

subtitle_file_download_url

String

字幕文件下载链接。

subtitle_file_upload_url

String

字幕文件上传链接。

subtitle_file_state

String

字幕文件生成状态。

  • GENERATING:字幕文件生成中。

  • GENERATE_SUCCEED:字幕文件生成成功。

  • GENERATE_FAILED:字幕文件生成失败。

job_id

String

字幕文件生成任务ID。

表20 OutputAssetConfig

参数

是否必选

参数类型

描述

asset_name

String

参数解释

输出视频资产名称。

约束限制

不涉及。

取值范围

字符长度0-256位。

默认取值

不涉及。

表21 BackgroundMusicConfig

参数

是否必选

参数类型

描述

music_asset_id

String

参数解释

音乐资产ID。

约束限制

不涉及。

取值范围

字符长度0-64位。

默认取值

不涉及。

volume

Integer

参数解释

音乐音量。如100,表示音量100%,50表示音量50%。

约束限制

不涉及。

取值范围:

0-100

默认取值:

100

表22 ReviewConfig

参数

是否必选

参数类型

描述

no_need_review

Boolean

免审核。 目前仅白名单用户可使用此参数,非白名单用户跟随系统策略审核。

表23 CallBackConfig

参数

是否必选

参数类型

描述

callback_url

String

回调URL。

回调请求body为json格式,带参数如下:

result: SUCCEED或FAILED

asset_id: 资产ID

job_id: 任务

auth_type

String

认证类型。

  • NONE。URL中自带认证。

  • MSS_A。HMACSHA256签名模式,在URL中追加参数:secret,time_stamp。取值方式:secret=hmac_sha256(key, URI(callback_url)+ time_stamp)&time_stamp=hex(timestamp)

默认取值:

NONE

key

String

密钥Key

响应参数

状态码: 200

表24 响应Header参数

参数

参数类型

描述

X-Request-Id

String

请求ID。

表25 响应Body参数

参数

参数类型

描述

job_id

String

任务ID。

状态码: 400

表26 响应Body参数

参数

参数类型

描述

error_code

String

错误码。

error_msg

String

错误描述。

状态码: 401

表27 响应Body参数

参数

参数类型

描述

error_code

String

错误码。

error_msg

String

错误描述。

状态码: 500

表28 响应Body参数

参数

参数类型

描述

error_code

String

错误码。

error_msg

String

错误描述。

请求示例

POST https://{endpoint}/v1/0d697589d98091f12f92c0073501cd79/2d-digital-human-videos

{
  "model_asset_id" : "0c7798664ee7178b3dba3bbef57c32e7",
  "voice_config" : {
    "voice_asset_id" : "394f3a27cd0b3d6164ca75c3db1edf6c",
    "speed" : 100,
    "pitch" : 100,
    "volume" : 140
  },
  "video_config" : {
    "codec" : "H264",
    "bitrate" : 5000,
    "width" : 1920,
    "height" : 1080,
    "frame_rate" : "30"
  },
  "shoot_scripts" : [ {
    "sequence_no" : 0,
    "shoot_script" : {
      "text_config" : {
        "text" : "大家好,我是云玲。"
      },
      "background_config" : [ {
        "background_type" : "IMAGE",
        "background_config" : "https://{endpoint}/0d697589d98091f12f92c0073501cd79/c7885ffdfb347337a890208ca7fd07e3/34534f0262813a6838bdcfb8bc949af6.jpg?AccessKeyId=WTEZCVDFUF3XHXCTPIJ8&Expires=1686872878&Signature=zXGOEQlrgZ4yAUziwlGcdbXLPIM%3D"
      } ],
      "layer_config" : [ {
        "layer_type" : "HUMAN",
        "position" : {
          "dx" : 656,
          "dy" : 0,
          "layer_index" : 1
        },
        "size" : {
          "width" : 607,
          "height" : 1080
        }
      } ],
      "script_type" : "TEXT"
    }
  } ],
  "output_asset_config" : {
    "asset_name" : "云玲自我介绍"
  }
}

响应示例

状态码: 200

处理成功返回。

{
  "job_id" : "26f06524-4f75-4b3a-a853-b649a21aaf66"
}

状态码: 400

{
  "error_code" : "MSS.00000003",
  "error_msg" : "Invalid parameter"
}

状态码: 401

{
  "error_code" : "MSS.00000001",
  "error_msg" : "Unauthorized"
}

状态码: 500

{
  "error_code" : "MSS.00000004",
  "error_msg" : "Internal Error"
}

SDK代码示例

SDK代码示例如下。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.metastudio.v1.region.MetaStudioRegion;
import com.huaweicloud.sdk.metastudio.v1.*;
import com.huaweicloud.sdk.metastudio.v1.model.*;

import java.util.List;
import java.util.ArrayList;

public class Create2DDigitalHumanVideoSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        MetaStudioClient client = MetaStudioClient.newBuilder()
                .withCredential(auth)
                .withRegion(MetaStudioRegion.valueOf("<YOUR REGION>"))
                .build();
        Create2DDigitalHumanVideoRequest request = new Create2DDigitalHumanVideoRequest();
        Create2DDigitalHumanVideoReq body = new Create2DDigitalHumanVideoReq();
        OutputAssetConfig outputAssetConfigbody = new OutputAssetConfig();
        outputAssetConfigbody.withAssetName("云玲自我介绍");
        LayerSizeConfig sizeLayerConfig = new LayerSizeConfig();
        sizeLayerConfig.withWidth(607)
            .withHeight(1080);
        LayerPositionConfig positionLayerConfig = new LayerPositionConfig();
        positionLayerConfig.withDx(656)
            .withDy(0)
            .withLayerIndex(1);
        List<LayerConfig> listShootScriptLayerConfig = new ArrayList<>();
        listShootScriptLayerConfig.add(
            new LayerConfig()
                .withLayerType(LayerConfig.LayerTypeEnum.fromValue("HUMAN"))
                .withPosition(positionLayerConfig)
                .withSize(sizeLayerConfig)
        );
        List<BackgroundConfigInfo> listShootScriptBackgroundConfig = new ArrayList<>();
        listShootScriptBackgroundConfig.add(
            new BackgroundConfigInfo()
                .withBackgroundType(BackgroundConfigInfo.BackgroundTypeEnum.fromValue("IMAGE"))
                .withBackgroundConfig("https://{endpoint}/0d697589d98091f12f92c0073501cd79/c7885ffdfb347337a890208ca7fd07e3/34534f0262813a6838bdcfb8bc949af6.jpg?AccessKeyId=WTEZCVDFUF3XHXCTPIJ8&Expires=1686872878&Signature=zXGOEQlrgZ4yAUziwlGcdbXLPIM%3D")
        );
        TextConfig textConfigShootScript = new TextConfig();
        textConfigShootScript.withText("大家好,我是云玲。");
        ShootScript shootScriptShootScripts = new ShootScript();
        shootScriptShootScripts.withScriptType(ShootScript.ScriptTypeEnum.fromValue("TEXT"))
            .withTextConfig(textConfigShootScript)
            .withBackgroundConfig(listShootScriptBackgroundConfig)
            .withLayerConfig(listShootScriptLayerConfig);
        List<ShootScriptItem> listbodyShootScripts = new ArrayList<>();
        listbodyShootScripts.add(
            new ShootScriptItem()
                .withSequenceNo(0)
                .withShootScript(shootScriptShootScripts)
        );
        VideoConfig videoConfigbody = new VideoConfig();
        videoConfigbody.withCodec(VideoConfig.CodecEnum.fromValue("H264"))
            .withBitrate(5000)
            .withWidth(1920)
            .withHeight(1080)
            .withFrameRate(VideoConfig.FrameRateEnum.fromValue("30"));
        VoiceConfig voiceConfigbody = new VoiceConfig();
        voiceConfigbody.withVoiceAssetId("394f3a27cd0b3d6164ca75c3db1edf6c")
            .withSpeed(100)
            .withPitch(100)
            .withVolume(140);
        body.withOutputAssetConfig(outputAssetConfigbody);
        body.withShootScripts(listbodyShootScripts);
        body.withVideoConfig(videoConfigbody);
        body.withVoiceConfig(voiceConfigbody);
        body.withModelAssetId("0c7798664ee7178b3dba3bbef57c32e7");
        request.withBody(body);
        try {
            Create2DDigitalHumanVideoResponse response = client.create2DDigitalHumanVideo(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkmetastudio.v1.region.metastudio_region import MetaStudioRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkmetastudio.v1 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = MetaStudioClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(MetaStudioRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = Create2DDigitalHumanVideoRequest()
        outputAssetConfigbody = OutputAssetConfig(
            asset_name="云玲自我介绍"
        )
        sizeLayerConfig = LayerSizeConfig(
            width=607,
            height=1080
        )
        positionLayerConfig = LayerPositionConfig(
            dx=656,
            dy=0,
            layer_index=1
        )
        listLayerConfigShootScript = [
            LayerConfig(
                layer_type="HUMAN",
                position=positionLayerConfig,
                size=sizeLayerConfig
            )
        ]
        listBackgroundConfigShootScript = [
            BackgroundConfigInfo(
                background_type="IMAGE",
                background_config="https://{endpoint}/0d697589d98091f12f92c0073501cd79/c7885ffdfb347337a890208ca7fd07e3/34534f0262813a6838bdcfb8bc949af6.jpg?AccessKeyId=WTEZCVDFUF3XHXCTPIJ8&Expires=1686872878&Signature=zXGOEQlrgZ4yAUziwlGcdbXLPIM%3D"
            )
        ]
        textConfigShootScript = TextConfig(
            text="大家好,我是云玲。"
        )
        shootScriptShootScripts = ShootScript(
            script_type="TEXT",
            text_config=textConfigShootScript,
            background_config=listBackgroundConfigShootScript,
            layer_config=listLayerConfigShootScript
        )
        listShootScriptsbody = [
            ShootScriptItem(
                sequence_no=0,
                shoot_script=shootScriptShootScripts
            )
        ]
        videoConfigbody = VideoConfig(
            codec="H264",
            bitrate=5000,
            width=1920,
            height=1080,
            frame_rate="30"
        )
        voiceConfigbody = VoiceConfig(
            voice_asset_id="394f3a27cd0b3d6164ca75c3db1edf6c",
            speed=100,
            pitch=100,
            volume=140
        )
        request.body = Create2DDigitalHumanVideoReq(
            output_asset_config=outputAssetConfigbody,
            shoot_scripts=listShootScriptsbody,
            video_config=videoConfigbody,
            voice_config=voiceConfigbody,
            model_asset_id="0c7798664ee7178b3dba3bbef57c32e7"
        )
        response = client.create2_d_digital_human_video(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    metastudio "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/metastudio/v1"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/metastudio/v1/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/metastudio/v1/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := metastudio.NewMetaStudioClient(
        metastudio.MetaStudioClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.Create2DDigitalHumanVideoRequest{}
	outputAssetConfigbody := &model.OutputAssetConfig{
		AssetName: "云玲自我介绍",
	}
	widthSize:= int32(607)
	heightSize:= int32(1080)
	sizeLayerConfig := &model.LayerSizeConfig{
		Width: &widthSize,
		Height: &heightSize,
	}
	positionLayerConfig := &model.LayerPositionConfig{
		Dx: int32(656),
		Dy: int32(0),
		LayerIndex: int32(1),
	}
	var listLayerConfigShootScript = []model.LayerConfig{
        {
            LayerType: model.GetLayerConfigLayerTypeEnum().HUMAN,
            Position: positionLayerConfig,
            Size: sizeLayerConfig,
        },
    }
	backgroundConfigBackgroundConfig:= "https://{endpoint}/0d697589d98091f12f92c0073501cd79/c7885ffdfb347337a890208ca7fd07e3/34534f0262813a6838bdcfb8bc949af6.jpg?AccessKeyId=WTEZCVDFUF3XHXCTPIJ8&Expires=1686872878&Signature=zXGOEQlrgZ4yAUziwlGcdbXLPIM%3D"
	var listBackgroundConfigShootScript = []model.BackgroundConfigInfo{
        {
            BackgroundType: model.GetBackgroundConfigInfoBackgroundTypeEnum().IMAGE,
            BackgroundConfig: &backgroundConfigBackgroundConfig,
        },
    }
	textConfigShootScript := &model.TextConfig{
		Text: "大家好,我是云玲。",
	}
	scriptTypeShootScript:= model.GetShootScriptScriptTypeEnum().TEXT
	shootScriptShootScripts := &model.ShootScript{
		ScriptType: &scriptTypeShootScript,
		TextConfig: textConfigShootScript,
		BackgroundConfig: &listBackgroundConfigShootScript,
		LayerConfig: &listLayerConfigShootScript,
	}
	sequenceNoShootScripts:= int32(0)
	var listShootScriptsbody = []model.ShootScriptItem{
        {
            SequenceNo: &sequenceNoShootScripts,
            ShootScript: shootScriptShootScripts,
        },
    }
	frameRateVideoConfig:= model.GetVideoConfigFrameRateEnum().E_30
	videoConfigbody := &model.VideoConfig{
		Codec: model.GetVideoConfigCodecEnum().H264,
		Bitrate: int32(5000),
		Width: int32(1920),
		Height: int32(1080),
		FrameRate: &frameRateVideoConfig,
	}
	speedVoiceConfig:= int32(100)
	pitchVoiceConfig:= int32(100)
	volumeVoiceConfig:= int32(140)
	voiceConfigbody := &model.VoiceConfig{
		VoiceAssetId: "394f3a27cd0b3d6164ca75c3db1edf6c",
		Speed: &speedVoiceConfig,
		Pitch: &pitchVoiceConfig,
		Volume: &volumeVoiceConfig,
	}
	modelAssetIdCreate2DDigitalHumanVideoReq:= "0c7798664ee7178b3dba3bbef57c32e7"
	request.Body = &model.Create2DDigitalHumanVideoReq{
		OutputAssetConfig: outputAssetConfigbody,
		ShootScripts: &listShootScriptsbody,
		VideoConfig: videoConfigbody,
		VoiceConfig: voiceConfigbody,
		ModelAssetId: &modelAssetIdCreate2DDigitalHumanVideoReq,
	}
	response, err := client.Create2DDigitalHumanVideo(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

处理成功返回。

400

请求传参异常,包含错误码及对应描述。

401

未鉴权或鉴权失败。

500

内部服务错误。

错误码

请参见错误码

相关文档