本文旨在介绍在脚本化自动成片场景下的合成参数、进阶配置、SDK调用示例。
为了更好地阅读本文,建议您在阅读之前先了解智能一键成片中与【脚本化自动成片】相关的内容。
名词解释:
“全局口播”模式:可以通过多个完整的口播文案随机搭配脚本节点,从而实现批量视频混剪。
“分组口播”模式:可以通过将一个完整的口播文案拆分成多个段落,并分别与脚本的各个节点进行巧妙搭配,以实现更佳的效果。
支持脚本化自动成片的区域:华东2(上海)、华北2(北京)、华东1(杭州)、华南1(深圳)。
使用说明
将多个视频、音频、图片素材进行智能混剪,一键批量合成视频接口说明,请参见SubmitBatchMediaProducingJob - 批量智能一键成片,api关键参数详见下文InputConfig 参数说明、EditingConfig 参数说明、OutputConfig 参数说明。
获取批量智能一键成片作业的详细信息,请参见GetBatchMediaProducingJob - 获取批量智能一键成片任务信息。
InputConfig 参数说明
用户可通过配置InputConfig,指定视频素材、口播、背景音乐、贴纸等基础素材的参数配置。
参数 | 类型 | 说明 | 是否必填 | 支持模式 |
MediaGroupArray | List<MediaGroup> | 脚本化自动成片模式。输入为脚本化素材,支持设置分组名、素材列表 分组名:不超过50个字符,不支持emoji。 素材列表:媒资ID或素材OSS URL。 最多40个分组,每组最多200个素材。 | 是 |
|
TitleArray | List<String> | 标题数组,每次合成随机选一个 最多50个,每个标题不超过50字 | 否 |
|
SubHeadingArray | List<SubHeading> | 副标题设置 | 否 |
|
SpeechTextArray | List<String> | 口播文案数组,每次合成随机选一个。 最多50个,每条口播文案最长1000个字符。 | 否 |
|
StickerArray | List<Sticker> | 贴纸数组,每次合成随机选一个。 最多50个。 | 否 |
|
BackgroundMusicArray | List<String> | 背景音乐数组,每次合成随机选一个。 最多50个,支持媒资ID 或 OSS URL。 | 否 |
|
BackgroundImageArray | List<String> | 背景图片数组,每次合成随机选择一个。 最多50个,支持媒资ID 或 OSS URL。 | 否 |
|
MediaGroup 参数说明
“全局口播模式”与“分组口播模式”的MediaGroup参数配置差异可根据表格列“支持模式”区分。
参数 | 类型 | 说明 | 是否必填 | 支持模式 |
GroupName | String | 分组名 不超过50个字符,不支持emoji。 | 是 |
|
MediaArray | List<String> | 素材列表,支持 mediaId 或 url。 最多40个分组,每组最多200个素材。 | 是 |
|
SpeechTextArray | List<String> | 口播文案数组,每次合成随机选一个。 最多50个,每条口播文案最长1000个字符。 | 否 |
|
Duration | Float | 当前分组截取视频的时长,默认5秒。仅限SpeechTextArray为空时填写 | 否 |
|
SubHeading 参数说明
“全局口播模式”与“分组口播模式”的SubHeading参数配置说明相同。
参数 | 类型 | 说明 | 是否必填 |
Level | Integer | 副标题级别。 枚举: 1:一级副标题 2:二级副标题 3:三级副标题 4:四级副标题 5:五级副标题 | 是 |
TitleArray | List<String> | 副标题数组,每次合成随机选一个 最多50个,每个标题不超过50字。 | 是 |
Sticker 参数说明
“全局口播模式”与“分组口播模式”的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 | 动图的帧数 | 否,贴纸为动图时填写 |
全局口播模式-参数示例
{
"MediaGroupArray": [
{
"GroupName": "UseMediaId",
"MediaArray": [
"****9d46c886b45481030f6e****",
"****c886810b4549d4630f6e****"
]
},
{
"GroupName": "UseOssUrl",
"MediaArray": [
"http://test-bucket.oss-cn-shanghai.aliyuncs.com/test1.mp4",
"http://test-bucket.oss-cn-shanghai.aliyuncs.com/test2.png"
]
}
],
"TitleArray": [
"回龙观盒马鲜生开业啦",
"盒马鲜生开业啦"
],
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["副标题1", "副标题2"]
},
{
"Level": 3,
"TitleArray": ["三级副标题"]
}
],
"SpeechTextArray": [
"附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹,这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙,大家也快来看看呀",
"附近的商场新开了一家盒马鲜生,今天是第一天开业,赶紧来凑热闹"
],
"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"
]
}
分组口播模式-参数示例
{
"MediaGroupArray": [{
"GroupName": "start",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/1.jpeg", "https://ice-auto-test.oss-cn-shanghai.aliyuncs.com/0-test-batch-editing-materials/highway.mp4"],
"Duration": 5
},
{
"GroupName": "group1",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/160134%2B9859695-2032aa5c-2803-47cd-bf65-8a40d66598db.png", "https://ice-auto-test.oss-cn-shanghai.aliyuncs.com/0-test-batch-editing-materials/cloud.mp4"],
"SpeechTextArray": ["附近的商场新开了一家盒马鲜生,今天是第一天开业", "今天是这家盒马鲜生第一天开业"]
},
{
"GroupName": "group2",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/normal%20video.mp4", "https://ice-auto-test.oss-cn-shanghai.aliyuncs.com/0-test-batch-editing-materials/3.jpeg"],
"SpeechTextArray": ["这家盒马面积不大,但商场里的人不少,零食、酒水都比较便宜,排队的人都排成了长龙", "现场特别热闹,人山人海,商品琳琅满目"]
},
{
"GroupName": "group3",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/young_sunset_walk.mp4"],
"SpeechTextArray": ["快来看看吧", "快点来看看吧"]
},
{
"GroupName": "end",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/media_type_as_video.jpg", "https://ice-auto-test.oss-cn-shanghai.aliyuncs.com/0-test-batch-editing-materials/highway.mp4"],
"Duration": 5
}
],
"TitleArray": [
"回龙观盒马鲜生开业啦",
"盒马鲜生开业啦"
],
"StickerArray": [
{
"MediaId": "****9d46c8b4548681030f6e****",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300
},
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["副标题1", "副标题2"]
},
{
"Level": 3,
"TitleArray": ["三级副标题"]
}
],
{
"MediaURL": "http://test-bucket.oss-cn-*****.aliyuncs.com/test3.png",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300
}
],
"BackgroundMusicArray": [
"****b4549d46c88681030f6e****",
"****549d46c88b4681030f6e****",
"http://test-bucket.oss-cn-*****.aliyuncs.com/test4.mp3"
],
"BackgroundImageArray": [
"****6c886b4549d481030f6e****",
"****9d46c8548b4681030f6e****",
"http://test-bucket.oss-cn-*****.aliyuncs.com/test1.png"
]
}
EditingConfig 参数说明
用户可通过配置EditingConfig,指定成片素材的音量、位置及其他合成参数。
除了以下参数外,其余参数皆支持“全局口播模式”和“分组口播模式”:
ProcessConfig.AlignmentMode仅在“全局口播模式”下生效;
参数 | 类型 | 说明 | 是否必填 |
MediaConfig | JSON | 输入视频素材相关配置。 支持字段:
| 否 |
TitleConfig | JSON | 标题相关配置。支持配置字幕参数,字段详见:横幅文字。 | 否 |
SubHeadingConfig | JSON | JSON说明: key:Level value:横幅文字 示例如下:
| 否 |
SpeechConfig | JSON | 口播文案相关配置。 支持字段:
说明 计算方法如下:
小于1倍速时,使用0.002系数。 大于1倍速时,使用0.001系数。 实际算法结果取近似值。
| 否 |
BackgroundMusicConfig | JSON | 背景音乐相关配置。 支持字段:
| 否 |
BackgroundImageConfig | JSON | 背景图相关配置。如果InputConfig中已配置背景图,则此字段不生效。 支持字段:
| 否 |
ProcessConfig | 混剪处理配置。 支持字段:
| ||
ProduceConfig | JSON | 普通剪辑合成配置,字段详见:EditingProduceConfig | 否 |
参数示例
{
"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坐标值
},
"SubHeadingConfig": {
"1": {
"Y": 0.3,
"FontSize": 40
},
"3": {
"Y": 0.5,
"FontSize": 30
}
},
"SpeechConfig": {
"Volume": 1, // 口播音频默认用原始音量
"SpeechRate": 0,
"Voice": null,
"Style": null,
"CustomizedVoice": null // 若填写了此字段,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坐标值
}
},
"BackgroundMusicConfig": {
"Volume": 0.2, // 背景音乐默认用20%音量,
"Style": null
},
"ProcessConfig": {
"SingleShotDuration": 3, // 拆条后的镜头时长
"AllowVfxEffect": false, // 是否添加特效效果
"AllowTransition": false, // 是否添加转场效果
"AlignmentMode": "AutoSpeed" // 仅支持全局口播模式下支持此字段
}
}
OutputConfig 参数说明
用户可通过配置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。 |
MaxDuration | Float | 否 | 输出视频单片时长上限。
|
FixedDuration | Float | 否 | 输出视频单片的固定时长。如果设置了固定时长,视频时长将会对齐此参数。
|
Width | Integer | 是 | 成片宽,px |
Height | Integer | 是 | 成片高,px |
JSONObject | 否 | 输出视频流相关配置,Crf、Codec等 |
参数示例
{
"MediaURL": "http://xxx.oss-cn-shanghai.aliyuncs.com/xxx_{index}.mp4",
"Count": 20,
"MaxDuration": 15,
"Width": 1080,
"Height": 1920,
"Video": {"Crf": 27},
"GeneratePreviewOnly":false
}
SDK调用示例
前提条件
您已安装IMS服务端SDK,详情请参见准备工作。
代码示例
以全局口播模式为例
API调用入参详情
结果示例
竖屏 | 横屏 |
混剪逻辑与进阶配置
处理逻辑
全局口播模式:
如果输入视频为长视频片段,会先进行拆条,混剪时选取拆条后的视频片段进行拼接合成。拆条后单镜头的时长默认为3s,您也可以通过参数EditingConfig.ProcessConfig.SingleShotDuration指定镜头时长。
如果有输入全局口播文案,在数量足够的前提下,尽量不重复选取。例如:输入3条文案,需要生成5条视频,则5条成片中会出现相同文案,但3条文案都会被使用至少一次。
按照分组顺序,先每组随机挑选一个拆条后的视频片段,进行前后拼接。如果输入了全局口播文案且视频总时长少于口播时长,则优先从非首尾分组中随机选取视频片段,直到视频总时长与口播时长相当。
成片时长规则:
输入了全局口播文案:成片时长=口播文案的时长。
没有输入全局口播文案:
如果设置了FixedDuration参数,成片时长=FixedDuration的值”;
如果设置了MaxDuration参数,成片时长=SingleShotDuration的值×分组的数量(即SpeechTextArray的长度),但时长不得超过MaxDuration的值。
分组口播模式:
和「全局口播模式」相同,先对长视频进行拆条。相比于全局口播模式,分组口播模式的口播文案在MediaGroup中进行分组设置。因此,MediaGroup新增了SpeechTextArray字段。采用分组口播模式时,无需设置InputConfig.SpeechText或SpeechTextArray,若进行设置将导致错误。
MediaGroup.SpeechTextArray 为空,说明这个素材组无口播,用Duration控制该组时长,默认5s。
每组支持传入多组口播,如果所有组的口播数量一致(除去无口播组),则默认按顺序组合。比如所有组都选用第N个口播片段。如果每组的口播数量不一致,则每组随机选一个口播片段,最后合并成完整口播。
进阶配置
进阶配置详见批量一键成片混剪逻辑与进阶配置
典型场景
如果仅输入一个分组(MediaGroup),并且该组内存在一个或多个视频,则对输入素材进行随机剪辑与拼接;若未设置口播,但仍希望生成一定时长的成片,则需设置OutputConfig.FixedDuration,否则生成的成片仅会包含一个3秒的小片段。
如果输入多个分组,每组包含一个或多个视频,并且每个视频的时长彼此接近,例如均为5秒左右,且希望按顺序从每组中选择一个片段进行前后拼接,则需将EditingConfig.ProcessConfig.SingleShotDuration设置为5秒(尽量保持与原始素材长度大致一致),通过此操作,能够确保不再对“已选择为片段的素材”进行截取。
当输入一个分组时,如果该分组包含图片和视频,则有一定几率会选取到图片,此时图片将占满整个成片。因此,建议避免采用这种使用方式。图片时长的计算逻辑如下:
无口播、无FixedDuration ,则图片时长 = 2s
有口播,则图片时长 = 口播tts时长 / MediaGroupArray数组长度
有FixedDuration 无口播,则图片时长 = FixedDuration / MediaGroupArray数组长度
应用示例
示例一:通过口播分组模式配置片头片尾
适用场景
如果您希望为视频添加一致的片头和片尾,并配备统一的口播,请参阅该场景的示例。
示例参数
示例展示
示例二:通过脚本化自动成片制作人脸集锦视频
如果您对人脸集锦场景相关的需求感兴趣,建议您查阅相关最佳实践:人脸集锦视频制作最佳实践。