在視頻中添加可見的明浮水印(例如,企業Logo、電視台台標),可以突出品牌和著作權,增加產品識別度。ApsaraVideo for Media Processing支援圖片浮水印、動畫浮水印和文字浮水印三種浮水印類型,您可以按需選擇。本文介紹Python SDK使用浮水印相關功能API的程式碼範例。
完整代碼
import os
import json
from urllib.parse import quote
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkmts.request.v20140618.SubmitJobsRequest import SubmitJobsRequest
# 讀取環境變數中設定的ACCESS_KEY ACCESS_KEY_SECRET資訊
credentials = AccessKeyCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
# region_id 為調用的服務地區ID,支援的地區參考 https://www.alibabacloud.com/help/zh/apsaravideo-for-media-processing/latest/service-regions
client = AcsClient(region_id = 'cn-shanghai', credential = credentials)
mps_region_id = 'cn-shanghai'
pipeline_id = '9bad1a2e3c2c4df9c6****'
# 浮水印模板ID,可在控制台建立,僅適用圖片浮水印
watermark_template_id = '9bad1a2e3c2c4df9c6****'
template_id = 'S00000001-200030'
oss_location = 'oss-cn-shanghai'
oss_bucket = '<your bucket name>'
oss_input_object = 'input.mp4'
oss_output_object = 'output.mp4'
image_watermark_object = 'logo.png'
video_watermark_object = 'logo.mov'
request = SubmitJobsRequest()
request.set_accept_format('json')
# Input參數結構
job_input = {'Location': oss_location,
'Bucket': oss_bucket,
'Object': quote(oss_input_object) }
request.set_Input(json.dumps(job_input))
# Output參數結構
output = {'OutputObject': quote(oss_output_object)}
output['TemplateId'] = template_id
## Image Watermark 圖片浮水印配置
image_watermark_input = {'Location': oss_location,
'Bucket': oss_bucket,
'Object': quote(image_watermark_object) }
image_watermark = {
'WaterMarkTemplateId': watermark_template_id,
'Type': 'Image',
'InputFile': image_watermark_input,
'ReferPos': 'TopRight',
'Width': 0.05,
'Dx': 0,
'Dy': 0
}
## Text Watermark 文字浮水印配置
text_config = {
# 需傳入Base64後的Content值
'Content': '5rWL6K+V5paH5a2X5rC05Y2w',
'FontName': 'SimSun',
'FontSize': 16,
'FontColor': 'Red',
'FontAlpha': 0.5,
'Top': 10,
'Left': 10
}
text_watermark = {
'WaterMarkTemplateId': watermark_template_id,
'Type': 'Text',
'TextWaterMark': text_config
}
## Video Watermark 動圖浮水印配置
video_watermark_input = {'Location': oss_location,
'Bucket': oss_bucket,
'Object': quote(video_watermark_object) }
video_watermark = {
'WaterMarkTemplateId': watermark_template_id,
'Type': 'Image',
'InputFile': video_watermark_input,
'ReferPos': 'BottomLeft',
'Height': 240,
'Dx': 0,
'Dy': 0
}
# Output->Watermarks
watermarks = [image_watermark, text_watermark, video_watermark]
output['WaterMarks'] = watermarks
# Outputs參數結構
outputs = [output]
request.set_Outputs(json.dumps(outputs))
request.set_OutputBucket(oss_bucket)
request.set_OutputLocation(oss_location)
request.set_PipelineId(pipeline_id)
response = client.do_action_with_exception(request)
# 輸出列印
print(str(response, encoding='utf-8'))