ApsaraVideo VOD のオンライン編集は、オーディオ、ビデオ、テキストの素材を組み合わせて新しい動画を制作します。以下の Java SDK サンプルでは、オンライン編集プロジェクトの作成と管理、および動画制作ジョブの送信方法について説明します。
API 呼び出しの注意事項
このトピックでは、コード例で AccessKey ペアを使用してクライアントインスタンスを初期化します。
API パラメーターと返されるフィールドの詳細な説明については、Alibaba Cloud OpenAPI Portal にアクセスし、各 API の [ドキュメント] タブをご参照ください。
このトピックでは、一部の複雑な API のコード例のみを提供します。他の API の SDK コード例を取得するには、Alibaba Cloud OpenAPI Portal に移動します。左側の [パラメーター設定] タブで、必須パラメーター情報を入力して呼び出しを開始します。次に、右側の [SDK サンプル] タブで、SDK のバージョンと言語を選択してサンプルコードを表示およびダウンロードします。
このトピックの API 呼び出しでは、SDK V1.0 を例として使用します。V2.0 の SDK の例を取得するには、Alibaba Cloud OpenAPI Portal からサンプルコードを取得する際に、対応する SDK バージョンを指定してください。

クライアントの初期化
SDK を使用する前に、「初期化」の説明に従ってクライアントを初期化します。
タイムラインに基づく動画制作ジョブの送信
ProduceEditingProjectVideo API を呼び出して、タイムラインに基づいた動画制作ジョブを送信します。
このアプローチは、ほとんどの動画制作シナリオに適しています。
OpenAPI Explorer:ProduceEditingProjectVideo。
サンプルコード:
タイムライン編集と合成の追加サンプル:ビデオ編集 - 使用例。
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoRequest;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoResponse;
/**
* AccessKey 情報を取得します。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // ApsaraVideo VOD が有効化されているリージョンを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
// プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey シークレット) を保存しないことを推奨します。保存すると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
// この例では、システムは環境変数から AccessKey ペアを読み取って API アクセスの認証を実装します。サンプルコードを実行する前に、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を設定してください。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* サンプルコード
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
ProduceEditingProjectVideoRequest request = new ProduceEditingProjectVideoRequest();
// 編集プロジェクトのタイムラインを構築
request.setTimeline(buildTimeline());
// 制作メディアのメタデータを設定
request.setMediaMetadata(buildMediaMetadata());
// 制作設定
request.setProduceConfig(buildProduceConfig());
ProduceEditingProjectVideoResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// 制作メディア ID
System.out.println("MediaId:" + response.getMediaId());
// リクエスト ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
public static String buildMediaMetadata(){
JSONObject mediaMetadata = new JSONObject();
// 制作メディアのタイトル
mediaMetadata.put("Title", "Title");
// 制作メディアの説明
mediaMetadata.put("Description", "Description");
// 制作メディアのユーザー定義カバー URL
mediaMetadata.put("CoverURL", "http://192.168.0.0/16/media/cover/mediaid.jpg");
// 制作メディアのカテゴリ ID
mediaMetadata.put("CateId", null);
// 制作メディアのタグ
mediaMetadata.put("Tags", "Tag1,Tag2,Test");
return mediaMetadata.toString();
}
public static String buildProduceConfig(){
JSONObject produceConfig = new JSONObject();
/*
制作プロセスでメディアソースファイルを生成できます。生成されたソースファイルをトランスコードできます。生成されたソースファイルをトランスコードする場合は、TemplateGroupId パラメーターを指定します。
1. 必須ではありません
2. 空の場合はデフォルトのトランスコードテンプレートグループ ID を使用します
*/
produceConfig.put("TemplateGroupId", null);
return produceConfig.toString();
}
/**
* このサンプルは、2つのビデオをマージする方法を示しています
*/
public static String buildTimeline(){
JSONObject timeline = new JSONObject();
// ビデオトラック
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// ビデオトラッククリップ
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", "11119b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip1);
JSONObject videoTrackClip2 = new JSONObject();
videoTrackClip2.put("MediaId", "22229b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip2);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
オンライン編集プロジェクトに基づく動画制作ジョブの送信
ProduceEditingProjectVideo API を呼び出して、オンライン編集プロジェクトに基づいた動画制作ジョブを送信します。
このアプローチは、オンライン編集プロジェクトをきめ細かく制御する必要がある場合に使用します。
OpenAPI Explorer:ProduceEditingProjectVideo。
サンプルコード:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoRequest;
import com.aliyuncs.vod.model.v20170321.ProduceEditingProjectVideoResponse;
/**
* AccessKey 情報を取得します。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // ApsaraVideo VOD が有効化されているリージョンを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
// プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey シークレット) を保存しないことを推奨します。保存すると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
// この例では、システムは環境変数から AccessKey ペアを読み取って API アクセスの認証を実装します。サンプルコードを実行する前に、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を設定してください。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* サンプルコード
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
ProduceEditingProjectVideoRequest request = new ProduceEditingProjectVideoRequest();
// 制作する編集プロジェクト ID を設定
request.setProjectId("ProjectId");
// 制作メディアのメタデータを設定
request.setMediaMetadata(buildMediaMetadata());
// 制作設定
request.setProduceConfig(buildProduceConfig());
ProduceEditingProjectVideoResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// 制作メディア ID
System.out.println("MediaId:" + response.getMediaId());
// リクエスト ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
public static String buildMediaMetadata(){
JSONObject mediaMetadata = new JSONObject();
// 制作メディアのタイトル
mediaMetadata.put("Title", "Title");
// 制作メディアの説明
mediaMetadata.put("Description", "Description");
// 制作メディアのユーザー定義カバー URL
mediaMetadata.put("CoverURL", "http://192.168.0.0/16/media/cover/mediaid.jpg");
// 制作メディアのカテゴリ ID
mediaMetadata.put("CateId", null);
// 制作メディアのタグ
mediaMetadata.put("Tags", "Tag1,Tag2,Test");
return mediaMetadata.toString();
}
public static String buildProduceConfig(){
JSONObject produceConfig = new JSONObject();
/*
制作プロセスでメディアソースファイルを生成できます。生成されたソースファイルをトランスコードできます。生成されたソースファイルをトランスコードする場合は、TemplateGroupId パラメーターを指定します。
1. 必須ではありません
2. 空の場合はデフォルトのトランスコードテンプレートグループ ID を使用します
*/
produceConfig.put("TemplateGroupId", null);
return produceConfig.toString();
}
オンライン編集プロジェクトの作成
AddEditingProject API を呼び出して、オンライン編集プロジェクトを作成します。
OpenAPI Explorer:AddEditingProject。
サンプルコード:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.AddEditingProjectRequest;
import com.aliyuncs.vod.model.v20170321.AddEditingProjectResponse;
/**
* AccessKey 情報を取得します。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // ApsaraVideo VOD が有効化されているリージョンを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
// プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey シークレット) を保存しないことを推奨します。保存すると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
// この例では、システムは環境変数から AccessKey ペアを読み取って API アクセスの認証を実装します。サンプルコードを実行する前に、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を設定してください。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* サンプルコード
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
AddEditingProjectRequest request = new AddEditingProjectRequest();
// 編集プロジェクトのタイムラインを構築
request.setTimeline(buildTimeline());
// 編集プロジェクトのタイトルを設定
request.setTitle("Editing Project Title");
// 編集プロジェクトの説明を設定
request.setDescription("Editing Project Description");
// 編集プロジェクトのカバー URL を設定
request.setCoverURL("http://192.168.0.0/16/editingproject/cover/projectid.jpg");
AddEditingProjectResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
if (response.getProject() != null){
System.out.println("Editing Project ID:" + response.getProject().getProjectId());
System.out.println("Editing Project Title:" + response.getProject().getTitle());
System.out.println("Editing Project Create Time:" + response.getProject().getCreationTime());
System.out.println("Editing Project Description:" + response.getProject().getDescription());
System.out.println("Editing Project Status:" + response.getProject().getStatus());
}
// リクエスト ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
/**
* このサンプルは、2つのビデオをマージする方法を示しています
*/
public static String buildTimeline(){
JSONObject timeline = new JSONObject();
// ビデオトラック
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// ビデオトラッククリップ
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", "11119b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip1);
JSONObject videoTrackClip2 = new JSONObject();
videoTrackClip2.put("MediaId", "22229b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip2);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
オンライン編集プロジェクトの変更
UpdateEditingProject API を呼び出して、オンライン編集プロジェクトを変更します。
OpenAPI Explorer:UpdateEditingProject。
サンプルコード:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.UpdateEditingProjectRequest;
import com.aliyuncs.vod.model.v20170321.UpdateEditingProjectResponse;
/**
* AccessKey 情報を取得します。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
String regionId = "cn-shanghai"; // ApsaraVideo VOD が有効化されているリージョンを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
// プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey シークレット) を保存しないことを推奨します。保存すると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
// この例では、システムは環境変数から AccessKey ペアを読み取って API アクセスの認証を実装します。サンプルコードを実行する前に、環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を設定してください。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* サンプルコード
*/
public static void main(String[] args) throws Exception {
DefaultAcsClient client = initVodClient();
UpdateEditingProjectRequest request = new UpdateEditingProjectRequest();
request.setProjectId("YourProjectId");
// 編集プロジェクトのタイムラインを設定
request.setTimeline(buildTimeline());
// 編集プロジェクトのタイトルを設定
request.setTitle("Editing Project Title");
// 編集プロジェクトの説明を設定
request.setDescription("Editing Project Description");
// 編集プロジェクトのカバー URL を設定
request.setCoverURL("http://192.168.0.0/16/editingproject/cover/projectid.jpg");
UpdateEditingProjectResponse response = null;
try {
response = client.getAcsResponse(request);
if (response != null){
// リクエスト ID
System.out.println("RequestId:" + response.getRequestId());
}
} catch (ServerException e){
System.out.println("ServerError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (ClientException e){
System.out.println("ClientError code:" + e.getErrCode() + ", message:" + e.getErrMsg());
} catch (Exception e) {
System.out.println("ErrorMessage:" + e.getLocalizedMessage());
}
}
/**
* このサンプルは、2つのビデオをマージする方法を示しています
*/
public static String buildTimeline(){
JSONObject timeline = new JSONObject();
// ビデオトラック
JSONArray videoTracks = new JSONArray();
JSONObject videoTrack = new JSONObject();
// ビデオトラッククリップ
JSONArray videoTrackClips = new JSONArray();
JSONObject videoTrackClip1 = new JSONObject();
videoTrackClip1.put("MediaId", "11119b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip1);
JSONObject videoTrackClip2 = new JSONObject();
videoTrackClip2.put("MediaId", "22229b4d7cf14dc7b83b0e801cbe****");
videoTrackClips.add(videoTrackClip2);
videoTrack.put("VideoTrackClips", videoTrackClips);
videoTracks.add(videoTrack);
timeline.put("VideoTracks", videoTracks);
return timeline.toString();
}
オンライン編集プロジェクトの削除
DeleteEditingProject API を呼び出して、オンライン編集プロジェクトを削除します。
OpenAPI Explorer:DeleteEditingProject。
オンライン編集プロジェクトの詳細の照会
GetEditingProject API を呼び出して、オンライン編集プロジェクトの詳細を照会します。
OpenAPI Explorer: または GetEditingProject。
オンライン編集プロジェクトの検索
SearchEditingProject API を呼び出して、オンライン編集プロジェクトを検索します。
OpenAPI Explorer: または SearchEditingProject。
オンライン編集プロジェクトの素材設定
SetEditingProjectMaterials API を呼び出して、オンライン編集プロジェクトの素材を設定します。
OpenAPI Explorer:SetEditingProjectMaterials。
オンライン編集プロジェクト内の素材の照会
GetEditingProjectMaterials API を呼び出して、オンライン編集プロジェクト内の素材を照会します。
OpenAPI Explorer:GetEditingProjectMaterials。