天天看點

阿裡雲視訊點播服務添加視訊字幕的實作方案

業務場景

點播服務上傳的原始視訊沒有字幕,需要對點播視訊加上視訊字幕。

業務流程

  1. 上傳字幕檔案
  2. 添加帶字幕的轉碼模版
  3. 使用帶字幕的轉碼模版轉碼

使用步驟

  1. 字幕檔案無法通過控制台上傳,需要通過上傳SDK的上傳接口上傳,并且指定subtitle參數:
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadAttachedMediaRequest import UploadAttachedMediaRequest

def testUploadLocalAttachedMedia(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(filePath, 'subtitle')
        uploadAttachedRequest.setTitle('test upload local watermark file')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, True)
        print(media)
    except AliyunVodException as e:
        print(e)

localFilePath = '/Users/mac/Downloads/VodUploadSDK-Python_1.3.1/dlfiles/subtitle-02.srt'
testUploadLocalAttachedMedia(accessKeyId, accessKeySecret, localFilePath)           

上傳完成後會傳回字幕檔案的url資訊:

{'FileURL': u'

https://outin-a30b2feff15a11e8ad9400163e1a625e.oss-cn-shanghai.aliyuncs.com/subtitle/5D55590D555C40BA8DC9BF307D3AC28C-3-3.srt

', 'MediaId': u'68928b9ab5744b65b7b04f0cca97f54d', 'MediaURL': u'

http://vod.pier39.cn/subtitle/5D55590D555C40BA8DC9BF307D3AC28C-3-3.srt

'}

  1. 設定轉碼模版

    點播控制台的轉碼模版目前還不支援選擇字幕,是以也是通過接口來完成對帶字幕轉碼模版的設定的:

from aliyunsdkcore import client
from aliyunsdkvod.request.v20170321 import AddTranscodeTemplateGroupRequest

clt = client.AcsClient(access_key_id, access_key_secret, region)

def AddTranscodeTemplateGroup(clt):
    request = AddTranscodeTemplateGroupRequest.AddTranscodeTemplateGroupRequest()
    
    transcodeTemplateList = []
    transcodeTemplate = {}
    # 設定模闆名稱
    transcodeTemplate["TemplateName"] = "Subtitle_Transcode"
    # 清晰度
    transcodeTemplate["Definition"] = "LD"
    # 視訊流轉碼配置
    videoConfig = {"Width": 640, "Bitrate": 400, "Fps": 25, "Remove": False, "Codec": "H.264", "Gop": "250"}
    transcodeTemplate["Video"] = videoConfig
    # 音頻流轉碼配置
    audioConfig = {"Codec": "AAC", "Bitrate": "64", "Channels": "2", "Samplerate": "32000"}
    transcodeTemplate["Audio"] = audioConfig
    # 封裝容器
    container = {"Format": "m3u8"}
    transcodeTemplate["Container"] = container

    # 添加字幕參數
    subtitleList = {"SubtitleUrl":"https://outin-a30b2feff15a11e8ad9400163e1a625e.oss-cn-shanghai.aliyuncs.com/subtitle/D973C24DA668448A80E235F9D020BEFE-3-3.srt",
        "CharEncode":"UTF-8"}
    transcodeTemplate["SubtitleList"] = subtitleList
    request.set_TranscodeTemplateList(json.dumps(transcodeTemplateList))
    request.set_Name('subtitle')

    response = clt.do_action_with_exception(request)
    return response

print AddTranscodeTemplateGroup(clt)           

代碼裡subtitleList參數是設定字幕的,裡面的SubtitleUrl參數填寫第一步中傳回的FileURL位址

  1. 這裡可以通過控制台的媒體處理選項選擇上面建立的轉碼模版,或者通過轉碼接口來實作轉碼:
from aliyunsdkcore import client
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest

clt = client.AcsClient(access_key_id, access_key_secret, region)

def SubmitTranscodeJobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()
    request.set_VideoId('4bee0ee927ad4bed8ca865471c6680a7')
    request.set_TemplateGroupId('89a90b2cb8fdfdf9765747dd39fae31e')
    response = clt.do_action_with_exception(request)
    return response
 
print SubmitTranscodeJobs(clt)
           
  1. 播放通過上面轉碼模版轉碼後的視訊就會有字幕的效果了
阿裡雲視訊點播服務添加視訊字幕的實作方案