文档

如何实现批量智能一键成片

更新时间:

智能生产制作支持批量化智能一键成片,包含【脚本化自动成片】和【智能图文匹配成片】两种解决方案。通过阅读本文,您将了解如何调用OpenAPI以及配置参数,实现批量化的智能一键成片。

前提条件

  1. 您已知晓【脚本化自动成片】和【智能图文匹配成片】两种解决方案的区别。具体请参考操作指南:批量智能一键成片

  2. 您已安装IMS服务端SDK。具体操作,请参考安装SDK

  3. API详情,请参考:SubmitBatchMediaProducingJobGetBatchMediaProducingJobGetMediaProducingJob

  4. 批量智能一键成片参数详情,请参考:批量智能一键成片参数说明

注意事项

本文中代码示例依赖ICE OpenAPI SDK最新版本,详情请参见安装方式

操作步骤

1、准备素材

在提交批量智能一键成片任务之前,您需要先准备一些用于剪辑的素材:视频图片(必需)、背景音乐、标题、口播文案等。

批量智能一键成片支持用户传入OSS URL或者媒资ID作为剪辑素材,如果您的素材是本地的音视频图片文件,那么您需要先将文件上传至OSS。如果您希望使用IMS服务进一步管理您的媒资,可以调用RegisterMediaInfo将OSS文件注册成媒资并获取媒资ID。

2、提交一键成片任务

2.1、输入参数示例

以下示例中的属性详情,请参见批量智能一键成片参数说明

2.1.1、InputConfig 视频、图片素材配置
脚本化自动成片

当InputConfig参数中包含MediaGroupArray字段时,批量剪辑模式默认「脚本化自动成片」。素材支持视频和图片,支持媒资ID和OSS URL作为输入。

{
  "MediaGroupArray": [
    {
      "GroupName": "分组1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    },
    {
      "GroupName": "分组2",
      "MediaArray": [
        "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.mp4"
        "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png"
      ]
    }
  ]
}
智能图文匹配成片

当InputConfig参数中包含MediaArray字段时,批量剪辑模式为「智能图文匹配成片」。

{
  "MediaArray": [
    "****9d46c886b45481030f6e****",
    "****c886810b4549d4630f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.mp4",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png"
  ]
}
2.1.2、InputConfig 背景音乐配置

如果您有自己的背景音乐,也可以在InputConfig中传入,同样支持媒资ID和OSS URL。若未传入,默认剪辑时会随机选取公共素材库中的BGM进行合成。

示例1:传入单首背景音乐(MediaId)

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    }
  ],
  "BackgroundMusic": "****b4549d46c88681030f6e****"
}

示例二:传入多首BGM(MediaId和OSS URL混用),合成时随机选取一首作为背景音乐。

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test4.mp3"
  ]
}
2.1.3、InputConfig 标题、口播文案配置

如果传入了标题和口播文案,那么这两类文本素材都会合成到最终的成片中,效果见下图:

image

示例1:一个标题,多条口播文案

生成的所有成片共用一个标题,口播文案随机选取一条合成。

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    }
  ],
  "Title": "回龙观盒马鲜生开业啦",
  "SpeechTextArray": [
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹"
  ]
}

示例2:多个标题,一条口播文案

生成的所有成片共用一条口播文案,标题随机选取一个合成。

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    }
  ],
  "TitleArray": [
    "回龙观盒马鲜生开业啦",
    "盒马鲜生开业啦"
  ],
  "SpeechText": "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
  
}

示例3:多个标题,多个口播文案

如果标题和口播文案个数相同,则合成时会随机选取一对标题和口播文案,即第一个标题一定对应第一个口播文案;如果数量不一致,则会随机选取标题和口播文案。

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    }
  ],
  "TitleArray": [
    "回龙观盒马鲜生开业啦",
    "盒马鲜生开业啦"
  ],
  "SpeechTextArray": [
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹"
  ],
}
2.1.4、InputConfig 贴纸水印配置

InputConfig中支持传入图片的mediaId 或者 OSS URL,作为全局贴纸或者水印来合成。

示例1:传入单张贴纸,所有成片中都全局显示这张贴纸。

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    },
  "Sticker": {
    "MediaId": "****b681034549d46c880f6e****",
    "X": 10,
    "Y": 100,
    "Width": 300,
    "Height": 300
  }
}

示例2:传入多张贴纸,每个成片随机选取一张贴纸全局展示。

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    },
  "StickerArray": [
    {
      "MediaId": "****9d46c8b4548681030f6e****",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    },
    {
      "MediaURL": "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test3.png",
      "X": 10,
      "Y": 100,
      "Width": 300,
      "Height": 300
    }
  ]
}
2.1.5、批量一键成片接口输入参数--最佳实践

示例1:使用脚本化自动成片,传入标题、口播文案素材,批量生成5个竖屏1080p的视频,并配置任务完成回调。

InputConfig: 其余参数详情见InputConfig 参数说明

{
  "MediaGroupArray": [
    {
      "GroupName": "Group1",
      "MediaArray": [
        "****9d46c886b45481030f6e****",
        "****c886810b4549d4630f6e****"
      ]
    },
    {
      "GroupName": "Group2",
      "MediaArray": [
        "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.mp4"
        "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png"
      ]
    }
  ],
  "TitleArray": [
    "回龙观盒马鲜生开业啦",
    "盒马鲜生开业啦"
  ],
  "SpeechTextArray": [
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹"
  ]
}

EditingConfig: 无需配置。剪辑合成默认配置详情见EditingConfig 参数示例

OutputConfig: 其余参数详情见OutputConfig 参数说明

{
 	"MediaURL": "http://xxx.oss-cn-shanghai.aliyuncs.com/xxx_{index}.mp4",
 	"Count": 5,
 	"Width": 1080,
 	"Height": 1920
}

UserData: 用户业务数据和回调地址配置,支持http地址或mns队列

{"NotifyAddress":"http(s)://**.**.***"}
{"NotifyAddress":"ice-callback-****"}

示例2:使用智能图文匹配成片,传入标题、口播文案素材,批量生成5个竖屏1080p的视频,并配置任务完成回调。

InputConfig: 其余参数详情见InputConfig 参数说明

{
  "MediaArray": [
    "****9d46c886b45481030f6e****",
    "****c886810b4549d4630f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png"
  ],
  "TitleArray": [
    "回龙观盒马鲜生开业啦",
    "盒马鲜生开业啦"
  ],
  "SpeechTextArray": [
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹"
  ]
}

EditingConfig、OutputConfig、UserData的配置和「示例1:脚本化自动成片」保持一致。

2.2、使用服务端SDK 提交一键成片任务

调用接口SubmitBatchMediaProducingJob,提交批量智能一键成片任务,批量生成5个有标题、口播的竖屏1080p成片。

说明

该接口返回一键成片任务的提交结果,不保证接口返回时视频已合成完毕。合成任务将进入后台排队,异步执行。

以java 为例,其他语言的sdk示例请前往:OpenAPI门户

package com.aliyun.sample;
import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.ice20201109.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = "ice.cn-shanghai.aliyuncs.com";
        return new com.aliyun.ice20201109.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
        com.aliyun.ice20201109.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        com.aliyun.ice20201109.models.SubmitBatchMediaProducingJobRequest submitBatchMediaProducingJobRequest = new com.aliyun.ice20201109.models.SubmitBatchMediaProducingJobRequest()
                .setInputConfig("{
          \"MediaGroupArray\": [
            {
              \"GroupName\": \"Group1\",
              \"MediaArray\": [
                \"****9d46c886b45481030f6e****\",
                \"****c886810b4549d4630f6e****\"
              ]
            },
            {
              \"GroupName\": \"Group2\",
              \"MediaArray\": [
                \"http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.mp4\"
                \"http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png\"
              ]
            }
          ],
          \"TitleArray\": [
            \"回龙观盒马鲜生开业啦\",
            \"盒马鲜生开业啦\"
          ],
          \"SpeechTextArray\": [
            \"附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀\",
            \"附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹\"
          ]
        }")
                .setOutputConfig("{
          \"MediaURL\": \"http://xxx.oss-cn-shanghai.aliyuncs.com/xxx_{index}.mp4\",
          \"Count\": 5,
          \"Width\": 1080,
          \"Height\": 1920
        }")
                .setUserData("{\"NotifyAddress\":\"http(s)://**.**.***\"}");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.submitBatchMediaProducingJobWithOptions(submitBatchMediaProducingJobRequest, runtime);
        } catch (TeaException error) {
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

3、查询一键成片主任务

提交批量智能一键成片任务后,会同步返回主任务jobId。同时任务会进入后台排队、异步执行,并根据提交任务时的参数OutputConfig.Count的数量,批量发起多个剪辑子任务,合成多个成片。您可以调用GetBatchMediaProducingJob接口,主任务JobId 作为输入参数,查询批量智能一键成片主任务的详细信息,包含:主任务提交时的入参配置,所有子任务的任务状态、子任务JobId、成片媒资ID等。

使用服务端SDK查询一键成片主任务信息

以java 为例,其他语言的sdk示例请前往:OpenAPI门户

package com.aliyun.sample;
import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.ice20201109.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = "ice.cn-shanghai.aliyuncs.com";
        return new com.aliyun.ice20201109.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
        com.aliyun.ice20201109.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        com.aliyun.ice20201109.models.GetBatchMediaProducingJobRequest getBatchMediaProducingJobRequest = new com.aliyun.ice20201109.models.GetBatchMediaProducingJobRequest()
                .setJobId("****b6b2750d4308892ac3330238****");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.getBatchMediaProducingJobWithOptions(getBatchMediaProducingJobRequest, runtime);
        } catch (TeaException error) {
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

4、查询一键成片子任务

GetBatchMediaProducingJob接口仅会返回子任务的关键信息,例如:任务状态、成片媒资ID等。要获取更多详细的剪辑任务信息,您可以调用GetMediaProducingJob接口,将第三步中返回的子任务JobId作为输入进行查询。

使用服务端SDK查询一键成片子任务信息

以java 为例,其他语言的sdk示例请前往:OpenAPI门户

package com.aliyun.sample;
import com.aliyun.tea.*;

public class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.ice20201109.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // Endpoint 请参考 https://api.aliyun.com/product/ICE
        config.endpoint = "ice.cn-shanghai.aliyuncs.com";
        return new com.aliyun.ice20201109.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
        com.aliyun.ice20201109.Client client = Sample.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        com.aliyun.ice20201109.models.GetMediaProducingJobRequest getMediaProducingJobRequest = new com.aliyun.ice20201109.models.GetMediaProducingJobRequest()
                .setJobId("****b6b2750d4308892ac3330238****");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.getMediaProducingJobWithOptions(getMediaProducingJobRequest, runtime);
        } catch (TeaException error) {
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

5、配置一键成片剪辑完成回调

发起「批量智能一键成片」任务后,会批量发起多个剪辑任务,合成多个视频。当左右子任务都完成后会发送完成回调。具体回调字段请参考:回调事件BatchProduceMediaComplete

配置全局回调

您可在控制台或调用接口设置「批量智能一键成片」完成的全局回调。操作详情请参考:设置回调事件

配置接口维度回调

在提交「批量智能一键成片」任务时,支持在userData字段中配置接口维度的任务完成回调,示例参考:UserData配置回调

6、一键成片混剪逻辑及进阶配置

6.1、「脚本化自动成片」处理逻辑

当InputConfig中包含MediaGroupArray参数时,混剪模式为「脚本化自动成片」,处理逻辑如下:

  • 如果输入视频为长视频片段,会先进行拆条,混剪时选取拆条后的视频片段进行拼接合成。拆条后单镜头的时长默认为3s,您也可以通过EditingConfig.ProcessConfig.SingleShotDuration指定镜头时长。

  • 如果有口播文案,在数量足够的前提下,尽量不重复选取。比如:输入3条文案,需要生成5条视频,则5条成片中会出现相同文案,但3条文案都会被使用至少一次。

  • 按照分组顺序,先每组随机挑选一个拆条后的视频片段,前后拼接。如果输入了口播文案且视频总时长少于口播时长,则优先从非首尾分组中随机选取视频片段,直到视频总时长与口播时长相当。

6.2、「智能图文匹配成片」处理逻辑

当InputConfig中包含MediaGroup参数,不包含MediaGroupArray参数时,混剪模式为「智能图文匹配成片」,处理逻辑如下:

  • 和「脚本化自动成片」相同,先对长视频进行拆条。

  • 如果没有口播文案,则随机选取视频片段进行前后拼接,合成大约15s的成片。

  • 如果有口播文案,则进行图文智能匹配并对齐口播文案,批量合成多条成片。

6.3、一键成片进阶配置

在提供方便快捷、低门槛混剪功能的基础上,一键成片也开放多个参数配置,供您调整成片效果。下文将选择几个常用配置,做示例说明。

指定背景音乐、口播声音的风格和音量

EditingConfig 配置如下:

{
  "SpeechConfig": {
    "Style": "Gentle",
    "Gain": 1.1
  },
  "BackgroundMusicConfig": {
    "Style": "bgm-relaxing",
    "Gain": 0.2
  }
}

具体字段及取值:参考口播文案相关配置背景音乐相关配置

指定口播的音色和速度

如果所有成片都共用一个口播Voice,EditingConfig 配置如下:

{
  "SpeechConfig": {
    "Voice": "zhiru"
  }
}

如果希望成片的口播Voice从一个列表中随机选取,多值需用英文逗号隔开,EditingConfig 配置如下:

{
  "SpeechConfig": {
    "Voice": "zhiru,zhilun,zhibei_emo"
  }
}

如果想要调整口播的速度,EditingConfig配置如下:

{
  "SpeechConfig": {
    "SpeechRate": 100
  }
}

SpeechRate 取值范围,参考:配置SpeechRate

配置字幕特效

和口播Voice类似,EditingConfig支持传入一个或多个字幕特效。

例1:字幕入场效果在wave_in和fade_in中随机选取,字幕出场效果固定为wave_out,配置如下:

{
  "SpeechConfig": {
    "AsrConfig": {
       "AaiMotionInEffect": "wave_in,fade_in"
       "AaiMotionInEffect": "wave_out"
    }
  }
}

例2:字幕循环特效在normal_display和naughty_display中随机选取

{
  "SpeechConfig": {
    "AsrConfig": {
       "AaiMotionLoopEffect": "normal_display,naughty_display"
    }
  }
}

  • 本页导读 (1)
文档反馈