体育赛事集锦场景

本文旨在介绍在智能图文匹配成片-体育赛事集锦场景下的合成参数、SDK调用示例。

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

  • 支持的区域:华东2(上海)。

使用说明

InputConfig 参数说明

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

参数

类型

是否必填

说明

SportsCategory

String

体育赛事类型

篮球:basketball

乒乓球:pingpong

InputMedia

String

输入的体育赛事素材。支持MediaId 或 MediaURL

  • 仅支持单个素材。

  • 仅支持视频,

FaceRegister

List<FaceInfo>

人物标识,数组长度小于等于5。

SlowMotionLogoRegister

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

Video

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保存在环境变量为例说明。配置方法请参见: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 {

        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调用入参详情

展开查看InputConfig

{
  "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": "印第安纳步行者"
    }
  ]
}

展开查看OutputConfig

{
  "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,将记分牌中的队名缩写转写为完整队名。

相关文档