ビデオマージを使用すると、異なるフォーマット、ビットレート、解像度のビデオを、特定のフォーマット、ビットレート、解像度の長いビデオにマージできます。 通常、ビデオにオープニングまたはエンディングパートを追加したり、録画されたライブストリームのクリップをマージしたりするために使用されます。 ビデオクリッピングを使用すると、元のビデオからクリップをキャプチャし、クリップを新しいビデオとして保存できます。 通常、ビデオからハイライト部分をキャプチャするために使用されます。 このトピックでは、ApsaraVideo Media Processing(MPS) Java SDK を使用してビデオをマージおよび編集する方法について説明します。
シナリオ
イントロビデオと固定のアウトロビデオ:ビデオの開始部分または終了部分を追加したり、録画されたライブストリームのクリップをマージしたりするために使用されます。
クリップスプライシング:ビデオの特定のクリップを切り取り、クリップを新しいビデオファイルとして出力します。 この方法は通常、ビデオからハイライトをキャプチャするために使用されます。
オープニングとエンディング:入力ビデオの最初と最後にオープニングとエンディングのパートを埋め込むことができる特別なマージ効果。 オープニングパートはピクチャインピクチャ(PiP)モードで表示されます。
複数のビデオクリップを順番にマージする
たとえば、入力ビデオは 00:00:03.000 からキャプチャされ、 00:00:00:13.000 秒間続きます。 キャプチャされたビデオは、オープニングの 00:00:01.000 から 00:00:05.030 までの部分とマージされます。 結果のビデオの合計再生時間は 17.30 秒です。
/**
* 複数のビデオクリップを順番にマージします。
* @return
* @throws Exception
*/
public static void mergrUrlListJob() throws Exception {
// 出力パラメータを構築します。
JSONArray outputs = new JSONArray();
// ジョブ入力を構成します。 ジョブ入力として使用されるメディアファイルが、クライアントと同じリージョンにあることを確認してください。
JSONObject input = new JSONObject();
input.put("Bucket", "<your bucket name>");
input.put("Location", "oss-cn-shanghai");
// ジョブ出力を構成します。
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode failed");
}
output.put("TemplateId", "<transcode templateId>");
// ビデオクリッピングのデータを構築します。
JSONObject clip = new JSONObject();
// ビデオを 1.000 秒から 5.030 秒まで切り取ります。
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// ビデオの末尾から残っているビデオを 1.000 秒から 5.030 秒まで切り取ります。
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// ビデオの最初のクリップを編集するかどうかを指定します。 有効な値:true および false。 true の値は、編集後にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。 false の値は、編集前にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。
clip.put("ConfigToClipFirstPart", true);
// ビデオマージのデータを構築します。
JSONArray mergeList = new JSONArray();
JSONObject merge = new JSONObject();
merge.put("MergeURL", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/test2mp4", "utf-8"));
merge.put("Start", "00:00:03.000");
merge.put("Duration", "00:00:13.000");
mergeList.add(merge);
output.put("Clip", clip);
output.put("MergeList", mergeList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// ジョブ入力。
.setInput(input.toJSONString())
// ジョブ出力構成。
.setOutputs(outputs.toJSONString())
// 出力ファイルが格納される OSS バケット。
.setOutputBucket("exampleBucket")
// OSS バケットが存在するリージョン。
.setOutputLocation("oss-cn-shanghai")
// パイプラインの ID。
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 必要に応じて、API 操作の応答を表示するための独自のコードを記述します。
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}構成ファイルの OSS パスを使用してビデオクリップをマージする
たとえば、入力ビデオは 00:00:03.000 からキャプチャされ、 00:00:00:10.000 秒間続きます。 キャプチャされたビデオは、オープニングの 00:00:01.000 から 00:00:05.030 までの部分とマージされます。
mergeConfigfile のサンプルコンテンツ:
{"MergeList":[{"MergeURL":"https://bucket-name.oss-cn-beijing.aliyuncs.com/mps-test/demo/test2.mp4","Start":"00:00:03.000","Duration":"00:00:10.000"}]}
/**
* 構成ファイルの OSS パスを使用してビデオクリップをマージします。
* @return
* @throws Exception
*/
public static void mergrConfigFileJob() throws Exception {
// 出力パラメータを構築します。
JSONArray outputs = new JSONArray();
// ジョブ入力を構成します。 ジョブ入力として使用されるメディアファイルが、クライアントと同じリージョンにあることを確認してください。
JSONObject input = new JSONObject();
input.put("Bucket", "<your bucket name>");
input.put("Location", "oss-cn-shanghai");
// ジョブ出力を構成します。
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode failed");
}
output.put("TemplateId", "<transcode templateId>");
// ビデオクリッピングのデータを構築します。
JSONObject clip = new JSONObject();
// ビデオを 1.000 秒から 5.030 秒まで切り取ります。
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// ビデオの末尾から残っているビデオを 1.000 秒から 5.030 秒まで切り取ります。
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// ビデオの最初のクリップを編集するかどうかを指定します。 有効な値:true および false。 true の値は、編集後にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。 false の値は、編集前にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。
clip.put("ConfigToClipFirstPart", true);
output.put("Clip", clip);
// 構成ファイルの OSS パスは HTTP URL である必要があります。
output.put("MergeConfigUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/mps-test/demo/mergeConfigfile");
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// ジョブ入力。
.setInput(input.toJSONString())
// ジョブ出力構成。
.setOutputs(outputs.toJSONString())
// 出力ファイルが格納される OSS バケット。
.setOutputBucket("exampleBucket")
// OSS バケットが存在するリージョン。
.setOutputLocation("oss-cn-shanghai")
// パイプラインの ID。
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 必要に応じて、API 操作の応答を表示するための独自のコードを記述します。
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}入力ビデオの先頭にオープニングパートを埋め込むか、入力ビデオの末尾にエンディングパートを追加する
たとえば、入力ビデオの 3 秒目に解像度 680 × 480 のオープニングパートが追加されます。 また、入力ビデオの末尾に解像度 680 × 480 のエンディングパートが追加されます。 エンディングパートの後に追加された空白部分は、白色の背景で塗りつぶされます。
オープニングパートとエンディングパートの URL で指定されたオブジェクトは UTF-8 エンコードされている必要があり、URL は HTTP アドレスである必要があります。 詳細については、「URL エンコーディング」をご参照ください。
/**
* 入力ビデオの先頭にオープニングパートを埋め込むか、入力ビデオの末尾にエンディングパートを追加します。
* @return
* @throws Exception
*/
public static void openAndTailJob() throws Exception {
// 出力パラメータを構築します。
JSONArray outputs = new JSONArray();
// ジョブ入力を構成します。 ジョブ入力として使用されるメディアファイルが、クライアントと同じリージョンにあることを確認してください。
JSONObject input = new JSONObject();
input.put("Bucket", "<your bucket name>");
input.put("Location", "oss-cn-shanghai");
// ジョブ出力を構成します。
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode failed");
}
output.put("TemplateId", "<transcode templateId>");
JSONArray openingList = new JSONArray();
JSONObject opening = new JSONObject();
opening.put("OpenUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/open.mp4", "utf-8"));
opening.put("Start", "3");
opening.put("Width", "680");
opening.put("Height", "480");
openingList.add(opening);
JSONArray tailSlateList = new JSONArray();
JSONObject tailSlate = new JSONObject();
// オープニングパートとエンディングパートの URL で指定されたオブジェクトは UTF-8 エンコードされている必要があります。
tailSlate.put("TailUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/tail.mp4", "utf-8"));
tailSlate.put("BlendDuration", "2");
tailSlate.put("Width", "680");
tailSlate.put("Height", "480");
tailSlate.put("IsMergeAudio", true);
tailSlate.put("BgColor", "White");
tailSlateList.add(tailSlate);
output.put("OpeningList", openingList);
output.put("TailSlateList", tailSlateList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// ジョブ入力。
.setInput(input.toJSONString())
// ジョブ出力構成。
.setOutputs(outputs.toJSONString())
// 出力ファイルが格納される OSS バケット。
.setOutputBucket("exampleBucket")
// OSS バケットが存在するリージョン。
.setOutputLocation("oss-cn-shanghai")
// パイプラインの ID。
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 必要に応じて、API 操作の応答を表示するための独自のコードを記述します。
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}完全なサンプルコード
package com.alibaba.bltest.api_v2;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.tea.TeaException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class MergeClipJobs {
/**
* <b>説明</b> :
* <p>AccessKey ペアを使用してクライアントを初期化します。</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.mts20140618.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が構成されていることを確認してください。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "mts.cn-shanghai.aliyuncs.com";
return new com.aliyun.mts20140618.Client(config);
}
/**
* 複数のビデオクリップを順番にマージします。
* @return
* @throws Exception
*/
public static void mergrUrlListJob() throws Exception {
// 出力パラメータを構築します。
JSONArray outputs = new JSONArray();
// ジョブ入力を構成します。 ジョブ入力として使用されるメディアファイルが、クライアントと同じリージョンにあることを確認してください。
JSONObject input = new JSONObject();
input.put("Bucket", "<your bucket name>");
input.put("Location", "oss-cn-shanghai");
// ジョブ出力を構成します。
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode failed");
}
output.put("TemplateId", "<transcode templateId>");
// ビデオクリッピングのデータを構築します。
JSONObject clip = new JSONObject();
// ビデオを 1.000 秒から 5.030 秒まで切り取ります。
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// ビデオの末尾から残っているビデオを 1.000 秒から 5.030 秒まで切り取ります。
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// ビデオの最初のクリップを編集するかどうかを指定します。 有効な値:true および false。 true の値は、編集後にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。 false の値は、編集前にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。
clip.put("ConfigToClipFirstPart", true);
// ビデオマージのデータを構築します。
JSONArray mergeList = new JSONArray();
JSONObject merge = new JSONObject();
merge.put("MergeURL", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/test2mp4", "utf-8"));
merge.put("Start", "00:00:03.000");
merge.put("Duration", "00:00:13.000");
mergeList.add(merge);
output.put("Clip", clip);
output.put("MergeList", mergeList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// ジョブ入力。
.setInput(input.toJSONString())
// ジョブ出力構成。
.setOutputs(outputs.toJSONString())
// 出力ファイルが格納される OSS バケット。
.setOutputBucket("exampleBucket")
// OSS バケットが存在するリージョン。
.setOutputLocation("oss-cn-shanghai")
// パイプラインの ID。
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 必要に応じて、API 操作の応答を表示するための独自のコードを記述します。
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* 構成ファイルの OSS パスを使用してビデオクリップをマージします。
* @return
* @throws Exception
*/
public static void mergrConfigFileJob() throws Exception {
// 出力パラメータを構築します。
JSONArray outputs = new JSONArray();
// ジョブ入力を構成します。 ジョブ入力として使用されるメディアファイルが、クライアントと同じリージョンにあることを確認してください。
JSONObject input = new JSONObject();
input.put("Bucket", "<your bucket name>");
input.put("Location", "oss-cn-shanghai");
// ジョブ出力を構成します。
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode failed");
}
output.put("TemplateId", "<transcode templateId>");
// ビデオクリッピングのデータを構築します。
JSONObject clip = new JSONObject();
// ビデオを 1.000 秒から 5.030 秒まで切り取ります。
clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"Duration\":\"5.30\"}");
// ビデオの末尾から残っているビデオを 1.000 秒から 5.030 秒まで切り取ります。
//clip.put("TimeSpan", "{\"Seek\":\"00:00:01.000\",\"End\":\"5.30\"}");
// ビデオの最初のクリップを編集するかどうかを指定します。 有効な値:true および false。 true の値は、編集後にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。 false の値は、編集前にビデオクリップがトランスコーディングジョブのためにマージされることを指定します。
clip.put("ConfigToClipFirstPart", true);
output.put("Clip", clip);
// 構成ファイルの OSS パスは HTTP URL である必要があります。
output.put("MergeConfigUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/mps-test/demo/mergeConfigfile");
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// ジョブ入力。
.setInput(input.toJSONString())
// ジョブ出力構成。
.setOutputs(outputs.toJSONString())
// 出力ファイルが格納される OSS バケット。
.setOutputBucket("exampleBucket")
// OSS バケットが存在するリージョン。
.setOutputLocation("oss-cn-shanghai")
// パイプラインの ID。
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 必要に応じて、API 操作の応答を表示するための独自のコードを記述します。
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* 入力ビデオの先頭にオープニングパートを埋め込むか、入力ビデオの末尾にエンディングパートを追加します。
* @return
* @throws Exception
*/
public static void openAndTailJob() throws Exception {
// 出力パラメータを構築します。
JSONArray outputs = new JSONArray();
// ジョブ入力を構成します。 ジョブ入力として使用されるメディアファイルが、クライアントと同じリージョンにあることを確認してください。
JSONObject input = new JSONObject();
input.put("Bucket", "<your bucket name>");
input.put("Location", "oss-cn-shanghai");
// ジョブ出力を構成します。
JSONObject output = new JSONObject();
try {
input.put("Object", URLEncoder.encode("mps-test/demo/test.mp4", "utf-8"));
String outPutObject = URLEncoder.encode("mps-test/demo/merge-out.mp4", "utf-8");
output.put("OutputObject", outPutObject);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("input URL encode failed");
}
output.put("TemplateId", "<transcode templateId>");
JSONArray openingList = new JSONArray();
JSONObject opening = new JSONObject();
opening.put("OpenUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/open.mp4", "utf-8"));
opening.put("Start", "3");
opening.put("Width", "680");
opening.put("Height", "480");
openingList.add(opening);
JSONArray tailSlateList = new JSONArray();
JSONObject tailSlate = new JSONObject();
// オープニングパートとエンディングパートの URL で指定されたオブジェクトは UTF-8 エンコードされている必要があります。
tailSlate.put("TailUrl", "http://bucket-name.oss-cn-shanghai.aliyuncs.com/" + URLEncoder.encode("mps-test/demo/tail.mp4", "utf-8"));
tailSlate.put("BlendDuration", "2");
tailSlate.put("Width", "680");
tailSlate.put("Height", "480");
tailSlate.put("IsMergeAudio", true);
tailSlate.put("BgColor", "White");
tailSlateList.add(tailSlate);
output.put("OpeningList", openingList);
output.put("TailSlateList", tailSlateList);
outputs.add(output);
com.aliyun.mts20140618.Client client = MergeClipJobs.createClient();
com.aliyun.mts20140618.models.SubmitJobsRequest submitJobsRequest = new com.aliyun.mts20140618.models.SubmitJobsRequest()
// ジョブ入力。
.setInput(input.toJSONString())
// ジョブ出力構成。
.setOutputs(outputs.toJSONString())
// 出力ファイルが格納される OSS バケット。
.setOutputBucket("exampleBucket")
// OSS バケットが存在するリージョン。
.setOutputLocation("oss-cn-shanghai")
// パイプラインの ID。
.setPipelineId("dd3dae411e704030b921e52698e5****");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 必要に応じて、API 操作の応答を表示するための独自のコードを記述します。
client.submitJobsWithOptions(submitJobsRequest, runtime);
} catch (TeaException error) {
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。 この例では、例外は参照用にのみ提供されています。
// エラーメッセージ。
System.out.println(error.getMessage());
// トラブルシューティング用の URL。
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}