本文旨在介紹在智能圖文匹配成片-體育賽事集錦場景下的合成參數、SDK調用示例。
為了更好地閱讀本文,建議您在閱讀本文之前先通過智能一鍵成片操作指南了解【智能圖文匹配成片-體育賽事集錦】相關的概念與使用流程。
支持的區域:華東2(上海)。
使用說明
將完整體育賽事視頻進行智能混剪,一鍵批量合成視頻接口說明,請參見SubmitSportsHighlightsJob - 提交體育集錦任務,API關鍵參數詳見下文InputConfig 參數說明、OutputConfig 參數說明。
獲取批量智能一鍵成片作業的詳細信息,請參見GetBatchMediaProducingJob - 獲取批量智能一鍵成片任務信息。
InputConfig 參數說明
用戶可通過配置InputConfig,指定視頻素材、口播、背景音樂、貼紙等基礎素材的參數配置。
參數 | 類型 | 是否必填 | 說明 |
SportsCategory | String | 是 | 體育賽事類型 籃球:basketball 乒乓球:pingpong |
InputMedia | String | 是 | 輸入的體育賽事素材。支持MediaId 或 MediaURL
|
FaceRegister | List<FaceInfo> | 否 | 人物標識,數組長度小于等于5。 |
SlowMotionLogoRegister | 否 | 慢鏡頭標識。如果成片中需包含慢鏡頭,需提供源片中慢鏡頭之前出現的logo標識信息。數組長度小于等于5。 | |
TransferNameRegister | List<TransferNameInfo> | 是 | 名稱轉寫標識,將記分牌中的隊名縮寫轉寫為完整隊名。數組長度小于等于10。 |
FaceInfo 參數說明
字段 | 類型 | 必填 | 描述 |
FaceUrls | List<String> | 是 | 人臉圖片鏈接,最好同時帶有正臉和側臉。請確保人臉圖片中僅包含一名個體,并且人臉應清晰可見,無明顯遮擋或缺失現象。 |
Name | String | 是 | 人物名稱,必須與輸入視頻中記分牌顯示的人名一致 |
SlowMotionLogoRegister 參數說明
字段 | 類型 | 必填 | 描述 |
SlowMotionLogoUrls | List<String> | 是 | 源片中,慢鏡頭畫面出現之前的Logo圖片鏈接 |
TransferNameInfo 參數說明
字段 | 類型 | 必填 | 描述 |
OriginalName | String | 是 | 賽事記分牌中的隊名縮寫 |
TransferName | String | 是 | 完整隊名 |
參數示例
{
"SportsCategory": "Basketball",
"InputMedia": "http://test-bucket.oss-cn-******.basketball-0707.mp4",
"FaceRegister": [
{
"FaceUrls": ["http://testcdn.com/front.jpg", "http://testcdn.com/side.jpg"],
"Name": "James"
}
],
"SlowMotionLogoRegister": {
"SlowMotionLogoUrls": ["http://testcdn.com/logo1.jpg", "http://testcdn.com/logo2.jpg"]
},
"TransferNameRegister": [
{
"OriginalName": "IND",
"TransferName": "印第安納步行者"
}
]
}
EditingConfig 參數說明
暫不支持配置EditingConfig相關參數
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 | 輸出視頻數,當前支持Count=1,后續可能支持輸出多個視頻。 |
Width | Integer | 是 | 成片寬,px |
Height | Integer | 是 | 成片高,px |
JSONObject | 否 | 輸出視頻流相關配置,Crf、Codec等 |
參數示例
{
"MediaURL": "http://xxx.oss-cn-shanghai.aliyuncs.com/xxx_{index}.mp4",
"Count": 1,
"Width": 1080,
"Height": 1920,
"Video": {"Crf": 27},
"GeneratePreviewOnly":false
}
SDK調用示例
前提條件
您已安裝IMS服務端SDK,詳情請參見準備工作。
代碼示例
package com.example.vodservicesdktest.ice.editing;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.ice20201109.Client;
import com.aliyun.ice20201109.models.GetBatchMediaProducingJobRequest;
import com.aliyun.ice20201109.models.GetBatchMediaProducingJobResponse;
import com.aliyun.ice20201109.models.SubmitSportsHighlightsJobRequest;
import com.aliyun.ice20201109.models.SubmitSportsHighlightsJobResponse;
import com.aliyun.teaopenapi.models.Config;
/**
* 需要maven引入二方包依賴:
* <dependency>
* <groupId>com.aliyun</groupId>
* <artifactId>ice20201109</artifactId>
* <version>3.4.0</version>
* </dependency>
* <dependency>
* <groupId>com.alibaba</groupId>
* <artifactId>fastjson</artifactId>
* <version>1.2.9</version>
* </dependency>
*/
public class SportsHighlightsJobService {
static final String regionId = "cn-shanghai";
static final String bucket = "ice-auto-test";
private Client iceClient;
public static void main(String[] args) throws Exception {
SportsHighlightsJobService scriptBatchEditingService = new SportsHighlightsJobService();
scriptBatchEditingService.initClient();
scriptBatchEditingService.runExample();
}
public void initClient() throws Exception {
// 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。
// 本示例以將AccessKey ID和 AccessKey Secret保存在環境變量為例說明。配置方法請參見: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,代碼如下,但強烈建議不要把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 {
JSONObject inputConfig = new JSONObject();
inputConfig.put("SportsCategory", "basketball");
inputConfig.put("InputMedia", "http://test-bucket.oss-cn-shanghai.basketball.mp4");
JSONArray transferNameRegisterArray = new JSONArray();
JSONObject transferName = new JSONObject();
transferName.put("OriginalName", "IND");
transferName.put("TransferName", "印第安納步行者");
transferNameRegisterArray.add(transferName);
inputConfig.put("TransferNameRegister", transferNameRegisterArray);
// 成片寬高,生成豎屏文件
//int outputWidth = 1080;
//int outputHeight = 1920;
//// 成片寬高,生成橫屏文件
int outputWidth = 1920;
int outputHeight = 1080;
// 成片oss地址,需包含{index} 占位符
String mediaUrl = "http://" + bucket + ".oss-" + regionId + ".aliyuncs.com/sports_highlights/output_{index}.mp4";
JSONObject outputConfig = new JSONObject();
outputConfig.put("MediaURL", mediaUrl);
outputConfig.put("Width", outputWidth);
outputConfig.put("Height", outputHeight);
// 提交體育集錦任務
SubmitSportsHighlightsJobRequest request = new SubmitSportsHighlightsJobRequest();
request.setInputConfig(inputConfig.toJSONString());
request.setOutputConfig(outputConfig.toJSONString());
SubmitSportsHighlightsJobResponse response = iceClient.submitSportsHighlightsJob(request);
String jobId = response.getBody().getJobId();
System.out.println("Start sports highlights job, JobId: " + 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("JobId: " + jobId + ", status:" + status);
if ("Failed".equals(status)) {
System.out.println("Job failed. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
throw new Exception("Produce failed. BatchJobId: " + jobId);
}
if ("Finished".equals(status)) {
System.out.println("Job finished. JobInfo: " + JSONObject.toJSONString(getResponse.getBody().getEditingBatchJob()));
break;
}
}
}
}
API調用入參詳情
{
"Category": "Basketball",
"InputMedia": "http://test-bucket.oss-cn-shanghai.basketball-0707.mp4",
"FaceRegister": [
{
"FaceUrls": ["http://testcdn.com/front.jpg", "http://testcdn.com/side.jpg"],
"Name": "James"
}
],
"SlowMotionLogoRegister": {
"SlowMotionLogoUrls": ["http://testcdn.com/logo1.jpg", "http://testcdn.com/logo2.jpg"]
},
"TransferNameRegister": [
{
"OriginalName": "IND",
"TransferName": "印第安納步行者"
}
]
}
{
"Count": 1,
"Height": 1080,
"Width": 1920,
"MediaURL": "http://<your-bucket>.oss-<region-id>.aliyuncs.com/script/output_{index}_w.mp4"
}
結果示例
處理邏輯
根據SportsCategory判斷體育賽事類型:籃球-basketball、乒乓球-pingpong。
通過人物標識參數FaceRegister,來設置成片結果中需要出現的運動員鏡頭。
通過慢鏡頭標識參數SlowMotionLogoRegister,來設置成片結果中需要包含的慢鏡頭回放。
通過名稱轉寫設置參數TransferNameRegister,將記分牌中的隊名縮寫轉寫為完整隊名。