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

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

功能介绍

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

调用方法

请参见如何调用API

URI

POST /v1/{project_id}/photo-digital-human-videos

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

[项目ID,获取方法请参考获取项目ID。](tag:hc,hk)

请求参数

表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。

说明:
  • 如果shoot_scripts中shoot_script.script_type为"TEXT",则台词以shoot_scripts中的文本为准;

  • 如果shoot_scripts中shoot_script.script_type为"AUDIO",则台词以script_id对应剧本中的音频为准。

human_image

String

人物照片,需要Base64编码。照片分辨率不超过1080P。

voice_config

VoiceConfig object

音色配置。

video_config

PhotoVideoConfig object

视频输出配置。

shoot_scripts

Array of ShootScriptItem objects

剧本列表。照片数字人仅支持传入一个剧本shoot_script,剧本参数仅支持shoot_script.script_type、shoot_script.text_config;

output_asset_config

OutputAssetConfig object

输出资产信息配置。

background_music_config

BackgroundMusicConfig object

背景音乐配置。

review_config

ReviewConfig object

内容审核配置

表4 VoiceConfig

参数

是否必选

参数类型

描述

voice_asset_id

String

音色资产ID。

speed

Integer

语速。

默认值100,最小值50,最大值200。

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

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

pitch

Integer

音高。

默认值100,最小值50,最大值200。

volume

Integer

音量。

默认值140,最小值90,最大值240。

表5 PhotoVideoConfig

参数

是否必选

参数类型

描述

codec

String

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

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

bitrate

Integer

输出平均码率。

单位:kbps。

最小值40,最大值30000。

frame_rate

String

帧率。

单位:FPS。

表6 ShootScriptItem

参数

是否必选

参数类型

描述

sequence_no

Integer

剧本序号。

shoot_script

ShootScript object

表演脚本。

表7 ShootScript

参数

是否必选

参数类型

描述

script_type

String

脚本类型,即视频制作的驱动方式。默认TEXT

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

  • AUDIO: 语音驱动

text_config

TextConfig object

讲解词配置。

animation_config

Array of AnimationConfig objects

动作配置。

说明:
  • 推荐使用text_config中插入动作标签,不配置animation_config。

  • 使用animation_config方式配置动作,在整个讲解过程中动作循环播放。

  • 分身数字人视频制作时此参数不生效。

background_config

Array of BackgroundConfigInfo objects

背景配置。

emotion_config

Array of EmotionConfig objects

情感标签配置。

说明:
  • 分身数字人视频制作时此参数不生效。

  • 推荐在text_config中插入情感标签,此参数将被废弃。

layer_config

Array of LayerConfig objects

图层配置。

表8 TextConfig

参数

是否必选

参数类型

描述

text

String

台词脚本。

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

纯文本模式

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

标签模式

SSML标签的详细定义请参考文本驱动SSML定义

表9 AnimationConfig

参数

是否必选

参数类型

描述

animation

String

动作资产ID。

表10 BackgroundConfigInfo

参数

是否必选

参数类型

描述

background_type

String

背景类型。

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

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

background_config

String

背景文件的URL。

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

  • background_type=IMAGE时需要填写。

background_color_config

String

纯色背景的RGB颜色值。

说明:
  • background_type=COLOR时需要填写。

background_asset_id

String

背景资产ID。

说明:
  • 背景是背景图片时,填图片资产ID。

表11 EmotionConfig

参数

是否必选

参数类型

描述

emotion

String

情感标签配置。

  • HAPPY:开心

  • SAD:悲伤

  • CALM:平静

  • ANGER:愤怒

默认HAPPY。

表12 LayerConfig

参数

是否必选

参数类型

描述

layer_type

String

图层类型。

  • HUMAN: 人物图层

  • IMAGE: 素材图片图层

  • VIDEO: 素材视频图层

  • TEXT: 素材文字图层

asset_id

String

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

group_id

String

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

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。

dy

Integer

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

说明:

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

layer_index

Integer

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

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

表14 LayerSizeConfig

参数

是否必选

参数类型

描述

width

Integer

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

说明:

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

height

Integer

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

说明:

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

表15 ImageLayerConfig

参数

是否必选

参数类型

描述

image_url

String

图片文件的URL。

表16 VideoLayerConfig

参数

是否必选

参数类型

描述

video_url

String

视频文件的URL。

video_cover_url

String

视频封面文件的URL。

loop_count

Integer

循环播放视频次数。

表17 TextLayerConfig

参数

是否必选

参数类型

描述

text_context

String

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

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

font_name

String

字体。当前支持的字体:

  • HarmonyOS_Sans_SC_Black:鸿蒙粗体

  • HarmonyOS_Sans_SC_Regular:鸿蒙常规

  • HarmonyOS_Sans_SC_Thin:鸿蒙细体

  • fzyouh:方正瘦体

font_size

Integer

字体大小(像素)。

取值范围:[4, 120]

font_color

String

字体颜色。RGB颜色值。

表18 OutputAssetConfig

参数

是否必选

参数类型

描述

asset_name

String

输出视频资产名称。

is_preview_video

Boolean

是否是预览视频。如果是预览视频不存资产库。

说明:
  • 分身数字人视频制作不支持预览。

表19 BackgroundMusicConfig

参数

是否必选

参数类型

描述

music_asset_id

String

音乐资产ID。

volume

Integer

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

默认值100,最小值0,最大值100。

表20 ReviewConfig

参数

是否必选

参数类型

描述

no_need_review

Boolean

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

响应参数

状态码: 200

表21 响应Header参数

参数

参数类型

描述

X-Request-Id

String

请求ID。

表22 响应Body参数

参数

参数类型

描述

job_id

String

任务ID。

状态码: 400

表23 响应Body参数

参数

参数类型

描述

error_code

String

错误码。

error_msg

String

错误描述。

状态码: 401

表24 响应Body参数

参数

参数类型

描述

error_code

String

错误码。

error_msg

String

错误描述。

状态码: 500

表25 响应Body参数

参数

参数类型

描述

error_code

String

错误码。

error_msg

String

错误描述。

请求示例

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

{
  "voice_config" : {
    "voice_asset_id" : "394f3a27cd0b3d6164ca75c3db1edf6c",
    "speed" : 100,
    "pitch" : 100,
    "volume" : 140
  },
  "shoot_scripts" : [ {
    "sequence_no" : 0,
    "shoot_script" : {
      "text_config" : {
        "text" : "大家好,我是云玲。"
      }
    }
  } ],
  "video_config" : {
    "codec" : "H264"
  },
  "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
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 CreatePhotoDigitalHumanVideoSolution {

    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();
        CreatePhotoDigitalHumanVideoRequest request = new CreatePhotoDigitalHumanVideoRequest();
        CreatePhotoDigitalHumanVideoReq body = new CreatePhotoDigitalHumanVideoReq();
        OutputAssetConfig outputAssetConfigbody = new OutputAssetConfig();
        outputAssetConfigbody.withAssetName("云玲自我介绍");
        TextConfig textConfigShootScript = new TextConfig();
        textConfigShootScript.withText("大家好,我是云玲。");
        ShootScript shootScriptShootScripts = new ShootScript();
        shootScriptShootScripts.withTextConfig(textConfigShootScript);
        List<ShootScriptItem> listbodyShootScripts = new ArrayList<>();
        listbodyShootScripts.add(
            new ShootScriptItem()
                .withSequenceNo(0)
                .withShootScript(shootScriptShootScripts)
        );
        PhotoVideoConfig videoConfigbody = new PhotoVideoConfig();
        videoConfigbody.withCodec(PhotoVideoConfig.CodecEnum.fromValue("H264"));
        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);
        request.withBody(body);
        try {
            CreatePhotoDigitalHumanVideoResponse response = client.createPhotoDigitalHumanVideo(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
# coding: utf-8

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 = __import__('os').getenv("CLOUD_SDK_AK")
    sk = __import__('os').getenv("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 = CreatePhotoDigitalHumanVideoRequest()
        outputAssetConfigbody = OutputAssetConfig(
            asset_name="云玲自我介绍"
        )
        textConfigShootScript = TextConfig(
            text="大家好,我是云玲。"
        )
        shootScriptShootScripts = ShootScript(
            text_config=textConfigShootScript
        )
        listShootScriptsbody = [
            ShootScriptItem(
                sequence_no=0,
                shoot_script=shootScriptShootScripts
            )
        ]
        videoConfigbody = PhotoVideoConfig(
            codec="H264"
        )
        voiceConfigbody = VoiceConfig(
            voice_asset_id="394f3a27cd0b3d6164ca75c3db1edf6c",
            speed=100,
            pitch=100,
            volume=140
        )
        request.body = CreatePhotoDigitalHumanVideoReq(
            output_asset_config=outputAssetConfigbody,
            shoot_scripts=listShootScriptsbody,
            video_config=videoConfigbody,
            voice_config=voiceConfigbody
        )
        response = client.create_photo_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
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.CreatePhotoDigitalHumanVideoRequest{}
	outputAssetConfigbody := &model.OutputAssetConfig{
		AssetName: "云玲自我介绍",
	}
	textConfigShootScript := &model.TextConfig{
		Text: "大家好,我是云玲。",
	}
	shootScriptShootScripts := &model.ShootScript{
		TextConfig: textConfigShootScript,
	}
	sequenceNoShootScripts:= int32(0)
	var listShootScriptsbody = []model.ShootScriptItem{
        {
            SequenceNo: &sequenceNoShootScripts,
            ShootScript: shootScriptShootScripts,
        },
    }
	videoConfigbody := &model.PhotoVideoConfig{
		Codec: model.GetPhotoVideoConfigCodecEnum().H264,
	}
	speedVoiceConfig:= int32(100)
	pitchVoiceConfig:= int32(100)
	volumeVoiceConfig:= int32(140)
	voiceConfigbody := &model.VoiceConfig{
		VoiceAssetId: "394f3a27cd0b3d6164ca75c3db1edf6c",
		Speed: &speedVoiceConfig,
		Pitch: &pitchVoiceConfig,
		Volume: &volumeVoiceConfig,
	}
	request.Body = &model.CreatePhotoDigitalHumanVideoReq{
		OutputAssetConfig: outputAssetConfigbody,
		ShootScripts: listShootScriptsbody,
		VideoConfig: videoConfigbody,
		VoiceConfig: voiceConfigbody,
	}
	response, err := client.CreatePhotoDigitalHumanVideo(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

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

状态码

状态码

描述

200

处理成功返回。

400

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

401

未鉴权或鉴权失败。

500

内部服务错误。

错误码

请参见错误码

分享:

    相关文档

    相关产品