通用场景

本文旨在介绍在智能图文匹配成片-通用场景下的合成参数、进阶配置、SDK调用示例。

说明
  • 为了更好地阅读本文,建议您在阅读本文之前先通过智能一键成片操作指南了解【智能图文匹配成片-通用场景】相关的概念与使用流程。

  • 智能图文匹配-通用场景包含两种成片模式。本文将针对以下几种“模式”进行详细阐述:

    • 全局口播模式

    • 分镜脚本模式

  • 支持的区域:华东2(上海)、华北2(北京)、华东1(杭州)、华南1(深圳)。

使用说明

InputConfig 参数说明

用户可通过配置InputConfig,指定视频素材、口播、背景音乐、贴纸等基础素材的参数配置。

参数

类型

说明

是否必填

支持模式

MediaArray

List<String>

通过上传媒资指定剪辑素材。支持传入媒资ID或素材OSS URL列表,视频总时长最多两小时。

MediaArray和MediaSearchInput二选一必填

全部支持

MediaSearchInput

MediaSearchInput

通过指定检索库和主题描述文本智能搜索匹配的剪辑素材。

全部支持

TitleArray

List<String>

标题数组,每次合成随机选一个

最多50个,每个标题不超过50字

全部支持

SubHeadingArray

List<SubHeading>

副标题设置

全部支持

SpeechTextArray

List<String>

口播文案数组,每次合成随机选一个。

最多50个,每条口播文案最长1000个字符。

  • 全局口播模式

SceneInfo

SceneInfo

场景信息,用于场景相关的参数.

  • 分镜脚本模式

StickerArray

List<Sticker>

贴纸数组,每次合成随机选择一个。

最多50个。

全部支持

BackgroundMusicArray

List<String>

背景音乐数组,每次合成随机选一个。

最多50个,支持媒资ID 或 OSS URL。

全部支持

BackgroundImageArray

List<String>

背景图片数组,每次合成随机选一个。

最多50个,支持媒资ID 或 OSS URL。

全部支持

MediaSearchInput 参数说明

参数

类型

说明

是否必填

LibSearchCondition

LibSearchCondition

检索库搜索条件设置

必填

LibSearchCondition 参数说明

参数

类型

说明

是否必填

SearchLibs

List<String>

检索库列表,如:ims-default-search-lib

必填

SearchText

String

主题描述文本,用于描述目标匹配素材的主题内容,文本内容最长20个字符。如“阿里云小助手正在学习如何直播带货”、“海洋、珊瑚礁、海豹、海豚、海洋环境”。

必填

SubHeading 参数说明

参数

类型

说明

是否必填

Level

Integer

副标题级别。

枚举:

1:一级副标题

2:二级副标题

3:三级副标题

4:四级副标题

5:五级副标题

TitleArray

List<String>

副标题数组,每次合成随机选一个

最多50个,每个标题不超过50字。

Sticker 参数说明

参数

类型

说明

是否必填

MediaId

String

贴纸、logo、水印等图片ID

二选一必填

都填写时优先取用MediaId

MediaURL

String

图片URL,仅支持自有OSS

X

Float

参考VideoTrackClip.X

Y

Float

参考VideoTrackClip.Y

Width

Float

参考VideoTrackClip.Width

Height

Float

参考VideoTrackClip.Height

DynamicFrames

Integer

动图的帧数

否,当贴纸为动图时填写

SceneInfo 参数说明

参数

类型

说明

是否必填

Scene

String

匹配场景类型,通用场景下固定传值“General”即可。

ShotInfo

ShotInfo

设置分镜脚本。

说明

此参数只适用于分镜脚本模式,如果是全局口播模式无需设置此参数。

ShotInfo 参数说明

说明

此参数只适用于分镜脚本模式,如果是全局口播模式无需设置此参数。

参数

类型

说明

是否必填

ShotScripts

List<ShotScript>

分镜脚本数组

ShotScript 参数说明

说明

此参数只适用于分镜脚本模式,如果是全局口播模式无需设置此参数。

参数

类型

说明

是否必填

ScriptText

String

单个分镜中的脚本文案,用于描述分镜的内容,例如:老魔法师丹尼在倒腾着奇怪的仪器,他最近在研制一种新的魔法药剂。

SpeechText

String

单个分镜中的口播文案,长度不超过100

Duration

Float

分镜的时长,仅在没有口播时生效,如果存在口播,分镜时长自动按口播时长计算。

参数示例:全局口播模式

{
  // MediaArray和MediaSearchInput二选一
  "MediaArray": [
    "****9d46c886b45481030f6e****",
    "****c886810b4549d4630f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.mp4",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png"
  ],
  // MediaArray和MediaSearchInput二选一
  "MediaSearchInput": {
        "LibSearchCondition": {
            "SearchLibs": [
                "ims-default-search-lib",
                "test-20"
            ],
            "SearchText": "阿里云小助手正在学习如何直播带货"
      }
  },
  "TitleArray": [
    "回龙观盒马鲜生开业啦",
    "盒马鲜生开业啦"
  ],
  "SubHeadingArray": [
    {
      "Level": 1,
      "TitleArray": ["副标题1", "副标题2"]
    },
    {
      "Level": 3,
      "TitleArray": ["三级副标题"]
    }
  ],
  "SpeechTextArray": [
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
    "附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹"
  ],
  "Sticker": {
    "MediaId": "****b681034549d46c880f6e****",
    "X": 10,
    "Y": 100,
    "Width": 300,
    "Height": 300
  },
  "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
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test4.mp3"
  ],
  "BackgroundImageArray": [
    "****6c886b4549d481030f6e****",
    "****9d46c8548b4681030f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.png"
  ]
}

参数示例:分镜脚本模式

{
  // MediaArray和MediaSearchInput二选一
  "MediaArray": ["MediaId1", "MediaId2"],
  // MediaArray和MediaSearchInput二选一
  "MediaSearchInput": {
        "LibSearchCondition": {
            "SearchLibs": [
                "ims-default-search-lib",
                "test-20"
            ],
            "SearchText": "阿里云小助手正在学习如何直播带货"
      }
  },
  "SceneInfo": {
    "Scene": "General", // General 通用匹配 
    "ShotInfo": {
      "ShotScripts": [
        {
          "ScriptText": "这里是第一场分镜的脚本文案",
          "SpeechText": "这里是第一场分镜的口播文案",
          "Duration": 5.0 // 无口播文案时支持设置
        },
        {
          "ScriptText": "这里是第二场分镜的脚本文案",
          "SpeechText": "这里是第二场分镜的口播文案",
          "Duration": 8.0 // 无口播文案时支持设置
        }
      ]
    }
  },
   "TitleArray": [
    "回龙观盒马鲜生开业啦",
    "盒马鲜生开业啦"
  ],
  "SubHeadingArray": [
    {
      "Level": 1,
      "TitleArray": ["副标题1", "副标题2"]
    },
    {
      "Level": 3,
      "TitleArray": ["三级副标题"]
    }
  ],
  "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
    }
  ],
  "BackgroundMusicArray": [
    "****b4549d46c88681030f6e****",
    "****549d46c88b4681030f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test4.mp3"
  ],
  "BackgroundImageArray": [
    "****6c886b4549d481030f6e****",
    "****9d46c8548b4681030f6e****",
    "http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.png"
  ]
}

EditingConfig 参数说明

说明
  • 用户可通过配置EditingConfig,指定成片素材的音量、位置及其他合成参数。如无特殊需求,建议客户使用默认配置,该字段可置空。

  • 通用场景下的“全局口播模式”和“分镜脚本模式”参数说明皆相同。

参数

类型

说明

是否必填

MediaConfig

JSON

输入视频素材相关配置。

支持字段:

  • Volume: 输入视频的音量,默认0。取值:[0, 10.0],支持小数,例:0.5。

  • MediaMetaDataArray: 媒资meta信息列表。单个MediaMetaData包含以下字段

    • Media: 媒资ID 或 OSS URL,需和InputConfig 中传入的素材保持一致。

    • TimeRangeList:入出点范围列表,每个素材支持指定多段入出点,从中选取片段合成。单个TimeRange字段如下:

      • In:素材入点

      • Out:素材出点

TitleConfig

JSON

标题相关配置。支持配置字幕参数,字段详见:横幅文字

SubHeadingConfig

JSON

JSON说明:

key:Level

value:横幅文字

示例如下:

{
    "1": {
      "Y": 0.3,
      "FontSize": 40
    },
    "3": {
      "Y": 0.5,
      "FontSize": 30
    }
  }

SpeechConfig

JSON

口播文案相关配置。

支持字段:

  • Volume:口播音频的音量,默认1。取值:[0, 10.0],支持小数,例:0.5。

  • AsrConfig:支持配置字幕参数,字段详见:横幅文字

  • Voice:指定单个或多个口播音色。当指定多个voice时,会随机选取一个合成。音色的可选范围请参见智能语音效果示例。例:"zhimiao_emo,zhilun"。

  • SpeechRate:语速,取值范围:-500~500,默认值:0。

    • [-500, 0, 500] 对应的语速倍速区间为 [0.5, 1.0, 2.0]。

说明

计算方法如下:

  • 0.8倍速(1-1/0.8)/0.002 = -125

  • 1.2倍速(1-1/1.2)/0.001 = 166

小于1倍速时,使用0.002系数。

大于1倍速时,使用0.001系数。

实际算法结果取近似值。

  • Style:口播声音风格,默认为空。若同时指定Voice和Style,则优先取用Voice。取值:

    • "Gentle": 柔和

    • "Serious":严肃

    • "Entertainment":娱乐

  • CustomizedVoice:支持自定义的音色,填写人声克隆的VoiceId。若填写了此字段,Voice和Style将失效。

BackgroundMusicConfig

JSON

背景音乐相关配置。

支持字段:

  • Volume:背景音乐的音量,默认0.2。取值:[0, 10.0],支持小数,例:0.5。

  • Style:背景音乐风格,默认为空。若InputConfig中已配置背景音乐,此字段不生效。取值:

    • "bgm-beauty":时尚

    • "bgm-chinese-style":中国风

    • "bgm-cuisine":美食

    • "bgm-dynamic":动感

    • "bgm-quirky":怪诞

    • "bgm-relaxing":轻松

    • "bgm-romantic":浪漫

    • "bgm-upbeat":欢快

BackgroundImageConfig

JSON

背景图相关配置。如果InputConfig中已配置背景图,则此字段不生效。

支持字段:

  • SubType:背景类型。取值:

    • "Color":纯色背景

    • "Blur":背景模糊

  • Radius:模糊半径,当SubType=Blur时,此参数生效,取值范围[0.01, 1]

  • Color:背景颜色。SubType=Color时,此参数生效,16进制RGB颜色,例:#000000。

ProcessConfig

混剪处理配置。

支持字段:

  • SingleShotDuration:长视频素材进行剪辑时会自动拆条,拆条后单镜头的时长,默认3秒。SingleShotDuration和EnableClipSplit二选一。

  • EnableClipSplit:表示是否进行AI拆条,默认false。如果为true,SingleShotDuration参数则失效。

  • AllowVfxEffect:是否允许添加特效效果,默认false。

  • VfxEffectProbability:特效应用在每个视频片段上的概率,默认0.5,取值:0.0 - 1.0,支持2位小数。

  • AllowTransition:是否允许添加转场效果,默认false。

  • TransitionList:自定义转场效果列表,当AllowTransition=true时,随机选取列表中的一个转场效果进行合成。例:["directional", "linearblur"]

  • UseUniformTransition:单个成片中是否使用一致的转场效果,默认true。

  • AllowDuplicateMatch:表示匹配过的片段是否允许重复使用,默认false。

ProduceConfig

JSON

普通剪辑合成配置,字段详见:EditingProduceConfig

EditingConfig参数示例

EditingConfig 中的所有参数均为非必填项,以下是默认配置。

{
  "MediaConfig": {
    "Volume": 0 // 默认视频素材静音
  },
  "TitleConfig": {
    "Alignment": "TopCenter",
    "AdaptMode": "AutoWrap",
    "Font": "Alibaba PuHuiTi 2.0 95 ExtraBold",
    "SizeRequestType": "Nominal",
    "Y": 0.1, // 成片为竖屏时,标题Y坐标值
    "Y": 0.05, // 成片为横屏时,标题Y坐标值
    "Y": 0.08 // 成片为方屏时,标题Y坐标值
  },
  "SpeechConfig": {
    "Volume": 1,  // 口播音频默认用原始音量
    "SpeechRate": 0,
    "Voice": null,
    "Style": null,
    "CustomizedVoice": "xxxx"  // 若填写了此字段,Voice和Style将失效。
    "AsrConfig": {
      "Alignment": "TopCenter",
      "AdaptMode": "AutoWrap",
      "Font": "Alibaba PuHuiTi 2.0 65 Medium",
      "SizeRequestType": "Nominal",
      "Spacing": -1,
      "Y": 0.8, // 成片为竖屏时,字幕Y坐标值
      "Y": 0.9, // 成片为横屏时,字幕Y坐标值
      "Y": 0.85 // 成片为方屏时,字幕Y坐标值
    }
  },
  "SubHeadingConfig": {
    "1": {
      "Y": 0.3,
      "FontSize": 40
    },
    "3": {
      "Y": 0.5,
      "FontSize": 30
    }
  },
  "BackgroundMusicConfig": {
    "Volume": 0.2,   // 背景音乐默认用20%音量,
    "Style": null
  },
  "ProcessConfig": {
    "SingleShotDuration": 3,      // 拆条后的镜头时长,SingleShotDuration和EnableClipSplit二选一
    "EnableClipSplit": false      // 是否进行AI拆条,如果为true,SingleShotDuration参数则失效
    "AllowVfxEffect": false,	  // 是否添加特效效果
    "AllowTransition": false,	  // 是否添加转场效果
    "AllowDuplicateMatch": false, // 图文匹配模式下,匹配过的片段是否允许重复使用
  }
}

OutputConfig 参数说明

说明
  • 用户可通过配置OutputConfig,指定成片输出地址、名称规则、成片的宽高、输出成片数量等合成参数配置。

  • 通用场景下的“全局口播模式”和“分镜脚本模式”参数说明皆相同。

参数

类型

必填

说明

MediaURL

String

成片输出到OSS时必填

输出视频地址,必须要有占位符

如:http://xxx.oss-cn-shanghai.aliyuncs.com/xxx_{index}.mp4

StorageLocation

String

成片输出到VOD时必填

指定输出到VOD的媒资文件存储地址

如:outin-xxxxxx.oss-cn-shanghai.aliyuncs.com

FileName

String

成片输出到VOD时必填

输出文件名称,必须要有占位符,

如:xxx_{index}.mp4

GeneratePreviewOnly

Boolean

否,默认false

GeneratePreviewOnly = true时,表示当前任务仅生成预览用的时间线,不实际合成,可不填写输出视频的地址。

一键成片任务完成后,通过GetBatchMediaProducingJob查询任务结果,返回的子任务列表中会包含剪辑工程projectId,再调用GetEditingProject可获取到预览时间线。

Count

Integer

否,默认1

输出视频数

  • 全局口播模式:上限为100。

  • 分镜脚本模式:上限为100。

MaxDuration

Float

否,默认15秒

输出视频单片时长上限。

如果有确定「口播文本」参数,以口播文本tts时长为准,当前参数无效;

如果无「口播文本」,以当前设置单片时长为最大时长,默认15s。

FixedDuration

Float

否,默认15秒

输出视频单片的固定时长。如果设置了固定时长,视频时长将会对齐此参数。

注意:

  • 分镜脚本模式不支持设置该参数;

  • 全局口播模式下,在SpeechTextArray为空的情况下可支持设置此参数;

  • FixedDuration和MaxDuration只能二选一;

Width

Integer

成片宽,px

Height

Integer

成片高,px

Video

JSONObject

输出视频流相关配置,Crf、Codec等

参数示例

{
 	"MediaURL": "http://xxx.oss-cn-shanghai.aliyuncs.com/xxx_{index}.mp4",
 	"Count": 1,
 	"MaxDuration": 15,
 	"Width": 1080,
 	"Height": 1920,
 	"Video": {"Crf": 27},
        "GeneratePreviewOnly":false
}

SDK调用示例

前提条件

您已安装IMS服务端SDK,详情请参见准备工作

代码示例

以全局口播模式为例

展开查看代码示例

package com.example;

import com.alibaba.fastjson.JSONObject;
import com.aliyun.ice20201109.Client;
import com.aliyun.ice20201109.models.*;
import com.aliyun.teaopenapi.models.Config;

import java.util.*;

/**
 *  需要maven引入二方包依赖:
 *   <dependency>
 *      <groupId>com.aliyun</groupId>
 *      <artifactId>ice20201109</artifactId>
 *      <version>2.3.0</version>
 *  </dependency>
 *  <dependency>
 *      <groupId>com.alibaba</groupId>
 *      <artifactId>fastjson</artifactId>
 *      <version>1.2.9</version>
 *  </dependency>
 */

public class SmartMixBatchEditingService {

    static final String regionId = "<service-region>"; // 智能图文匹配支持cn-shanghai,cn-beijing,cn-hangzhou
    static final String bucket = "<your-bucket>";
    private Client iceClient;

    public static void main(String[] args) throws Exception {
        SmartMixBatchEditingService smartMixBatchEditingService = new SmartMixBatchEditingService();
        smartMixBatchEditingService.initClient();
        smartMixBatchEditingService.runExample();
    }

    public void initClient() throws Exception {
        // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
        // 本示例以将AccessKey ID和 AccessKey Secret保存在环境变量为例说明。配置方法请参见:https://help.aliyun.com/zh/sdk/developer-reference/v2-manage-access-credentials?spm=a2c4g.11186623.0.0.423350fbOTFdOB#2a38e5c14b4em
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();

        Config config = new Config();
        config.setCredential(credentialClient);

        // 如需硬编码AccessKey ID和AccessKey Secret,代码如下,但强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
        // config.accessKeyId = <第二步创建的AccessKey ID>;
        // config.accessKeySecret = <第二步创建的AccessKey Secret>;
        config.endpoint = "ice." + regionId + ".aliyuncs.com";
        config.regionId = regionId;
        iceClient = new Client(config);
    }

    public void runExample() throws Exception {

        // 视频素材
        List<String> mediaArray = Arrays.asList(
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-1.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-2.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-3.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-4.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-5.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-6.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-7.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-8.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-9.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-10.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-11.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-12.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-13.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-14.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-15.mp4",
            "http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-16.mp4"
        );

        // 口播文案
        String speechText = "在那广袤无垠的蔚蓝深处,一幅生机勃勃的画卷正徐徐展开。清澈碧蓝的海水中,珊瑚礁犹如海底森林,五彩斑斓,它们是海洋生物多样性的重要基石,为无数的小鱼、贝类和海藻提供庇护所。慵懒而可爱的海狮们,在岩石上享受着温暖阳光的沐浴,惬意地晒着太阳,与大自然和谐共生。海豚在蔚蓝的海水中结伴畅游,彼此追逐嬉戏,展现着大自然赋予的灵动与智慧。然而美丽的海洋环境正面临着前所未有的挑战。各种垃圾污染如同伤疤一般烙印在海洋的肌肤之上,无情地侵蚀着原本纯净的生态环境。众多物种面临食物短缺、疾病增多乃至种群减少的危机。我们必须行动起来,守护这份美丽而又脆弱的蓝色家园,让未来的海洋再次恢复它的纯净与活力。";

        // 视频标题
        String title = "守护蓝色家园";

        JSONObject inputConfig = new JSONObject();
        inputConfig.put("MediaArray", mediaArray);
        inputConfig.put("SpeechText", speechText);
        inputConfig.put("Title", title);

        // 生成的成片数
        int produceCount = 4;

        // 成片宽高,生成竖屏文件
        int outputWidth = 1080;
        int outputHeight = 1920;

        //// 成片宽高,生成横屏文件
        //int outputWidth = 1920;
        //int outputHeight = 1080;

        // 成片oss地址,需包含{index} 占位符
        String mediaUrl = "http://" + bucket + ".oss-" + regionId + ".aliyuncs.com/smart_mix/output_{index}.mp4";

        JSONObject outputConfig = new JSONObject();
        outputConfig.put("MediaURL", mediaUrl);
        outputConfig.put("Count", produceCount);
        outputConfig.put("Width", outputWidth);
        outputConfig.put("Height", outputHeight);

        // 提交一键成片任务
        SubmitBatchMediaProducingJobRequest request = new SubmitBatchMediaProducingJobRequest();
        request.setInputConfig(inputConfig.toJSONString());
        request.setOutputConfig(outputConfig.toJSONString());

        SubmitBatchMediaProducingJobResponse response = iceClient.submitBatchMediaProducingJob(request);
        String jobId = response.getBody().getJobId();
        System.out.println("Start smart mix batch job, batchJobId: " + jobId);

        // 轮询任务状态直到全部结束
        System.out.println("Waiting job finished...");
        int maxTry = 3000;
        int i = 0;
        while (i < maxTry) {
            Thread.sleep(3000);
            i++;
            GetBatchMediaProducingJobRequest getRequest = new GetBatchMediaProducingJobRequest();
            getRequest.setJobId(jobId);
            GetBatchMediaProducingJobResponse getResponse = iceClient.getBatchMediaProducingJob(getRequest);
            String status = getResponse.getBody().getEditingBatchJob().getStatus();
            System.out.println("BatchJobId: " + jobId + ", status:" + status);

            if ("Failed".equals(status)) {
                System.out.println("Batch job failed. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
                throw new Exception("Produce failed. BatchJobId: " + jobId);
            }

            if ("Finished".equals(status)) {
                System.out.println("Batch job finished. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
                break;
            }
        }
    }
}

API调用入参详情

展开查看InputConfig

{
	"MediaArray": [
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-1.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-2.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-3.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-4.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-5.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-6.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-7.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-8.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-9.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-10.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-11.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-12.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-13.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-14.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-15.mp4",
		"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/sea/sea-16.mp4"
	],
	"SpeechText": "在那广袤无垠的蔚蓝深处,一幅生机勃勃的画卷正徐徐展开。清澈碧蓝的海水中,珊瑚礁犹如海底森林,五彩斑斓,它们是海洋生物多样性的重要基石,为无数的小鱼、贝类和海藻提供庇护所。慵懒而可爱的海狮们,在岩石上享受着温暖阳光的沐浴,惬意地晒着太阳,与大自然和谐共生。海豚在蔚蓝的海水中结伴畅游,彼此追逐嬉戏,展现着大自然赋予的灵动与智慧。然而美丽的海洋环境正面临着前所未有的挑战。各种垃圾污染如同伤疤一般烙印在海洋的肌肤之上,无情地侵蚀着原本纯净的生态环境。众多物种面临食物短缺、疾病增多乃至种群减少的危机。我们必须行动起来,守护这份美丽而又脆弱的蓝色家园,让未来的海洋再次恢复它的纯净与活力。",
	"Title":"守护蓝色家园"
}

展开查看OutputConfig

{
  "Count": 4,
  "Height": 1080,
  "Width": 1920,
  "MediaURL": "http://<your-bucket>.oss-<region-id>.aliyuncs.com/script/output_{index}_w.mp4"
}

结果示例

竖屏

横屏

混剪逻辑与进阶配置

处理逻辑

全局口播模式:

  • 如果视频素材通过“指定检索库+设定主题描述文本”方式进行选择,则可以通过“主题描述文本”作为检索条件,在指定检索库中智能搜索出相应的视频片段作为输入视频。

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

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

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

分镜脚本模式:

  • 如果视频素材是通过“指定检索库+设定主题描述文本”方式进行指定,则应通过“主题描述文本”在指定检索库中进行智能搜索,以提取相应的视频片段作为输入视频。

  • 在分镜脚本模式下,无需设置SpeechTextArray/SpeechText,通过SceneInfo.ShotInfo.ShotScripts控制成片中的每一个分镜的内容、时长、口播等信息。

  • 在单个分镜中,优先通过脚本文案进行片段的智能截取和匹配,如未设置脚本文案,但设置了口播文案,则通过口播文案进行匹配。

  • 在单个分镜中,分镜的时长与口播时长或自定义时长进行对齐。

进阶配置

进阶配置详见批量一键成片混剪逻辑与进阶配置

相关文档