腳本化自動成片
本文旨在介紹在腳本化自動成片場景下的合成參數(shù)、進(jìn)階配置、SDK調(diào)用示例。
為了更好地閱讀本文,建議您在閱讀之前先了解智能一鍵成片中與【腳本化自動成片】相關(guān)的內(nèi)容。
腳本化自動成片當(dāng)前存在兩種處理模式分別為“全局口播模式”和“分組口播模式”:
全局口播模式:可以通過多個完整的口播文案隨機(jī)搭配腳本節(jié)點(diǎn),從而實(shí)現(xiàn)批量視頻混剪。
分組口播模式:可以通過將一個完整的口播文案拆分成多個段落,并分別與腳本的各個節(jié)點(diǎn)進(jìn)行巧妙搭配,以實(shí)現(xiàn)更佳的效果。
如何通過參數(shù)區(qū)分“全局口播模式”和“分組口播模式”,如下所示:
當(dāng)SpeechTextArray不為空,則視為“全局口播模式”;
當(dāng)SpeechTextArray為空,且MediaGroupArray中只要有一個MediaGroup.Duration或MediaGroup.SpeechTextArray不為空,則視為“分組口播模式”;
當(dāng)SpeechTextArray為空,且MediaGroupArray中所有的MediaGroup.Duration和MediaGroup.SpeechTextArray皆為空,則視為“全局口播模式”;
支持腳本化自動成片的區(qū)域:華東2(上海)、華北2(北京)、華東1(杭州)、華南1(深圳)。
使用說明
將多個視頻、音頻、圖片素材進(jìn)行智能混剪,一鍵批量合成視頻接口說明,請參見SubmitBatchMediaProducingJob - 批量智能一鍵成片,api關(guān)鍵參數(shù)詳見下文InputConfig 參數(shù)說明、EditingConfig 參數(shù)說明、OutputConfig 參數(shù)說明。
獲取批量智能一鍵成片作業(yè)的詳細(xì)信息,請參見GetBatchMediaProducingJob - 獲取批量智能一鍵成片任務(wù)信息。
InputConfig 參數(shù)說明
用戶可通過配置InputConfig,指定視頻素材、口播、背景音樂、貼紙等基礎(chǔ)素材的參數(shù)配置。
參數(shù) | 類型 | 說明 | 是否必填 | 支持模式 |
MediaGroupArray | List<MediaGroup> | 腳本化自動成片模式。輸入為腳本化素材,支持設(shè)置分組名、素材列表 分組名:不超過50個字符,不支持emoji。 素材列表:媒資ID或素材OSS URL。 最多40個分組,每組最多200個素材。 | 是 |
|
TitleArray | List<String> | 標(biāo)題數(shù)組,每次合成隨機(jī)選一個 最多50個,每個標(biāo)題不超過50字 | 否 |
|
SubHeadingArray | List<SubHeading> | 副標(biāo)題設(shè)置 | 否 |
|
SpeechTextArray | List<String> | 口播文案數(shù)組,每次合成隨機(jī)選一個。 最多50個,每條口播文案最長1000個字符。 | 否 |
|
StickerArray | List<Sticker> | 貼紙數(shù)組,每次合成隨機(jī)選一個。 最多50個。 | 否 |
|
BackgroundMusicArray | List<String> | 背景音樂數(shù)組,每次合成隨機(jī)選一個。 最多50個,支持媒資ID 或 OSS URL。 | 否 |
|
BackgroundImageArray | List<String> | 背景圖片數(shù)組,每次合成隨機(jī)選擇一個。 最多50個,支持媒資ID 或 OSS URL。 | 否 |
|
MediaGroup 參數(shù)說明
“全局口播模式”與“分組口播模式”的MediaGroup參數(shù)配置差異可根據(jù)表格列“支持模式”區(qū)分。
參數(shù) | 類型 | 說明 | 是否必填 | 支持模式 |
GroupName | String | 分組名 不超過50個字符,不支持emoji。 | 是 |
|
MediaArray | List<String> | 素材列表,支持 mediaId 或 url。 最多40個分組,每組最多200個素材。 | 是 |
|
SpeechTextArray | List<String> | 口播文案數(shù)組,每次合成隨機(jī)選一個。 最多50個,每條口播文案最長1000個字符。 | 否 |
|
Duration | Float | 當(dāng)前分組截取視頻的時長,默認(rèn)5秒。僅限SpeechTextArray為空時填寫 | 否 |
|
SubHeading 參數(shù)說明
“全局口播模式”與“分組口播模式”的SubHeading參數(shù)配置說明相同。
參數(shù) | 類型 | 說明 | 是否必填 |
Level | Integer | 副標(biāo)題級別。 枚舉: 1:一級副標(biāo)題 2:二級副標(biāo)題 3:三級副標(biāo)題 4:四級副標(biāo)題 5:五級副標(biāo)題 | 是 |
TitleArray | List<String> | 副標(biāo)題數(shù)組,每次合成隨機(jī)選一個 最多50個,每個標(biāo)題不超過50字。 | 是 |
Sticker 參數(shù)說明
“全局口播模式”與“分組口播模式”的Sticker參數(shù)配置說明相同。
參數(shù) | 類型 | 說明 | 是否必填 |
MediaId | String | 貼紙、logo、水印等圖片ID | 二選一必填 都填寫時優(yōu)先取用MediaId |
MediaURL | String | 圖片URL,僅支持自有OSS | |
X | Float | 參考VideoTrackClip.X | 否 |
Y | Float | 參考VideoTrackClip.Y | 否 |
Width | Float | 參考VideoTrackClip.Width | 否 |
Height | Float | 參考VideoTrackClip.Height | 否 |
DynamicFrames | Integer | 動圖的幀數(shù) | 否,貼紙為動圖時填寫 |
全局口播模式-參數(shù)示例
{
"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": [
"回龍觀盒馬鮮生開業(yè)啦",
"盒馬鮮生開業(yè)啦"
],
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["副標(biāo)題1", "副標(biāo)題2"]
},
{
"Level": 3,
"TitleArray": ["三級副標(biāo)題"]
}
],
"SpeechTextArray": [
"附近的商場新開了一家盒馬鮮生,今天是第一天開業(yè),趕緊來湊熱鬧,這家盒馬面積不大,但商場里的人不少,零食、酒水都比較便宜,排隊(duì)的人都排成了長龍,大家也快來看看呀",
"附近的商場新開了一家盒馬鮮生,今天是第一天開業(yè),趕緊來湊熱鬧"
],
"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"
]
}
分組口播模式-參數(shù)示例
{
"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": ["附近的商場新開了一家盒馬鮮生,今天是第一天開業(yè)", "今天是這家盒馬鮮生第一天開業(yè)"]
},
{
"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": ["這家盒馬面積不大,但商場里的人不少,零食、酒水都比較便宜,排隊(duì)的人都排成了長龍", "現(xiàn)場特別熱鬧,人山人海,商品琳瑯滿目"]
},
{
"GroupName": "group3",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/young_sunset_walk.mp4"],
"SpeechTextArray": ["快來看看吧", "快點(diǎn)來看看吧"]
},
{
"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": [
"回龍觀盒馬鮮生開業(yè)啦",
"盒馬鮮生開業(yè)啦"
],
"StickerArray": [
{
"MediaId": "****9d46c8b4548681030f6e****",
"X": 10,
"Y": 100,
"Width": 300,
"Height": 300
},
"SubHeadingArray": [
{
"Level": 1,
"TitleArray": ["副標(biāo)題1", "副標(biāo)題2"]
},
{
"Level": 3,
"TitleArray": ["三級副標(biāo)題"]
}
],
{
"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 參數(shù)說明
用戶可通過配置EditingConfig,指定成片素材的音量、位置及其他合成參數(shù)。
除了以下參數(shù)外,其余參數(shù)皆支持“全局口播模式”和“分組口播模式”:
ProcessConfig.AlignmentMode僅在“全局口播模式”下生效;
參數(shù) | 類型 | 說明 | 是否必填 |
MediaConfig | JSON | 輸入視頻素材相關(guān)配置。 支持字段:
| 否 |
TitleConfig | JSON | 標(biāo)題相關(guān)配置。支持配置字幕參數(shù),字段詳見:橫幅文字。 | 否 |
SubHeadingConfig | JSON | JSON說明: key:Level value:橫幅文字 示例如下:
| 否 |
SpeechConfig | JSON | 口播文案相關(guān)配置。 支持字段:
說明 計(jì)算方法如下:
小于1倍速時,使用0.002系數(shù)。 大于1倍速時,使用0.001系數(shù)。 實(shí)際算法結(jié)果取近似值。
| 否 |
BackgroundMusicConfig | JSON | 背景音樂相關(guān)配置。 支持字段:
| 否 |
BackgroundImageConfig | JSON | 背景圖相關(guān)配置。如果InputConfig中已配置背景圖,則此字段不生效。 支持字段:
| 否 |
ProcessConfig | 混剪處理配置。 支持字段:
| ||
ProduceConfig | JSON | 普通剪輯合成配置,字段詳見:EditingProduceConfig | 否 |
參數(shù)示例
{
"MediaConfig": {
"Volume": 0 // 默認(rèn)視頻素材靜音
},
"TitleConfig": {
"Alignment": "TopCenter",
"AdaptMode": "AutoWrap",
"Font": "Alibaba PuHuiTi 2.0 95 ExtraBold",
"SizeRequestType": "Nominal",
"Y": 0.1, // 成片為豎屏?xí)r,標(biāo)題Y坐標(biāo)值
"Y": 0.05, // 成片為橫屏?xí)r,標(biāo)題Y坐標(biāo)值
"Y": 0.08 // 成片為方屏?xí)r,標(biāo)題Y坐標(biāo)值
},
"SubHeadingConfig": {
"1": {
"Y": 0.3,
"FontSize": 40
},
"3": {
"Y": 0.5,
"FontSize": 30
}
},
"SpeechConfig": {
"Volume": 1, // 口播音頻默認(rèn)用原始音量
"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, // 成片為豎屏?xí)r,字幕Y坐標(biāo)值
"Y": 0.9, // 成片為橫屏?xí)r,字幕Y坐標(biāo)值
"Y": 0.85 // 成片為方屏?xí)r,字幕Y坐標(biāo)值
}
},
"BackgroundMusicConfig": {
"Volume": 0.2, // 背景音樂默認(rèn)用20%音量,
"Style": null
},
"ProcessConfig": {
"SingleShotDuration": 3, // 拆條后的鏡頭時長
"AllowVfxEffect": false, // 是否添加特效效果
"AllowTransition": false, // 是否添加轉(zhuǎn)場效果
"AlignmentMode": "AutoSpeed" // 僅支持全局口播模式下支持此字段
}
}
OutputConfig 參數(shù)說明
用戶可通過配置OutputConfig,指定成片輸出地址、名稱規(guī)則、成片的寬高、輸出成片數(shù)量等合成參數(shù)。
“全局口播模式”與“分組口播模式”的OutputConfig參數(shù)配置說明是相同的。
參數(shù) | 類型 | 必填 | 說明 |
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 | 否,默認(rèn)false | GeneratePreviewOnly = true時,表示當(dāng)前任務(wù)僅生成預(yù)覽用的時間線,不實(shí)際合成,可不填寫輸出視頻的地址。 一鍵成片任務(wù)完成后,通過GetBatchMediaProducingJob查詢?nèi)蝿?wù)結(jié)果,返回的子任務(wù)列表中會包含剪輯工程projectId,再調(diào)用GetEditingProject可獲取到預(yù)覽時間線。 |
Count | Integer | 否,默認(rèn)1 | 輸出視頻數(shù),數(shù)量上限為100。 |
MaxDuration | Float | 否,默認(rèn)15秒 | 輸出視頻單片時長上限。
|
FixedDuration | Float | 否,默認(rèn)15秒 | 輸出視頻單片的固定時長。如果設(shè)置了固定時長,視頻時長將會對齊此參數(shù)。
|
Width | Integer | 是 | 成片寬,px |
Height | Integer | 是 | 成片高,px |
JSONObject | 否 | 輸出視頻流相關(guān)配置,Crf、Codec等 |
參數(shù)示例
{
"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調(diào)用示例
前提條件
您已安裝IMS服務(wù)端SDK,詳情請參見準(zhǔn)備工作。
代碼示例
以全局口播模式為例
package com.example;
import java.util.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.ice20201109.Client;
import com.aliyun.ice20201109.models.*;
import com.aliyun.teaopenapi.models.Config;
/**
* 需要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 ScriptBatchEditingService {
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 {
ScriptBatchEditingService scriptBatchEditingService = new ScriptBatchEditingService();
scriptBatchEditingService.initClient();
scriptBatchEditingService.runExample();
}
public void initClient() throws Exception {
// 阿里云賬號AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運(yùn)維。
// 本示例以將AccessKey ID和 AccessKey Secret保存在環(huán)境變量為例說明。配置方法請參見:http://bestwisewords.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,代碼如下,但強(qiáng)烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號下所有資源的安全。
// config.accessKeyId = <第二步創(chuàng)建的AccessKey ID>;
// config.accessKeySecret = <第二步創(chuàng)建的AccessKey Secret>;
config.endpoint = "ice." + regionId + ".aliyuncs.com";
config.regionId = regionId;
iceClient = new Client(config);
}
public void runExample() throws Exception {
// 視頻素材
JSONObject mediaGroup1 = new JSONObject();
mediaGroup1.put("GroupName", "start");
mediaGroup1.put("MediaArray", Arrays.asList(
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-start-1.mp4"
));
JSONObject mediaGroup2 = new JSONObject();
mediaGroup2.put("GroupName", "middle");
mediaGroup2.put("MediaArray", Arrays.asList(
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-1.mp4",
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-2.mp4",
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-3.mp4"
));
JSONObject mediaGroup3 = new JSONObject();
mediaGroup3.put("GroupName", "end");
mediaGroup3.put("MediaArray", Arrays.asList(
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-end-1.mp4"
));
JSONArray mediaGroupArray = new JSONArray();
mediaGroupArray.add(mediaGroup1);
mediaGroupArray.add(mediaGroup2);
mediaGroupArray.add(mediaGroup3);
// 口播文案
List<String> speechTextArray = Arrays.asList(
"假期糾結(jié)去哪兒玩?云南瀘沽湖邀您共赴一場與自然的約會。湛藍(lán)湖水如鏡,映照著摩梭女兒國的獨(dú)特風(fēng)情,如詩如畫。泛舟湖心,感受豬槽船搖曳的歲月靜好;仰望女神山,傾聽古老神秘的故事傳說。還在等什么,快來瀘沽湖共享這一份靜謐而迷人的湖光山色吧!",
"假期規(guī)劃還在猶豫不決?何不考慮赴一場云南瀘沽湖的自然盛宴。那湛藍(lán)如鏡的湖面,映射出摩梭女兒國獨(dú)特的民俗風(fēng)情,如詩如畫,引人入勝。您可在湖心悠然泛舟,體驗(yàn)豬槽船搖曳間的寧靜歲月;也可抬頭瞻仰神圣女神山,傾聽那穿越千年的古老神秘傳說。快來瀘沽湖,共享這片靜謐而迷人的湖光山色所帶來的無盡詩意吧!"
);
// 視頻標(biāo)題
List<String> titleArray = Arrays.asList(
"瀘沽湖:湖光山色中的摩梭風(fēng)情",
"探尋秘境瀘沽湖",
"沉浸式體驗(yàn)瀘沽湖"
);
JSONObject inputConfig = new JSONObject();
inputConfig.put("MediaGroupArray", mediaGroupArray);
inputConfig.put("SpeechTextArray", speechTextArray);
inputConfig.put("TitleArray", titleArray);
// 生成的成片數(shù)
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/script/output_{index}_w.mp4";
JSONObject outputConfig = new JSONObject();
outputConfig.put("MediaURL", mediaUrl);
outputConfig.put("Count", produceCount);
outputConfig.put("Width", outputWidth);
outputConfig.put("Height", outputHeight);
// 提交一鍵成片任務(wù)
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 script batch job, batchJobId: " + jobId);
// 輪詢?nèi)蝿?wù)狀態(tài)直到全部結(jié)束
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調(diào)用入?yún)⒃斍?/b>
{
"MediaGroupArray": [{
"GroupName": "start",
"MediaArray": [
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-start-1.mp4"
]
},
{
"GroupName": "middle",
"MediaArray": [
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-1.mp4",
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-2.mp4",
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-m-3.mp4"
]
},
{
"GroupName": "end",
"MediaArray": [
"http://ice-document-materials.oss-cn-shanghai.aliyuncs.com/test_media/lgh/lgh-end-1.mp4"
]
}
],
"SpeechTextArray": [
"假期糾結(jié)去哪兒玩?云南瀘沽湖邀您共赴一場與自然的約會。湛藍(lán)湖水如鏡,映照著摩梭女兒國的獨(dú)特風(fēng)情,如詩如畫。泛舟湖心,感受豬槽船搖曳的歲月靜好;仰望女神山,傾聽古老神秘的故事傳說。還在等什么,快來瀘沽湖共享這一份靜謐而迷人的湖光山色吧!",
"假期規(guī)劃還在猶豫不決?何不考慮赴一場云南瀘沽湖的自然盛宴。那湛藍(lán)如鏡的湖面,映射出摩梭女兒國獨(dú)特的民俗風(fēng)情,如詩如畫,引人入勝。您可在湖心悠然泛舟,體驗(yàn)豬槽船搖曳間的寧靜歲月;也可抬頭瞻仰神圣女神山,傾聽那穿越千年的古老神秘傳說。快來瀘沽湖,共享這片靜謐而迷人的湖光山色所帶來的無盡詩意吧!"
],
"TitleArray": [
"瀘沽湖:湖光山色中的摩梭風(fēng)情",
"探尋秘境瀘沽湖",
"沉浸式體驗(yàn)瀘沽湖"
]
}
結(jié)果示例
豎屏 | 橫屏 |
混剪邏輯與進(jìn)階配置
處理邏輯
全局口播模式:
如果輸入視頻為長視頻片段,會先進(jìn)行拆條,混剪時選取拆條后的視頻片段進(jìn)行拼接合成。拆條后單鏡頭的時長默認(rèn)為3s,您也可以通過參數(shù)EditingConfig.ProcessConfig.SingleShotDuration指定鏡頭時長。
如果有輸入全局口播文案,在數(shù)量足夠的前提下,盡量不重復(fù)選取。例如:輸入3條文案,需要生成5條視頻,則5條成片中會出現(xiàn)相同文案,但3條文案都會被使用至少一次。
按照分組順序,先每組隨機(jī)挑選一個拆條后的視頻片段,進(jìn)行前后拼接。如果輸入了全局口播文案且視頻總時長少于口播時長,則優(yōu)先從非首尾分組中隨機(jī)選取視頻片段,直到視頻總時長與口播時長相當(dāng)。
成片時長規(guī)則:
輸入了全局口播文案:成片時長=口播文案的時長。
沒有輸入全局口播文案:
如果設(shè)置了FixedDuration參數(shù),成片時長=FixedDuration的值”;
如果設(shè)置了MaxDuration參數(shù),成片時長=SingleShotDuration的值×分組的數(shù)量(即SpeechTextArray的長度),但時長不得超過MaxDuration的值。
分組口播模式:
和「全局口播模式」相同,先對長視頻進(jìn)行拆條。相比于全局口播模式,分組口播模式的口播文案在MediaGroup中進(jìn)行分組設(shè)置。因此,MediaGroup新增了SpeechTextArray字段。采用分組口播模式時,無需設(shè)置InputConfig.SpeechText或SpeechTextArray,若進(jìn)行設(shè)置將導(dǎo)致錯誤。
MediaGroup.SpeechTextArray 為空,說明這個素材組無口播,用Duration控制該組時長,默認(rèn)5s。
每組支持傳入多組口播,如果所有組的口播數(shù)量一致(除去無口播組),則默認(rèn)按順序組合。比如所有組都選用第N個口播片段。如果每組的口播數(shù)量不一致,則每組隨機(jī)選一個口播片段,最后合并成完整口播。
進(jìn)階配置
進(jìn)階配置詳見批量一鍵成片混剪邏輯與進(jìn)階配置
典型場景
如果僅輸入一個分組(MediaGroup),并且該組內(nèi)存在一個或多個視頻,則對輸入素材進(jìn)行隨機(jī)剪輯與拼接;若未設(shè)置口播,但仍希望生成一定時長的成片,則需設(shè)置OutputConfig.FixedDuration,否則生成的成片僅會包含一個3秒的小片段。
如果輸入多個分組,每組包含一個或多個視頻,并且每個視頻的時長彼此接近,例如均為5秒左右,且希望按順序從每組中選擇一個片段進(jìn)行前后拼接,則需將EditingConfig.ProcessConfig.SingleShotDuration設(shè)置為5秒(盡量保持與原始素材長度大致一致),通過此操作,能夠確保不再對“已選擇為片段的素材”進(jìn)行截取。
當(dāng)輸入一個分組時,如果該分組包含圖片和視頻,則有一定幾率會選取到圖片,此時圖片將占滿整個成片。因此,建議避免采用這種使用方式。圖片時長的計(jì)算邏輯如下:
無口播、無FixedDuration ,則圖片時長 = 2s
有口播,則圖片時長 = 口播tts時長 / MediaGroupArray數(shù)組長度
有FixedDuration 無口播,則圖片時長 = FixedDuration / MediaGroupArray數(shù)組長度
應(yīng)用示例
示例一:通過口播分組模式配置片頭片尾
適用場景
如果您希望為視頻添加一致的片頭和片尾,并配備統(tǒng)一的口播,請參閱該場景的示例。
示例參數(shù)
{
"mediaGroupArray": [
{
"duration": 4,
"groupName": "opening",
"mediaArray": [
"https://*****.****.****/public-template/video/movie_apsara_4.mp4"
]
},
{
"groupName": "group1",
"mediaArray": [
"http://*****.****.****/test_media/lgh/lgh-start-1.mp4"
],
"speechTextArray": [
"假期糾結(jié)去哪兒玩?",
"假期規(guī)劃還在猶豫不決?"
]
},
{
"groupName": "group2",
"mediaArray": [
"http://*****.****.****/test_media/lgh/lgh-m-1.mp4",
"http://*****.****.****/test_media/lgh/lgh-m-2.mp4",
"http://*****.****.****/test_media/lgh/lgh-m-3.mp4"
],
"speechTextArray": [
"云南瀘沽湖邀您共赴一場與自然的約會。湛藍(lán)湖水如鏡,映照著摩梭女兒國的獨(dú)特風(fēng)情,如詩如畫。泛舟湖心,感受豬槽船搖曳的歲月靜好;仰望女神山,傾聽古老神秘的故事傳說。還在等什么",
"何不考慮赴一場云南瀘沽湖的自然盛宴。那湛藍(lán)如鏡的湖面,映射出摩梭女兒國獨(dú)特的民俗風(fēng)情,如詩如畫,引人入勝。您可在湖心悠然泛舟,體驗(yàn)豬槽船搖曳間的寧靜歲月;也可抬頭瞻仰神圣女神山,傾聽那穿越千年的古老神秘傳說。快來瀘沽湖"
]
},
{
"groupName": "group3",
"mediaArray": [
"http://*****.****.****/test_media/lgh/lgh-end-1.mp4"
],
"speechTextArray": [
"快來瀘沽湖共享這一份靜謐而迷人的湖光山色吧!",
"共享這片靜謐而迷人的湖光山色所帶來的無盡詩意吧!"
]
},
{
"duration": 4,
"groupName": "ending",
"mediaArray": [
"https://*****.****.****/public-template/video/movie_apsara_3.mp4"
]
}
]
}
{
"MediaConfig": {
"MediaMetaDataArray": [
{
"Media": "https://*****.****.****/public-template/video/movie_apsara_4.mp4",
"GroupName": "opening",
"TimeRangeList": [
{
"In": 1.5,
"Out": 5.5
}
]
},
{
"Media": "https://*****.****.****/public-template/video/movie_apsara_3.mp4",
"GroupName": "ending",
"TimeRangeList": [
{
"In": 1.5,
"Out": 5.5
}
]
}
]
}
}
{
"count": 10,
"height": 1920,
"mediaURL": "https://*****.****.****/lgh-opening-ending/1731294507380_{index}.mp4",
"width": 1080,
"widthHeightRatio": 0.5625
}
示例展示
示例二:通過腳本化自動成片制作人臉集錦視頻
如果您對人臉集錦場景相關(guān)的需求感興趣,建議您查閱相關(guān)最佳實(shí)踐:人臉集錦視頻制作最佳實(shí)踐。