视频翻译参数介绍与示例

本文介绍了有关视频翻译接口 SubmitVideoTranslationJob - 提交视频翻译任务 的参数与示例,以及通过GetSmartHandleJob获取视频翻译任务结果的参数。

说明

目前已开通的区域为:

  • 字幕级翻译:华东2(上海)、华北2(北京)、华南1(深圳)、华东1(杭州)、亚太东南 1(新加坡)、美洲(美国-西部)

  • 语音级翻译:华东2(上海)、华北2(北京)、华南1(深圳)、华东1(杭州)、亚太东南 1(新加坡)、美洲(美国-西部)

  • 面容级翻译:华东 2(上海)、亚太东南 1(新加坡),其他地域暂不支持。

SubmitVideoTranslationJob参数说明

重要

如何通过参数区分字幕级、语音级、面容级翻译?

参数名

类型

必填项

名称

描述

InputConfig

String

输入配置

  • JSON 格式字符串

  • 内部参数见下方

OutputConfig

String

输出配置

  • JSON 格式字符串

  • 内部参数见下方

EditingConfig

String

翻译配置

  • JSON 格式字符串

  • 内部参数见下方

Title

String

标题

Description

String

描述

UserData

String

自定义信息,Json 格式,长度限制为 512 字节。

InputConfig 参数说明

参数名

类型

必填项

名称

描述

Type

String

输入类型

  • 取值范围:

    • Video 视频

    • Audio 音频

    • Subtitle 字幕

说明

Video

String

视频媒资 Id 或地址

  • Type 为 Video 时传入

  • 支持传入:

    • 媒资 Id

    • 本账号下的 OSS 地址

    • 其它公网可访问的地址

Audio

String

音频媒资 Id 或地址

  • Type 为 Audio 时传入

  • 支持传入:

    • 媒资 Id

    • 本账号下的 OSS 地址

    • 其它公网可访问的地址

    • 支持格式:mp3、wav

Subtitle

String

字幕媒资 Id 或地址

  • Type 为 Subtitle 时传入

  • 支持传入:

    • 媒资 Id

    • 本账号下的 OSS 地址

    • 其它公网可访问的地址

    • 支持格式:srt

OutputConfig 参数说明

参数名

类型

必填项

名称

描述

OutputTarget

String

输出类型

指定输出为 OSS 还是 VOD

  • 默认值 OSS

  • 取值范围:

    • OSS:输出到 OSS

    • VOD:输出到 VOD

MediaURL

String

输出地址

  • 填写本账号下的 OSS 地址

  • 路径中请附带扩展名,系统会依据扩展名判断输出类型,扩展名支持:

    • 如果InputConfig.Type=Video,则支持mp4

    • 如果InputConfig.Type=Audio,则支持wav

    • 如果InputConfig.Type=Subtitle,则支持srt

StorageLocation

String

VOD 存储地址

  • 输出类型为 VOD 时填写此参数

  • 不包含 http:// 或 https:// 前缀

例如:outin-*****c7d2a3811eb83da00163e0*****.oss-cn-shanghai.aliyuncs.com

FileName

String

VOD 文件名

  • 输出类型为 VOD 时填写此参数

  • 文件名中请附带扩展名,会依据扩展名判断输出类型,扩展名支持:mp4、wav、srt

Width

Integer

成片宽度,单位px

  • 成片视频的宽度,例如:1080。

  • 默认随源

Height

Integer

成片高度,单位px

  • 成片视频的高度,例如:1920。

  • 默认随源

Video

JSONObject

{"Crf": 27}

输出视频流相关配置,Crf、Codec

EditingConfig 参数说明

参数名

类型

必填项

名称

描述

SourceLanguage

String

源语言

TargetLanguage

String

翻译目标语言

  • 目标语言对应的代码,例如en。支持传入多个以逗号分隔的语言代码,例如“en,ja,id”,输出结果将同时包含多个语言的翻译结果。

  • 取值范围详见TargetLanguage 取值范围

DetextArea

String

设置字幕擦除

  • 不填则不进行字幕擦除

  • 取值范围:

    • Auto:自动识别擦除区域

    • [[x, y, width, height]]:指定擦除范围,格式为二层数组,可指定多个擦除区域,其中:

      • x:字幕框左上角距离视频左上角的横向距离比例,取值范围:[0, 1]

      • y:字幕框左上角距离视频左上角的竖向距离比例,取值范围:[0, 1]

      • width:字幕框宽度相对于视频宽度的比例,取值范围:[0, 1]

      • height:字幕框高度相对于视频高度的比例,取值范围:[0, 1]

SupportEditing

Boolean

是否支持二次编辑。如果需要对翻译结果进行二次修正,则需开启该开关。

  • 取值范围:

    • true:支持

    • false:不支持

  • 默认值:false

BilingualSubtitle

Boolean

是否输出双语语种字幕

  • 同时支持字幕级、面容级、声音级翻译,用于控制翻译结果输出成片的字幕类型。

  • 取值范围:

    • true:支持,表示输出双语字幕

    • false:不支持,表示输出单语字幕

  • 默认值:false

说明

如果您希望翻译结果输出的成片不显示字幕,则需要将SubtitleTrackClip.FontSize的值设置为0

SubtitleTranslate

String

字幕级翻译配置

  • 字幕级翻译配置

  • 填入此参数,则进行字幕级翻译,否则不进行字幕级翻译

  • 字符串符合 JSON 格式,详细入参介绍见下方

NeedSpeechTranslate

Boolean

是否需要语音级翻译

  • 取值范围:

    • true:是

    • false:否

  • 默认值:false

SpeechTranslate

String

语音级翻译配置

  • 语音级翻译配置

  • NeedSpeechTranslate 为 true 或填入此参数时,则进行语音级翻译,否则不进行语音级翻译

  • 字符串符合 JSON 格式,详细入参介绍见下方

NeedFaceTranslate

Boolean

是否需要面容级翻译

  • 取值范围:

    • true:是

    • false:否

  • 默认值:false

FaceTranslate

String

面容级翻译配置

  • 面容级翻译配置

  • NeedFaceTranslate 为 true 或填入此参数时,则进行面容级翻译,否则不进行面容级翻译

  • 字符串符合 JSON 格式,详细入参介绍见下方

TextSource

String

指定字幕来源的方式

  • 选项内容

    • ASR:通过ASR识别字幕

    • OCR:通过OCR识别字幕,支持通过OcrArea设置识别范围。当翻译类型=字幕级翻译时,默认值为OCR

    • OCR_ASR:优先通过OCR识别字幕,如果OCR识别失败则根据ASR识别字幕。启用OCR_ASR时也支持设置OcrArea。当翻译类型=语音级或面容级翻译时,默认值为OCR_ASR

    • ALL:字幕来源以ASR识别结果及其时间轴为依据,并通过OCR识别对ASR识别结果进行修正,例如纠正错别字。当前仅支持字幕级翻译

    • SubtitleFile:字幕来源为外部srt文件。如果期望字幕来源来自外部srt文件,需要传入参数InputConfig.Subtitle

CustomParameter

String

视频翻译自定义参数

HotwordLibraryIdList

String

热词库ID列表

说明

热词库的功能说明:

  • 支持热词转译设置,可以指定某些特定词句的翻译结果,例如:“视频云智能媒体服务”->“IMS”,“YYDS(永远的神)”->"The GOAT"等。

  • 通过热词库提升特定业务领域专有名词(如地名、商品名、生僻词)的识别准确率;解决谐音词或罕见词识别问题。

FECanvas

JSON

前端预览画布的宽高配置

  • 在配置该参数时,翻译成片中的实际字幕大小会按照画布预览的宽高与实际输出视频的宽高比例进行自适应缩放,保证相同FontSize在不同分辨率成片下字幕显示占比基本一致。

  • 示例值:{"Width": 1080,"Height": 1920}

说明

FECanvas使用说明:若配置FECanvas为{"Width": 1080,"Height": 1920},FontSize100,实际视频成片宽高为720*1280,则最终渲染的字幕FontSizeFontSize * Math.min(outputWidth/feWidth, outputHeight/feHeight) = 100 * Math.min(720/1080, 1280/1920) = 67.

SourceLanguage 取值范围

字幕级翻译

语音级翻译

面容级翻译

当字幕来源为OCR识别(即TextSource=OCROCR_ASR时)

当字幕来源为ASR识别(即TextSource=ASR时)

当字幕来源为srt字幕文件(即传入InputConfig.Subtitle时)

  • zh:中文

  • en:英文

  • zh:中文

  • en:英语

  • fr:法语

  • tr:土耳其语

  • zh:中文

  • en:英语

  • ja:日语

  • ko:韩语

  • yue:粤语

  • de:德语

  • fr:法语

  • es:西班牙语

  • ar:阿拉伯语

  • it:意大利语

  • az:阿塞拜疆语

  • be:白俄罗斯语

  • bg:保加利亚语

  • bs:波斯尼亚语

  • bn:孟加拉语

  • cs:捷克语

  • cy:威尔士语

  • da:丹麦语

  • et:爱沙尼亚语

  • fa:波斯语

  • hi:印地语

  • hbs:克罗地亚语

  • hu:匈牙利语

  • id:印度尼西亚语(印尼语)

  • is:冰岛语

  • lt:立陶宛语

  • lv:拉脱维亚语

  • mi:毛利语

  • mn:蒙古语

  • mr:马拉地语

  • ms:马来语

  • mt:马耳他语

  • ne:尼泊尔语

  • nl:荷兰语

  • no:挪威语

  • pl:波兰语

  • pt:葡萄牙语

  • ro:罗马尼亚语

  • ru:俄语

  • sk:斯洛伐克语

  • sl:斯洛文尼亚语

  • sq:阿尔巴尼亚语

  • zh:中文

  • en:英语

  • ja:日语

  • ko:韩语

  • yue:粤语

  • de:德语

  • fr:法语

  • es:西班牙语

  • ar:阿拉伯语

  • it:意大利语

  • az:阿塞拜疆语

  • be:白俄罗斯语

  • bg:保加利亚语

  • bs:波斯尼亚语

  • bn:孟加拉语

  • cs:捷克语

  • cy:威尔士语

  • da:丹麦语

  • et:爱沙尼亚语

  • fa:波斯语

  • hi:印地语

  • hbs:克罗地亚语

  • hu:匈牙利语

  • id:印度尼西亚语(印尼语)

  • is:冰岛语

  • lt:立陶宛语

  • lv:拉脱维亚语

  • mi:毛利语

  • mn:蒙古语

  • mr:马拉地语

  • ms:马来语

  • mt:马耳他语

  • ne:尼泊尔语

  • nl:荷兰语

  • no:挪威语

  • pl:波兰语

  • pt:葡萄牙语

  • ro:罗马尼亚语

  • ru:俄语

  • sk:斯洛伐克语

  • sl:斯洛文尼亚语

  • sq:阿尔巴尼亚语

  • zh:中文

  • en:英语

  • ja:日语

  • ko:韩语

  • yue:粤语

  • de:德语

  • fr:法语

  • es:西班牙语

  • ar:阿拉伯语

  • it:意大利语

  • az:阿塞拜疆语

  • be:白俄罗斯语

  • bg:保加利亚语

  • bs:波斯尼亚语

  • bn:孟加拉语

  • cs:捷克语

  • cy:威尔士语

  • da:丹麦语

  • et:爱沙尼亚语

  • fa:波斯语

  • hi:印地语

  • hbs:克罗地亚语

  • hu:匈牙利语

  • id:印度尼西亚语(印尼语)

  • is:冰岛语

  • lt:立陶宛语

  • lv:拉脱维亚语

  • mi:毛利语

  • mn:蒙古语

  • mr:马拉地语

  • ms:马来语

  • mt:马耳他语

  • ne:尼泊尔语

  • nl:荷兰语

  • no:挪威语

  • pl:波兰语

  • pt:葡萄牙语

  • ro:罗马尼亚语

  • ru:俄语

  • sk:斯洛伐克语

  • sl:斯洛文尼亚语

  • sq:阿尔巴尼亚语

TargetLanguage 取值范围

字幕级翻译

语音级翻译

面容级翻译

  • zh:中文

  • zh-tw:中文-繁体

  • en:英语

  • ja:日语

  • id:印度尼西亚语

  • es:西班牙语

  • pt:葡萄牙语

  • ar:阿拉伯语

  • fr:法语

  • tr:土耳其语

  • yue:粤语

  • de:德语

  • ko:韩语

  • ru:俄语

  • th:泰语

  • vi:越南语

  • ms:马来语

  • ----以下是中国的民间方言,翻译结果带有地方语言特色----

  • sichuan:四川话

  • dongbei:东北话

  • henan:河南话

  • shanghai:上海话

  • tianjin:天津话

    beijing:北京话

  • chongqing:重庆话

  • hunan:湖南话

  • taiwan:台湾话

  • shanxi:山西话

  • shaanxi:陕西话

  • zh:中文

  • zh-tw:中文-繁体

  • en:英语

  • ja:日语

  • ko:韩语

  • yue:粤语

  • de:德语

  • fr:法语

  • es:西班牙语

  • ar:阿拉伯语

  • tr:土耳其语

  • ru:俄语

  • pt:葡萄牙语

  • vi:越南语

  • ms:马来语

  • th:泰语

  • id:印度尼西亚语

  • ----以下是中国的民间方言,翻译结果带有地方语言特色----

  • sichuan:四川话

  • tianjin:天津话

  • en:英文

SubtitleTranslate 参数说明

名称

类型

必填项

名称

描述

OcrArea

String

OCR 识别区域

  • 不填默认为智能识别字幕区域

  • 取值范围:

  • Auto:自动识别字幕区域

  • [x, y, width, height]:指定字幕区域,格式为单层数组,只能指定 1 个区域,其中:

    • x:字幕框左上角距离视频左上角的横向距离比例,取值范围:[0, 1]

    • y:字幕框左上角距离视频左上角的竖向距离比例,取值范围:[0, 1]

    • width:字幕框宽度相对于视频宽度的比例,取值范围:[0, 1]

    • height:字幕框高度相对于视频高度的比例,取值范围:[0, 1]

SubtitleConfig

String

字幕合成配置

  • 用于自定义成片字幕效果,参数与剪辑合成中 Timeline 的 SubtitleTrackClip 中字幕参数一致,参考:SubtitleTrackClip

  • 字符串符合 JSON 格式

  • 如果您希望翻译结果输出的成片不显示字幕,则需要将SubtitleTrackClip.FontSize的值设置为0

SpeechTranslate 参数说明

名称

类型

必填项

名称

描述

OcrArea

String

OCR 识别区域

  • 不填默认为智能识别字幕区域

  • 取值范围:

  • Auto:自动识别字幕区域

  • [x, y, width, height]:指定字幕区域,格式为单层数组,只能指定 1 个区域,其中:

    • x:字幕框左上角距离视频左上角的横向距离比例,取值范围:[0, 1]

    • y:字幕框左上角距离视频左上角的竖向距离比例,取值范围:[0, 1]

    • width:字幕框宽度相对于视频宽度的比例,取值范围:[0, 1]

    • height:字幕框高度相对于视频高度的比例,取值范围:[0, 1]

CustomSrtType

String

自定义输入srt文件类型

  • 当字幕来源为指定的srt文件时(即传入了InputConfig.Subtitle),则该字段必填。

  • 取值范围:

    • SourceSrt:源语言单语字幕

    • TargetSrt:目标语言单语字幕

    • BilingualSrtSrcFirst:双语srt字幕,源语种在上,目标语种在下

    • BilingualSrtTgtFirst:双语srt字幕,源语种在下,目标语种在上

示例:例如进行中文->英文的翻译

  • “SourceSrt”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    你好,世界!
  • “TargetSrt”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    Hello,World!
  • “BilingualSrtSrcFirst”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    你好,世界!
    Hello,World!
  • “BilingualSrtTgtFirst”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    Hello,World!
    你好,世界!

SubtitleTimeForce

Boolean

是否仅翻译字幕的时间范围

  • 开启后,语音翻译将严格限制在OCR识别的字幕或指定srt的时间范围内。默认为false。

  • 该字段仅在TextSource为“OCR”或“OCR_ASR”时生效。

SubtitleConfig

String

字幕合成配置

  • 用于自定义成片字幕效果,参数与剪辑合成中 Timeline 的 SubtitleTrackClip 中字幕参数一致,参考:SubtitleTrackClip

  • 字符串符合 JSON 格式

  • 如果您希望翻译结果输出的成片不显示字幕,则需要将SubtitleTrackClip.FontSize的值设置为0

OriginalJobId

String

原任务 Id

  • 如果对翻译效果不满意,可以在 InputConfig.Subtitle 传入人工修改后的字幕文件,并且在此字段中传入原任务 Id 来重新生成翻译语音

  • 设置 SupportEditing 为 true 时(开启支持编辑),在任务结果中会包含 SpeechTranslationJobId,二次修正翻译时,将此值填入 OriginalJobId 中

  • 设置 SupportEditing 为 true 时(开启支持编辑),在任务结果中会包含翻译后的字幕文件 SpeechTranslatedSubtitleURL,请在此文件内容的基础上进行修改,并在二次编辑时传入 InputConfig.Subtitle 中

SkipSong

Integer

跳过清唱

  • 取值范围:0、1,默认值0

  • 当传值为1时,语音翻译会识别视频中的背景音乐演唱,不做翻译

  • 由于音乐识别有一定误差,建议在已知有背景音乐时传1,不要默认都传1

FaceTranslate 参数说明

名称

类型

必填项

名称

描述

OcrArea

String

OCR 识别区域

  • 不填默认为智能识别字幕区域

  • 取值范围:

  • Auto:自动识别字幕区域

  • [x, y, width, height]:指定字幕区域,格式为单层数组,只能指定 1 个区域,其中:

    • x:字幕框左上角距离视频左上角的横向距离比例,取值范围:[0, 1]

    • y:字幕框左上角距离视频左上角的竖向距离比例,取值范围:[0, 1]

    • width:字幕框宽度相对于视频宽度的比例,取值范围:[0, 1]

    • height:字幕框高度相对于视频高度的比例,取值范围:[0, 1]

CustomSrtType

String

自定义输入srt文件类型

  • 当字幕来源为指定的srt文件时(即传入了InputConfig.Subtitle),则该字段必填。

  • 取值范围:

    • SourceSrt:源语言单语字幕

    • TargetSrt:目标语言单语字幕

    • BilingualSrtSrcFirst:双语srt字幕,源语种在上,目标语种在下

    • BilingualSrtTgtFirst:双语srt字幕,源语种在下,目标语种在上

示例:例如进行中文->英文的翻译

  • “SourceSrt”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    你好,世界!
  • “TargetSrt”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    Hello,World!
  • “BilingualSrtSrcFirst”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    你好,世界!
    Hello,World!
  • “BilingualSrtTgtFirst”的srt文件示例:

    1
    00:00:01,000 --> 00:00:05,000
    Hello,World!
    你好,世界!

SubtitleTimeForce

Boolean

是否仅翻译字幕的时间范围

  • 开启后,语音翻译将严格限制在OCR识别的字幕或指定srt的时间范围内。默认为false。

  • 该字段仅在TextSource为“OCR”或“OCR_ASR”时生效。

SubtitleConfig

String

字幕合成配置

  • 用于自定义成片字幕效果,参数与剪辑合成中 Timeline 的 SubtitleTrackClip 中字幕参数一致,参考:SubtitleTrackClip

  • 字符串符合 JSON 格式

  • 如果您希望翻译结果输出的成片不显示字幕,则需要将SubtitleTrackClip.FontSize的值设置为0

SpeechDurationThres

Float

面容翻译时长阈值

如果一句话的时长低于该阈值,则将不再进行口型对齐。默认值设定为1秒。建议将其设置为大于或等于1秒。

时长上限不得超过输入视频的总时长。

FacialClarity

Float

面容清晰度设置

0-1,默认为1,值越高面容越清晰,若源素材视频清晰度较低,则建议该值调低。

CustomParameter 参数示例说明

声音/面容翻译的常用参数值示例

用法含义

--add -dl

  • 在原任务的基础上,增加设置以支持原声为多语种共存的情况。如果不存在共存情况,则无需增加此设置。例如:将韩语翻译成法语,但若韩语中夹杂了英语,添加此参数后,英文部分也将一并翻译为法语。

  • 但是对于中文翻译为英文翻译任务,当原声为中英混合时,建议不增加此参数,翻译效果会更佳,英语部分将原样输出到结果中。

参数示例

字幕级翻译

源文件=字幕文件

重要

srt字幕翻译按文本翻译计费,详见文本翻译计费

{
  "InputConfig": {
    "Type": "Subtitle",
    "Subtitle": "https://******.oss-cn-shanghai.aliyuncs.com/ice-generated/4e1021a0720f71eeb755f6f7d6496302/snapshots/sprite/test.srt"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en"
  },
  "Title": "1735798516693.srt",
  "OutputConfig": {
    "MediaURL": "https://****.oss-cn-shanghai.aliyuncs.com/ice-generated/4e1021a0720f71eeb755f6f7d6496302/snapshots/sprite/new.srt"
  }
}

源文件=视频文件

{
  "InputConfig": {
    "Type": "Video",
    "Video": "1628ae20c36******f6f7c77a6302"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "DetextArea": [
      [0, 0.64, 1, 0.13]],
    "BilingualSubtitle": false,
    "SubtitleTranslate": {
      "OcrArea": [0, 0.64, 1, 0.15],
      "SubtitleConfig": {
        "Type": "Text",
        "FontSize": 95,
        "FontColorOpacity": 1,
        "Color": "#ffffff",
        "X": 0.5,
        "Y": 0.686,
        "Angle": 0,
        "Spacing": 0,
        "TextWidth": 0.9,
        "Font": "Alibaba PuHuiTi",
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": false,
          "Italic": false,
          "Underline": false
        },
        "SizeRequestType": "RealDim",
        "SubtitleEffects": [],
        "LineSpacing": 0,
        "BorderStyle": 1,
        "Outline": 0,
        "Alignment": "Center"
      }
    },
    "SupportEditing": true,
    "NeedSpeechTranslate": false
  },
  "Title": "have a test",
  "OutputConfig": {
    "MediaURL": "https://*****.oss-cn-shanghai.aliyuncs.com/ice-generated/test.mp4"
  }
}

源文件=视频文件+字幕文件

{
  "InputConfig": {
    "Type": "Video",
    "Video": "4e92fa60c995*****6f7c77a6302",
    "Subtitle": "https://*****.oss-cn-shanghai.aliyuncs.com/ice-generated/4e1021a072****5f6f7d6496302/snapshots/sprite/test.srt"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "DetextArea": [[0, 0.64, 1, 0.14]],
    "BilingualSubtitle": false,
    "SubtitleTranslate": {
      "OcrArea": "Auto",
      "SubtitleConfig": {
        "Type": "Text",
        "FontSize": 95,
        "FontColorOpacity": 1,
        "Color": "#ffffff",
        "X": 0.5,
        "Y": 0.686,
        "Angle": 0,
        "Spacing": 0,
        "TextWidth": 0.9,
        "Font": "Alibaba PuHuiTi",
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": false,
          "Italic": false,
          "Underline": false
        },
        "SizeRequestType": "RealDim",
        "SubtitleEffects": [],
        "LineSpacing": 0,
        "BorderStyle": 1,
        "Outline": 0,
        "Alignment": "Center"
      }
    },
    "SupportEditing": true,
    "NeedSpeechTranslate": false
  },
  "Title": "1735898570421.mp4",
  "OutputConfig": {
    "MediaURL": "https://****.oss-cn-shanghai.aliyuncs.com/ice-generated/******/snapshots/sprite/1735898570421.mp4"
  }
}

语音级翻译

源文件=视频文件

{
  "InputConfig": {
    "Type": "Video",
    "Video": "1628ae20c36******8f6f7c77a6302"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "DetextArea": [[0, 0.64, 1, 0.15]],
    "SupportEditing": true,
    "BilingualSubtitle": false,
    "NeedSpeechTranslate": true,
    "SpeechTranslate": {
      "SubtitleTimeForce": false,
      "SubtitleConfig": {
        "Type": "Text",
        "FontSize": 95,
        "FontColorOpacity": 1,
        "Color": "#ffffff",
        "X": 0.5,
        "Y": 0.686,
        "Angle": 0,
        "Spacing": 0,
        "TextWidth": 0.9,
        "Font": "Alibaba PuHuiTi",
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": false,
          "Italic": false,
          "Underline": false
        },
        "SizeRequestType": "RealDim",
        "SubtitleEffects": [],
        "LineSpacing": 0,
        "BorderStyle": 1,
        "Outline": 0,
        "Alignment": "Center"
      }
    }
  },
  "Title": "have a test",
  "OutputConfig": {
    "MediaURL": "https://******.oss-cn-shanghai.aliyuncs.com/ice-generated/4e1021a0720f71eeb755f6f7d6496302/snapshots/sprite/1735798757385.mp4"
  }
}

源文件=视频文件+字幕文件

{
  "InputConfig": {
    "Type": "Video",
    "Video": "738d94a0ce87******af6f7c6696302",
    "Subtitle": "https://********.oss-cn-test.aliyuncs.com/test.srt"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "DetextArea": "Auto",
    "SupportEditing": true,
    "BilingualSubtitle": false,
    "NeedSpeechTranslate": true,
    "SpeechTranslate": {
      "SubtitleTimeForce": false,
      "SubtitleConfig": {
        "Type": "Text",
        "FontSize": 95,
        "FontColorOpacity": 1,
        "Color": "#ffffff",
        "X": 0.5,
        "Y": 0.686,
        "Angle": 0,
        "Spacing": 0,
        "TextWidth": 0.9,
        "Font": "Alibaba PuHuiTi",
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": false,
          "Italic": false,
          "Underline": false
        },
        "SizeRequestType": "RealDim",
        "SubtitleEffects": [],
        "LineSpacing": 0,
        "BorderStyle": 1,
        "Outline": 0,
        "Alignment": "Center"
      },
      "OcrArea": "Auto",
      "CustomSrtType": "SourceSrt"
    }
  },
  "Title": "1736485935837.mp4",
  "OutputConfig": {
    "MediaURL": "https://*****.oss-cn-***.aliyuncs.com/test.mp4"
  }
}

源文件=音频文件

{
  "InputConfig": {
    "Type": "Audio",
    "Audio": "2f552010c8d******e7f7f4586303"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "NeedSpeechTranslate": true
  },
  "Title": "have a test",
  "OutputConfig": {
    "MediaURL": "https://******.oss-cn-shanghai.aliyuncs.com/ice-generated/4e1021a0720f***f6f7d6496302/snapshots/sprite/test.wav"
  }
}

面容级翻译

{
  "InputConfig": {
    "Type": "Video",
    "Video": "1628ae20c36******8f6f7c77a6302"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "DetextArea": [[0, 0.64, 1, 0.15]],
    "SupportEditing": true,
    "BilingualSubtitle": false,
    "NeedFaceTranslate": true,
    "FaceTranslate": {
      "SubtitleConfig": {
        "Type": "Text",
        "FontSize": 95,
        "FontColorOpacity": 1,
        "Color": "#ffffff",
        "X": 0.5,
        "Y": 0.686,
        "Angle": 0,
        "Spacing": 0,
        "TextWidth": 0.9,
        "Font": "Alibaba PuHuiTi",
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": false,
          "Italic": false,
          "Underline": false
        },
        "SizeRequestType": "RealDim",
        "SubtitleEffects": [],
        "LineSpacing": 0,
        "BorderStyle": 1,
        "Outline": 0,
        "Alignment": "Center"
      },
      "SpeechDurationThres": 1,
      "FacialClarity": 1,
      "SubtitleTimeForce": false
    }
  },
  "Title": "have a test",
  "OutputConfig": {
    "MediaURL": "https://******.oss-cn-shanghai.aliyuncs.com/ice-generated/4e1021a0720f71eeb755f6f7d6496302/snapshots/sprite/1735798757385.mp4"
  }
}

GetSmartHandleJob参数说明

AiResult返回参数说明

目标语言

TargetLanguage只设置一种语言时,AiResult返回参数如下:

返回参数分类

参数名

类型

参数说明

公共

EditingProjectId

String

二次编辑工程Id

MediaURL

String

成片媒资URL地址

MediaId

String

成片媒资Id

DetextVideoURL

String

经过字幕擦除后的视频文件URL地址

DetextVideoMediaId

String

经过字幕擦除后的视频媒资Id

字幕级翻译

OriginalSubtitleMediaId

String

源(原始)字幕文件媒资Id

OriginalSubtitleURL

String

源(原始)字幕文件媒资URL地址

TranslatedSubtitleMediaId

String

字幕翻译结果-目标语言字幕文件媒资Id

TranslatedSubtitleURL

String

字幕翻译结果-目标语言字幕文件媒资URL地址

TranslatedText

String

纯字幕翻译结果文本

TranslatedTextArray

String

纯字幕翻译结果文本数组(多条字幕输入)

语音级翻译

SpeechTranslatedSubtitleMediaId

String

语音翻译结果-用于成片展示的字幕文件媒资Id

SpeechTranslatedSubtitleURL

String

语音翻译结果-用于成片展示的字幕文件地址

SpeechTranslatedSubtitleURLSigned

String

语音翻译结果-用于成片展示的字幕文件地址,带鉴权

SpeechTranslatedSubtitleMediaIdForFix

String

用于二次翻译修正的字幕文件媒资Id

SpeechTranslatedSubtitleURLForFix

String

用于二次翻译修正的字幕文件地址,带鉴权

SpeechBilingualSubtitleMediaId

String

声音翻译双语结果文件媒资Id

SpeechBilingualSubtitleURL

String

声音翻译双语结果文件媒资URL

SpeechTranslationJobId

String

声音翻译JobId(用于语音的二次修正)

TranslatedAudioMediaId

String

声音翻译音频文件媒资Id

TranslatedAudioMediaURL

String

声音翻译音频文件媒资URL地址

面容级翻译

FaceTranslationMediaId

String

口型对齐视频文件媒资Id

返回参数示例
{
  "SpeechTranslatedSubtitleURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.srt",
  "MediaId": "****9cb015bb71f0b96ff7f6d449****",
  "TranslatedAudioMediaId": "****df80e79d71efa44ae7f6c449****",
  "SpeechTranslatedSubtitleURLForFix": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test2.srt",
  "EditingProjectId": "****febec2bf4377b923cf5b1742****",
  "DetextVideoURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test3.mp4",
  "FaceTranslationMediaId": "****138015bb71f0b96ff7f6d449****",
  "SpeechTranslationJobId": "****0c827a664b4f88b33d8d46e3****"
}

目标语言

TargetLanguage设置了多个目标语言时,AiResult返回参数如下:

参数名

类型

参数说明

DetextVideoURL

String

经过字幕擦除后的视频文件URL地址

DetextVideoMediaId

String

经过字幕擦除后的视频媒资Id

VideoTranslationAiResultMap

JSON

  • 不同目标语种的翻译结果。

  • JSON字段说明:

    • key:目标语言的代码,例如“en”

    • value:对应语言的翻译结果

  • 参数示例详见返回参数示例

VideoTranslationAiResultMapvalue值说明

返回参数分类

参数名

类型

名称

公共

MediaURL

String

单个语种成片媒资URL地址

MediaId

String

单个语种成片媒资Id

字幕级翻译

OriginalSubtitleMediaId

String

源(原始)字幕文件媒资Id

OriginalSubtitleURL

String

源(原始)字幕文件媒资URL地址

TranslatedSubtitleMediaId

String

字幕翻译结果-目标语言字幕文件媒资Id

TranslatedSubtitleURL

String

字幕翻译结果-目标语言字幕文件媒资URL地址

TranslatedText

String

纯字幕翻译结果文本

TranslatedTextArray

String

纯字幕翻译结果文本数组(多条字幕输入)

语音级翻译

SpeechTranslatedSubtitleMediaId

String

语音翻译结果-用于成片展示的字幕文件媒资Id

SpeechTranslatedSubtitleURL

String

语音翻译结果-用于成片展示的字幕文件地址

SpeechTranslatedSubtitleURLSigned

String

语音翻译结果-用于成片展示的字幕文件地址,带鉴权

SpeechTranslatedSubtitleMediaIdForFix

String

用于二次翻译修正的字幕文件媒资Id

SpeechTranslatedSubtitleURLForFix

String

用于二次翻译修正的字幕文件地址,带鉴权

SpeechBilingualSubtitleMediaId

String

声音翻译双语结果文件媒资Id

SpeechBilingualSubtitleURL

String

声音翻译双语结果文件媒资URL

SpeechTranslationJobId

String

声音翻译JobId(用于语音的二次修正)

TranslatedAudioMediaId

String

声音翻译音频文件媒资Id

TranslatedAudioMediaURL

String

声音翻译音频文件媒资URL地址

面容级翻译

FaceTranslationMediaId

String

口型对齐视频文件媒资Id

返回参数示例
{
  "VideoTranslationAiResultMap": {
    "en": {
      "SpeechTranslatedSubtitleURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test1.srt",
      "MediaId": "****4d00087171f0bf81f6f7d44b****",
      "TranslatedAudioMediaId": "****df80e79d71efa44ae7f6c449****",
      "SpeechTranslatedSubtitleURLForFix": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test2.srt",
      "EditingProjectId": "****983759c045c387146888713d****",
      "SpeechTranslationJobId": "****33cc65164f13aace55a0f0d3****"
    },
    "es": {
      "SpeechTranslatedSubtitleURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test3.srt",
      "MediaId": "****cec0087171f09033f7f6d449****",
      "TranslatedAudioMediaId": "****a7f0085671f0bf81f6f7d44b****",
      "SpeechTranslatedSubtitleURLForFix": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test4.srt",
      "EditingProjectId": "****d16f4a874c4898d254d4b68e****",
      "SpeechTranslationJobId": "****f705193c404e9bec19859a11****"
    }
  },
  "DetextVideoURL": "http://[your-bucket].oss-[your-region-id].aliyuncs.com/test5.mp4"
}

场景示例

语音翻译 - 人工修正

背景说明

如果对语音翻译的结果不满意,可以通过人工修正字幕文件的方式进行二次提交,以便对翻译结果进行修正。

流程描述

重要
  • 如果需要后续支持语音翻译的人工修正,在第一次提交视频翻译任务时,需要将参数SupportEditing设置为true。

  • 注意:当前版本的“面容级翻译”仅支持对语音进行二次翻译修正,暂不支持对视频中人物的口型进行二次修正。

进行首次提交语音级翻译,完整的参数示例如下:

{
    "InputConfig": {
        "Type": "Video",
        "Video": "*****a0052ff71efbfd4e7e6c66*****"
    },
    "OutputConfig": {
        "MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/video.mp4"
    },
    "EditingConfig": {
        "SourceLanguage": "zh",
        "TargetLanguage": "en",
        "SupportEditing": true,
        "NeedSpeechTranslate": true
    }
}

首次提交语音翻译结果如下:

{
    "MediaId": "*****d306b6d71efbf98f6f7f55*****",
    "TranslatedAudioMediaId": "*****d306b6d71efbf98f6f7f5*****",
    "SpeechTranslatedSubtitleURL": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/video_subtitle_asr_en.srt",
    "SpeechTranslatedSubtitleURLSigned": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/***.srt",
    "SpeechTranslatedSubtitleURLForFix": "http://your-bucket.oss-cn-shanghai.aliyuncs.com/***.srt",
    "SpeechTranslationJobId": "*****74f329d4c03b63e7f7dac8*****"
}

其中:

  1. MediaId:成片的媒资 Id;

  2. TranslatedAudioMediaId:语音翻译得到的音频媒资 Id;

  3. SpeechTranslatedSubtitleURL:语音翻译得到的用于成片展示的字幕文件地址;

  4. SpeechTranslatedSubtitleURLSigned:语音翻译得到的用于成片展示的字幕文件地址,带鉴权;

  5. SpeechTranslatedSubtitleURLForFix:用于二次翻译修正的字幕文件地址,带鉴权;

  6. SpeechTranslationJobId:语音翻译的 JobId,人工修正时填入的 OriginalJobId 需要依赖此值。

如果对翻译效果不满意,请下载SpeechTranslatedSubtitleURLForFix参数中的srt字幕文件,并对字幕文件中的内容进行修改,再次提交语音翻译,本次语音翻译会根据修改后的字幕内容进行重新生成音频。

说明

可在SpeechTranslatedSubtitleURLForFix中的srt文件中设置特殊指令,以干预语音翻译的修正的效果。详见下文语音修正标记参数说明

二次修正时参数示例如下,主要包括原视频、修正后的字幕文件、原音频翻译任务 Id、字幕样式配置:

重要

在提交二次翻译修正任务时,务必确保InputConfig.Subtitle传递的是通过SpeechTranslatedSubtitleURLForFix修正后的双语字幕。

{
  "InputConfig": {
    "Type": "Video",
    "Video": "*****a0052ff71efbfd4e7e6c66*****",
    "Subtitle": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/new_subtitle.srt"
  },
  "OutputConfig": {
    "MediaURL": "https://your-bucket.oss-cn-shanghai.aliyuncs.com/video.mp4"
  },
  "EditingConfig": {
    "SourceLanguage": "zh",
    "TargetLanguage": "en",
    "SupportEditing": true,
    "NeedSpeechTranslate": true,
    "SpeechTranslate": {
      "OriginalJobId": "*****b5d5d604916bb898b3066*****",
      "SubtitleConfig": {
        "Type": "Text",
        "FontSize": 95,
        "FontColorOpacity": 1,
        "Color": "#ffffff",
        "X": 0.5,
        "Y": 0.686,
        "Angle": 0,
        "Spacing": 0,
        "TextWidth": 0.9,
        "Font": "Alibaba PuHuiTi",
        "FontColor": "#ffffff",
        "FontFace": {
          "Bold": false,
          "Italic": false,
          "Underline": false
        },
        "SizeRequestType": "RealDim",
        "SubtitleEffects": [],
        "LineSpacing": 0,
        "BorderStyle": 1,
        "Outline": 0,
        "Alignment": "Center"
      }
    }
  }
}

语音修正标记参数说明

重要

不允许出现单行字幕内容和修正标记同时为空的情况(包括空格和跳格-Tab键),否则可能导致语音翻译的修正失败。如需使字幕呈现为空行,请通过语音修正标记明确指示声音的处理方式例如若需删除整行字幕而不更改声音,则可使用<--onlymodifytext>进行标记。

语音修正标记

指令名称

说明

<--copy>

使用原声

在当前行字幕的时间戳范围内的声音将被替换为视频的原始音频。

<--fsttran>

使用首次翻译结果

在当前行字幕的时间戳范围内的声音将被替换为首次翻译结果对应的音频。

<--mute>

发言人静音

在当前行字幕的时间戳范围内,将发言人的声音静音处理。

<--mute_all>

全部静音

在当前行字幕的时间戳范围内,将所有声音进行静音处理。

<--onlymodifytext>

仅修改字幕

在当前行字幕的时间戳范围内,仅修改字幕内容,但不改变声音。

以下是一个srt字幕文件示例,语音修正标记的规范使用示例如下所示:

1
00:00:01,000 --> 00:00:03,000
大家好,
<--copy>Hello everyone,

2
00:00:03,500 --> 00:00:06,000
欢迎来到今天的讲座。
<--fsttran>welcome to today's lecture.

3
00:00:07,000 --> 00:00:10,000
我们将讨论未来的技术趋势。
<--mute>We'll discuss the future technology trends.

4
00:00:11,000 --> 00:00:14,000
请大家准备好提问。
<--mute_all>Please get ready to ask questions.

5
00:00:15,000 --> 00:00:18,000
现在让我们开始吧。
<--onlymodifytext>Now, let's get started.

自定义热词库的应用

背景说明

可通过配置参数EditingConfig.HotwordLibraryIdList来实现:

  • 指定热词的转译结果;

  • 提升特定语音识别场景下的热词识别率。

OpenAPI交互流程

image

图中涉及的热词相关API:

SDK调用示例

运行需要安装的Maven依赖

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.8</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.78</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.3</version>
</dependency>

代码示例

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

import static com.aliyuncs.http.ProtocolType.HTTPS;

public class VideoTranslationHotwordTest {

    // 从配置文件中获取ak、sk
    static String ak = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String sk = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");

    // 需要替换成目标endpoint以及region
    static String endpoint = "ice.cn-hangzhou.aliyuncs.com";
    static String region = "cn-hangzhou";

    @Data
    @Builder
    @AllArgsConstructor
    public static class Hotword {
        @JSONField(name = "Text")
        private String text;
        @JSONField(name = "Weight")
        private Integer weight;
        @JSONField(name = "Language")
        private String language;
        @JSONField(name = "TranspositionResultList")
        private List<TranspositionResult> transpositionResultList;
    }

    @Data
    @Builder
    @AllArgsConstructor
    public static class TranspositionResult {
        @JSONField(name = "TranslatedText")
        private String translatedText;
        @JSONField(name = "TargetLanguage")
        private String targetLanguage;
    }

    public static String createHotwordLibrary(String name, String description, List<Hotword> hotwords) throws ClientException {
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(endpoint);
        request.setSysVersion("2020-11-09");
        request.setHttpContentType(FormatType.JSON);
        request.setSysProtocol(ProtocolType.HTTPS);

        request.setSysAction("CreateHotwordLibrary");
        request.putBodyParameter("Name", name);
        request.putBodyParameter("Description", description);
        request.putBodyParameter("Hotwords", JSONObject.parseArray(JSONObject.toJSONString(hotwords)));
        request.putBodyParameter("UsageScenario", "VideoTranslation");

        DefaultProfile profile = DefaultProfile.getProfile(region, ak, sk);
        IAcsClient ascClient = new DefaultAcsClient(profile);

        CommonResponse commonResponse = ascClient.getCommonResponse(request);
        JSONObject data = JSONObject.parseObject(commonResponse.getData());
        String hotwordLibraryId = data.getString("HotwordLibraryId");
        System.out.println("HotwordLibraryId:" + hotwordLibraryId);
        return hotwordLibraryId;
    }

    public static String getHotwordLibrary(String hotwordLibraryId) throws ClientException {
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(endpoint);
        request.setSysVersion("2020-11-09");
        request.setHttpContentType(FormatType.JSON);
        request.setSysProtocol(ProtocolType.HTTPS);

        request.setSysAction("GetHotwordLibrary");
        request.putBodyParameter("HotwordLibraryId", hotwordLibraryId);
        DefaultProfile profile = DefaultProfile.getProfile(region, ak, sk);
        IAcsClient ascClient = new DefaultAcsClient(profile);
        CommonResponse commonResponse = ascClient.getCommonResponse(request);
        System.out.println(JSONObject.toJSONString(commonResponse.getData()));
        return commonResponse.getData();
    }

    public static void listHotwordLibraries() throws ClientException {
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(endpoint);
        request.setSysVersion("2020-11-09");
        request.setHttpContentType(FormatType.JSON);
        request.setSysProtocol(ProtocolType.HTTPS);

        request.setSysAction("ListHotwordLibraries");
        request.putBodyParameter("UsageScenario", "VideoTranslation");
        request.putBodyParameter("MaxResults", 10);
        DefaultProfile profile = DefaultProfile.getProfile(region, ak, sk);
        IAcsClient ascClient = new DefaultAcsClient(profile);
        CommonResponse commonResponse = ascClient.getCommonResponse(request);
        System.out.println(JSONObject.toJSONString(commonResponse.getData()));
    }

    public static void testCreateHotword() throws InterruptedException, ClientException {
        String hotwordList = "宋察=Song Cha;朴颂=Piao Song;万妮=Wanni;妮妮=Nini;万母=Wanni's mother;万父=Wanni's father;胡恩=Hu En;朱琳=Zhu Lin;素莎=Susha;希娜=Sheena;胡母=Mother Hu;万卡=Wanka;医院院长=Hospital director;死老头=Damn old man;缅甸=Myanmar;济岛=Ji Island;韩城=Hancheng;丘比特=Cupid;璀璨之心=The heart of brilliance;避孕药=contraceptive pill;黄豆酱汤=Soybean paste soup;接待处=Reception;贱人=bitch;虎帮=The Tiger Gang;鸿帮=The Hong Gang;混蛋=Bastart";
        String sourceLanguage = "zh";
        String targetLanguage = "en";
        
        List<Hotword> hotwords = new ArrayList<>();
        String[] hotwordTranslationArray = hotwordList.split(";");
        
        for (String hotwordTranslation : hotwordTranslationArray) {
            String originalWord = hotwordTranslation.split("=")[0];
            String translationWord = hotwordTranslation.split("=")[1];
            
            // 可传入多种目标语言的翻译语种
            List<TranspositionResult> transpositionList = new ArrayList<>();
            transpositionList.add(TranspositionResult.builder().translatedText(translationWord).targetLanguage(targetLanguage).build());
            hotwords.add(Hotword.builder().language(sourceLanguage).weight(4).text(originalWord).transpositionResultList(transpositionList).build());
        }

        // 创建热词
        String hotwordLibraryId = createHotwordLibrary("测试热词名称", "测试热词描述", hotwords);

        // 查询翻译热词信息
        getHotwordLibrary(hotwordLibraryId);

        // 翻译热词列表
        listHotwordLibraries();
    }

    public static void testVideoTranslation() throws ClientException {

        // EditingConfig 中的HotwordLibraryIdList改为第一步创建的热词库Id
        String subtitleTranslationConfigStr = "{\n" +
                "\t\"InputConfig\": {\n" +
                "        \"Type\": \"Video\",\n" +
                "        \"Video\": \"https://your-bucket.oss-cn-shanghai.aliyuncs.com/translation/your.mp4\"\n" +
                "    },\n" +
                "    \"OutputConfig\": {\n" +
                "        \"MediaURL\": \"https://your-bucket.oss-cn-shanghai.aliyuncs.com/speech_translate/your_outout.mp4\",\n" +
                "    },\n" +
                "    \"EditingConfig\": {\n" +
                "        \"SourceLanguage\": \"zh\",\n" +
                "        \"TargetLanguage\": \"en\",\n" +
                "        \"SupportEditing\": \"true\",\n" +
                "        \"TextSource\": \"OCR\",\n" +
                "        \"HotwordLibraryIdList\": \"*****00ef45f54a87a61be313a221*****\",\n" +
                "        \"SubtitleTranslate\": {\n" +
                "            \"SubtitleConfig\": {\n" +
                "                \"FontSize\": 40,\n" +
                "                \"Alignment\": \"TopCenter\",\n" +
                "                \"Y\": 0.8,\n" +
                "                \"FontColor\": \"#ffffff\",\n" +
                "                \"TextWidth\": 0.9,\n" +
                "                \"Shadow\": 2,\n" +
                "                \"BackColour\": \"#000000\",\n" +
                "                \"AdaptMode\": \"AutoWrapAtSpacesStrict\"\n" +
                "            }\n" +
                "        }\n" +
                "    }\n" +
                "}";

        // EditingConfig 中的HotwordLibraryIdList改为第一步创建的热词库Id
        String speechTranslationConfigStr = "{\n" +
                "\t\"InputConfig\": {\n" +
                "        \"Type\": \"Video\",\n" +
                "        \"Video\": \"https://your-bucket.oss-cn-shanghai.aliyuncs.com/translation/your.mp4\"\n" +
                "    },\n" +
               "    \"OutputConfig\": {\n" +
                "        \"MediaURL\": \"https://your-bucket.oss-cn-shanghai.aliyuncs.com/speech_translate/your_outout.mp4\",\n" +
                "    },\n" +
                "    \"EditingConfig\": {\n" +
                "        \"SourceLanguage\": \"zh\",\n" +
                "        \"TargetLanguage\": \"en\",\n" +
                "        \"SupportEditing\": \"true\",\n" +
                "        \"TextSource\": \"ASR\",\n" +
                "        \"HotwordLibraryIdList\": \"*****00ef45f54a87a61be313a221*****\",\n" +
                "        \"SpeechTranslate\": {\n" +
                "            \"SubtitleConfig\": {\n" +
                "                \"FontSize\": 40,\n" +
                "                \"Alignment\": \"TopCenter\",\n" +
                "                \"Y\": 0.8,\n" +
                "                \"FontColor\": \"#ffffff\",\n" +
                "                \"TextWidth\": 0.9,\n" +
                "                \"Shadow\": 2,\n" +
                "                \"BackColour\": \"#000000\",\n" +
                "                \"AdaptMode\": \"AutoWrapAtSpacesStrict\"\n" +
                "            }\n" +
                "        }\n" +
                "    }\n" +
                "}";
        JSONObject subtitleTranslationConfig = JSONObject.parseObject(subtitleTranslationConfigStr);
        JSONObject speechTranslationConfig = JSONObject.parseObject(speechTranslationConfigStr);

        doSubmitVideoTranslationJob(subtitleTranslationConfig.getString("InputConfig"), subtitleTranslationConfig.getString("OutputConfig"), subtitleTranslationConfig.getString("EditingConfig"));
        doSubmitVideoTranslationJob(speechTranslationConfig.getString("InputConfig"), speechTranslationConfig.getString("OutputConfig"), speechTranslationConfig.getString("EditingConfig"));
    }


    private static void doSubmitVideoTranslationJob(String inputConfig, String outputConfig, String editingConfig) throws ClientException {

        try {
            CommonRequest request = new CommonRequest();
            request.setSysMethod(MethodType.POST);
            request.setSysDomain(endpoint);
            request.setSysProtocol(HTTPS);
            request.setSysVersion("2020-11-09");
            request.setHttpContentType(FormatType.JSON);
            request.setSysAction("SubmitVideoTranslationJob");
            request.putBodyParameter("InputConfig", inputConfig);
            request.putBodyParameter("EditingConfig", editingConfig);

            if (StringUtils.isNotBlank(outputConfig)) {
                outputConfig = outputConfig.replaceAll("placeholder", "test" + System.currentTimeMillis());
                request.putBodyParameter("OutputConfig", outputConfig);
            }

            DefaultProfile profile = DefaultProfile.getProfile(region, ak, sk);
            IAcsClient ascClient = new DefaultAcsClient(profile);
            CommonResponse commonResponse = ascClient.getCommonResponse(request);

            JSONObject data = JSONObject.parseObject(commonResponse.getData());

            System.out.printf("doSubmitVideoTranslationJobBody:" + data.toJSONString());
        } catch (ClientException clientException) {
            throw clientException;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

相关文档

关于计费

计费说明请参见视频翻译计费说明