動画のウォーターマーク機能は、会社のロゴ、テレビ局のアイコン、ユーザーのニックネームや ID などの識別情報を動画に追加することで、ブランドの強調、著作権の保護、製品認知度の向上に役立ちます。ここでは、Java SDK を使用してイメージウォーターマークまたはテキストウォーターマークを追加、更新、削除、照会するためのサンプルコードを提供します。
注意事項
-
このトピックのすべての例では、AccessKey ペアを使用してクライアントインスタンスを初期化します。
-
リクエストとレスポンスのパラメーターの詳細については、Alibaba Cloud OpenAPI Explorer にある [API Documentations] タブをご参照ください。
-
他の API オペレーションの SDK サンプルについては、Alibaba Cloud OpenAPI Explorer にアクセスしてください。[Parameters] タブでパラメーターを指定して呼び出しを開始し、[SDK Sample Code] タブで SDK のバージョンと言語を選択すると、コードの表示とダウンロードができます。
-
このトピックの例では SDK V1.0 を使用しています。V2.0 の例については、OpenAPI Explorer で正しい SDK バージョンを選択してください。

クライアントの初期化
SDK を使用する前に、クライアントを初期化してください。詳細については、「初期化」をご参照ください。
ウォーターマークの追加
AddWatermark API を呼び出してウォーターマークを追加します。詳細については、次のサンプルコードをご参照ください。
OpenAPI ポータル: または AddWatermark。
-
アップロード URL と認証情報を取得するためのパラメーターの詳細については、「CreateUploadAttachedMedia」をご参照ください。
-
Object Storage Service (OSS) へのウォーターマークファイルのアップロードについては、「OSS へのファイルアップロード」をご参照ください。
次のコードはサンプルです:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.AddWatermarkRequest;
import com.aliyuncs.vod.model.v20170321.AddWatermarkResponse;
/**
* AccessKey 情報を読み取ります。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// ApsaraVideo VOD が有効化されているリージョン。
String regionId = "cn-shanghai";
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。API 操作の呼び出しや日常の O&M には、RAM ユーザーを使用することを推奨します。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコードしないでください。ハードコードすると、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 AddWatermarkResponse addWatermark(DefaultAcsClient client) throws Exception {
AddWatermarkRequest request = new AddWatermarkRequest();
// ウォーターマークの名前。
request.setName("addwatermark");
// ウォーターマークファイルの OSS URL。例: http://example.oss-cn-shanghai.aliyuncs.com/watermark/test-****.png。
String fileUrl = "<your watermarkFile URL>";
// イメージウォーターマークの場合、画像ファイルの OSS URL を指定する必要があります。ウォーターマークファイルは、動画と同じリージョンにある必要があります。たとえば、動画が中国 (上海) リージョンにある場合、ウォーターマークファイルも中国 (上海) リージョンに保存する必要があります。
request.setFileUrl(fileUrl);
// ウォーターマーク設定データ。
JSONObject watermarkConfig = null;
// イメージウォーターマークの位置設定データ。
watermarkConfig = buildImageWatermarkConfig();
// テキストウォーターマークの位置設定データ。
//watermarkConfig = buildTextWatermarkConfig();
request.setWatermarkConfig(watermarkConfig.toJSONString());
// ウォーターマークタイプ。テキストは「Text」、画像は「Image」。
request.setType("Image");
return client.getAcsResponse(request);
}
/**
* 次のコードはサンプルです。
* @param args
* @throws ClientException
*/
public static void main(String[] args) throws ClientException {
DefaultAcsClient client = initVodClient();
AddWatermarkResponse response = new AddWatermarkResponse();
try {
// ウォーターマーク情報を追加します。
response = addWatermark(client);
// ウォーターマーク ID。
System.out.println("WatermarkId = " + response.getWatermarkInfo().getWatermarkId());
// ウォーターマークの位置と効果の設定データ。
System.out.println("WatermarkConfig = " + response.getWatermarkInfo().getWatermarkConfig());
// ウォーターマークファイルの FileUrl。このフィールドはテキストウォーターマークの場合は空です。
System.out.println("FileUrl = " + response.getWatermarkInfo().getFileUrl());
} catch (Exception e) {
System.out.println("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.println("RequestId = " + response.getRequestId());
}
/**
* イメージウォーターマークの設定データを構築します。必要に応じてパラメーター値を変更してください。
* @return
*/
public static JSONObject buildImageWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
// ウォーターマークの水平オフセット。
watermarkConfig.put("Dx", "8");
// ウォーターマークの垂直オフセット。
watermarkConfig.put("Dy", "8");
// ウォーターマークの幅。
watermarkConfig.put("Width", "55");
// ウォーターマークの高さ。
watermarkConfig.put("Height", "55");
// ウォーターマークの相対位置。有効な値:TopLeft、TopRight、BottomLeft、BottomRight。
watermarkConfig.put("ReferPos", "BottomRight");
// ウォーターマークを表示するタイムライン。開始時刻と表示時間を指定できます。
JSONObject timeline = new JSONObject();
// ウォーターマークの表示開始時刻。
timeline.put("Start", "2");
// ウォーターマークの表示時間。
timeline.put("Duration", "ToEND");
watermarkConfig.put("Timeline", timeline);
return watermarkConfig;
}
/**
* テキストウォーターマークの設定データを構築します。必要に応じてパラメーター値を変更してください。
* @return
*/
public static JSONObject buildTextWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
// テキストウォーターマークのコンテンツ。
watermarkConfig.put("Content", "testwatermark");
// テキストウォーターマークのフォント名。
watermarkConfig.put("FontName", "SimSun");
// テキストウォーターマークのフォントサイズ。
watermarkConfig.put("FontSize", 25);
// テキストウォーターマークのフォントカラー。#000000 などの RGB カラー値も指定できます。
watermarkConfig.put("FontColor", "Black");
// テキストウォーターマークの透明度。
watermarkConfig.put("FontAlpha", "0.2");
// テキストウォーターマークの縁取り色。#ffffff などの RGB カラー値も指定できます。
watermarkConfig.put("BorderColor", "White");
// テキストウォーターマークの縁取りの幅。
watermarkConfig.put("BorderWidth", 1);
// 動画の上部からのテキストウォーターマークのオフセット。
watermarkConfig.put("Top", 20);
// 動画の左側からのテキストウォーターマークのオフセット。
watermarkConfig.put("Left", 15);
return watermarkConfig;
}
ウォーターマークの更新
UpdateWatermark API を呼び出してウォーターマークを更新します。詳細については、次のサンプルコードをご参照ください。
OpenAPI ポータル: | UpdateWatermark。
次のコードはサンプルです:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.UpdateWatermarkRequest;
import com.aliyuncs.vod.model.v20170321.UpdateWatermarkResponse;
/**
* AccessKey 情報を読み取ります。
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// ApsaraVideo VOD が有効化されているリージョン。
String regionId = "cn-shanghai";
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。API 操作の呼び出しや日常の O&M には、RAM ユーザーを使用することを推奨します。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコードしないでください。ハードコードすると、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;
}
/**
* ウォーターマーク設定情報を更新する関数。
* 注:イメージウォーターマークのファイル URL は変更できません。別の画像を使用するには、新しいウォーターマークを作成してください。
*/
public static UpdateWatermarkResponse updateWatermark(DefaultAcsClient client) throws Exception {
UpdateWatermarkRequest request = new UpdateWatermarkRequest();
request.setName("updatewatermark");
// 設定情報を更新するウォーターマークの ID。
request.setWatermarkId("421ddddd4f6e734a526fd2****");
// ウォーターマーク設定データ。
JSONObject watermarkConfig = null;
// イメージウォーターマークの位置設定データ。
//watermarkConfig = buildImageWatermarkConfig();
// テキストウォーターマークの位置設定データ。
watermarkConfig = buildTextWatermarkConfig();
request.setWatermarkConfig(watermarkConfig.toJSONString());
return client.getAcsResponse(request);
}
/**
* 次のコードはサンプルです。
*/
public static void main(String[] args) {
DefaultAcsClient client = initVodClient();
UpdateWatermarkResponse response = new UpdateWatermarkResponse();
try {
response = updateWatermark(client);
// ウォーターマーク ID。
System.out.println("WatermarkId = " + response.getWatermarkInfo().getWatermarkId());
// ウォーターマークの位置と効果の設定データ。
System.out.println("WatermarkConfig = " + response.getWatermarkInfo().getWatermarkConfig());
// ウォーターマークファイルの FileUrl。このフィールドはテキストウォーターマークの場合は空です。
System.out.println("FileUrl = " + response.getWatermarkInfo().getFileUrl());
} catch (Exception e) {
System.out.println("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.println("RequestId = " + response.getRequestId());
}
/**
* イメージウォーターマークの設定データを構築します。必要に応じてパラメーター値を変更してください。
* @return
*/
public static JSONObject buildImageWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
// ウォーターマークの水平オフセット。
watermarkConfig.put("Dx", "10");
// ウォーターマークの垂直オフセット。
watermarkConfig.put("Dy", "10");
// ウォーターマークの幅。
watermarkConfig.put("Width", "66");
// ウォーターマークの高さ。
watermarkConfig.put("Height", "66");
// ウォーターマークの相対位置。有効な値:TopLeft、TopRight、BottomLeft、BottomRight。
watermarkConfig.put("ReferPos", "BottomLeft");
// ウォーターマークを表示するタイムライン。開始時刻と表示時間を指定できます。
JSONObject timeline = new JSONObject();
// ウォーターマークの表示開始時刻。
timeline.put("Start", "2");
// ウォーターマークの表示時間。
timeline.put("Duration", "ToEND");
watermarkConfig.put("Timeline", timeline);
return watermarkConfig;
}
/**
* テキストウォーターマークの設定データを構築します。必要に応じてパラメーター値を変更してください。
* @return
*/
public static JSONObject buildTextWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
// テキストウォーターマークのコンテンツ。
watermarkConfig.put("Content", "testwatermark");
// テキストウォーターマークのフォント名。
watermarkConfig.put("FontName", "SimSun");
// テキストウォーターマークのフォントサイズ。
watermarkConfig.put("FontSize", 40);
// テキストウォーターマークのフォントカラー。#000000 などの RGB カラー値も指定できます。
watermarkConfig.put("FontColor", "Black");
// テキストウォーターマークの透明度。
watermarkConfig.put("FontAlpha", "0.2");
// テキストウォーターマークの縁取り色。#ffffff などの RGB カラー値も指定できます。
watermarkConfig.put("BorderColor", "White");
// テキストウォーターマークの縁取りの幅。
watermarkConfig.put("BorderWidth", 2);
// 動画の上部からのテキストウォーターマークのオフセット。
watermarkConfig.put("Top", 20);
// 動画の左側からのテキストウォーターマークのオフセット。
watermarkConfig.put("Left", 15);
return watermarkConfig;
}
ウォーターマークの削除
DeleteWatermark API を呼び出してウォーターマークを削除します。
OpenAPI ポータル: / DeleteWatermark。
ウォーターマークのリスト照会
ListWatermark API を呼び出してウォーターマークのリストを照会します。
OpenAPI ポータル: | ListWatermark。
単一ウォーターマークの照会
GetWatermark API を呼び出して単一のウォーターマークを照会します。
OpenAPI ポータル: | GetWatermark。
デフォルトウォーターマークの設定
SetDefaultWatermark API を呼び出してデフォルトウォーターマークを設定します。
OpenAPI ポータル: | SetDefaultWatermark。
関連ドキュメント
動画のイメージウォーターマークとテキストウォーターマーク:ApsaraVideo VOD のイメージウォーターマークとテキストウォーターマーク機能について、その仕組み、シナリオ、サンプルなどを詳しく説明します。