视频图文水印

视频水印,指在视频上添加相关标志性信息(如企业Logo、电视台台标、用户昵称、用户ID等),以突出品牌、维护版权、增加产品的识别度。本文提供了Java SDK视频水印相关的API调用示例,包含添加图片或文字水印、修改水印、删除水印、查询水印等。

接口调用说明

  • 本文提供的接口调用示例均通过AccessKey初始化客户端实例。

  • 接口的参数解释和返回字段的详细说明请访问阿里云OpenAPI门户,在各接口右侧的文档页签查看。

  • 本文仅提供部分复杂接口的代码示例,其余接口的SDK代码示例,可以通过阿里云OpenAPI门户获取。访问阿里云OpenAPI门户,在接口的左侧参数配置页签,填写需要的参数信息并发起调用后,在右侧的SDK示例页签,选择SDK版本,选择目标语言,查看并下载示例代码。

  • 本文均以V1.0版本的SDK为例进行接口调用,如需获取V2.0版本的SDK示例,请在通过阿里云OpenAPI门户获取SDK示例时,指定到对应的SDK版本。image.png

初始化客户端

使用前请先初始化客户端,请参见初始化

添加水印

调用AddWatermark接口,完成添加水印功能。

阿里云OpenAPI门户地址:AddWatermark

说明

调用示例如下:

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 {
    // 点播服务接入地域
    String regionId = "cn-shanghai";  
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把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文件地址,水印文件必须和视频在同一个区域,例如:华东2视频,水印文件必须存放在华东2
    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");
    //水印显示的相对位置(左上、右上、左下、右下)
    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);
    //文字水印的颜色(也可为RGB颜色取值,例如:#000000)
    watermarkConfig.put("FontColor", "Black");
    //文字水印的透明度
    watermarkConfig.put("FontAlpha", "0.2");
    //文字水印的字体描边颜色(也可为RGB颜色取值,例如:#ffffff)
    watermarkConfig.put("BorderColor", "White");
    //文字水印的描边宽度
    watermarkConfig.put("BorderWidth", 1);
    //文字水印距离视频画面上边的偏移距离
    watermarkConfig.put("Top", 20);
    //文字水印距离视频画面左边的偏移距离
    watermarkConfig.put("Left", 15);
    return watermarkConfig;
}

修改水印

调用UpdateWatermark接口,完成修改水印功能。

阿里云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 {
    // 点播服务接入地域
    String regionId = "cn-shanghai";  
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把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 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");
    //水印显示的相对位置(左上、右上、左下、右下)
    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);
    //文字水印的颜色(也可为RGB颜色取值,例如:#000000)
    watermarkConfig.put("FontColor", "Black");
    //文字水印的透明度
    watermarkConfig.put("FontAlpha", "0.2");
    //文字水印的字体描边颜色(也可为RGB颜色取值,例如:#ffffff)
    watermarkConfig.put("BorderColor", "White");
    //文字水印的描边宽度
    watermarkConfig.put("BorderWidth", 2);
    //文字水印距离视频画面上边的偏移距离
    watermarkConfig.put("Top", 20);
    //文字水印距离视频画面左边的偏移距离
    watermarkConfig.put("Left", 15);
    return watermarkConfig;
}

删除水印

调用DeleteWatermark接口,完成删除水印功能。

阿里云OpenAPI门户地址:DeleteWatermark

查询水印列表

调用ListWatermark接口,完成查询水印列表功能。

阿里云OpenAPI门户地址:ListWatermark

查询单个水印

调用GetWatermark接口,完成查询单个水印功能。

阿里云OpenAPI门户地址:GetWatermark

设置默认水印

调用SetDefaultWatermark接口,完成设置默认水印功能。

阿里云OpenAPI门户地址:SetDefaultWatermark

相关文档

视频图文水印:介绍视频点播的视频图文水印功能更完整更详细的信息,包括工作原理、应用场景、应用示例等。