全部產品
Search
文件中心

Intelligent Media Services:視頻翻譯參數介紹與樣本

更新時間:Oct 30, 2025

本文介紹了有關視頻翻譯介面 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},FontSize為100,實際視頻成片寬高為720*1280,則最終渲染的字幕FontSize為FontSize * Math.min(outputWidth/feWidth, outputHeight/feHeight) = 100 * Math.min(720/1080, 1280/1920) = 67.

SourceLanguage 取值範圍

字幕級翻譯

語音級翻譯

面容級翻譯

當字幕來源為OCR識別(即TextSource=OCR或OCR_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:對應語言的翻譯結果

  • 參數樣本詳見返回參數樣本

VideoTranslationAiResultMap的value值說明

返回參數分類

參數名

類型

名稱

公用

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互動流程

圖中涉及的熱詞相關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);
        }
    }
}

相關文檔

關於計費

計費說明請參見視頻翻譯計費說明