すべてのプロダクト
Search
ドキュメントセンター

Intelligent Media Services:動画翻訳のパラメーター

最終更新日:Aug 25, 2026

SubmitVideoTranslationJob を使用して動画翻訳タスクを送信し、GetSmartHandleJob を使用して結果を取得します。このトピックでは、両方の操作のリクエストパラメーターとレスポンスパラメーターについて説明します。

可用性

翻訳タイプ

サポートリージョン

字幕翻訳

中国 (上海)、中国 (北京)、中国 (深セン)、中国 (杭州)、シンガポール、米国 (シリコンバレー)

音声翻訳

中国 (上海)、中国 (北京)、中国 (深セン)、中国 (杭州)、シンガポール、米国 (シリコンバレー)

リップシンク翻訳

中国 (上海)、シンガポール

SubmitVideoTranslationJob

重要

翻訳タイプを区別するには、次のブール値パラメーターを設定します。

  • 字幕翻訳: NeedSpeechTranslate と NeedFaceTranslate を false に設定します。SubtitleTranslate で字幕設定を構成します。

  • 音声翻訳: NeedSpeechTranslate を true に、NeedFaceTranslate を false に設定します。 SpeechTranslate で音声設定を構成します。

  • リップシンク翻訳: NeedFaceTranslate を true に、NeedSpeechTranslate を false に設定し、FaceTranslate でリップシンク設定を構成します。

パラメーター

タイプ

必須

説明

InputConfig

String

はい

JSON 文字列形式の入力設定。

OutputConfig

String

はい

JSON 文字列形式の出力設定。

EditingConfig

String

はい

JSON 文字列形式の翻訳設定。

Title

String

いいえ

タスク名。

Description

String

いいえ

タスクの説明。

UserData

String

いいえ

JSON 文字列形式のカスタム情報。最大長:512 文字。コールバック URL の設定をサポートします。

InputConfig

パラメーター

タイプ

必須

説明

Type

String

はい

入力タイプ。有効な値: Video、Audio、Subtitle。

Video

String

条件付き

動画ファイルの ID または URL です。Type が Video の場合に必須です。メディアアセット ID、現在の Alibaba Cloud アカウント内の OSS URL、またはパブリックにアクセス可能な URL を指定できます。

Audio

String

条件付き

オーディオファイルの ID または URL。 Type が Audio の場合に必須です。メディアアセット ID、現在の Alibaba Cloud アカウントの OSS URL、または一般公開されている URL を指定できます。対応フォーマット: MP3、WAV。

Subtitle

String

条件付き

字幕ファイルの ID または URL。 Type が Subtitle の場合に必須です。 メディアアセット ID、現在の Alibaba Cloud アカウントの OSS URL、または一般公開されている URL を指定できます。 対応フォーマット: SRT。

入力タイプの制約

翻訳タイプ

サポートされている入力タイプ

字幕翻訳 (NeedSpeechTranslate=false, NeedFaceTranslate=false)

Video, Subtitle

音声翻訳(NeedSpeechTranslate=true)

Video, Audio

リップシンク翻訳 (NeedFaceTranslate=true)

Video のみ

OutputConfig

パラメーター

タイプ

必須

説明

OutputTarget

String

いいえ

出力先。デフォルト値は OSS で、有効な値は OSS (OSS に保存)、VOD (ApsaraVideo VOD に保存) です。

MediaURL

String

はい

現在の Alibaba Cloud アカウントの OSS URL。パスにはファイル拡張子を含める必要があります。サポートされている拡張子: mp4 (InputConfig.Type=Video の場合)、wav (InputConfig.Type=Audio の場合)、srt (InputConfig.Type=Subtitle の場合)。

StorageLocation

String

条件付き

OutputTarget が VOD の場合に必須です。 http:// や https:// などのプロトコルプレフィックスを含めずにストレージロケーションを指定します。 例: outin-***c7d2a3811eb83da00163e0***.oss-cn-shanghai.aliyuncs.com。

FileName

String

条件付き

OutputTarget が VOD の場合、拡張子付きのファイル名が必須です。サポートされている拡張子: mp4、wav、srt。

Width

Integer

いいえ

出力動画の幅 (ピクセル単位)。デフォルトではソース動画の幅が使用されます。

Height

Integer

いいえ

出力動画の高さ (ピクセル単位)。デフォルトではソース動画の高さが使用されます。

Video

JSONObject

いいえ

CRF 設定やコーデックなど、出力動画の構成。 例: {"Crf": 27}。

EditingConfig

パラメーター

タイプ

必須

説明

SourceLanguage

String

はい

ソース言語のコード(例:zh)。

TargetLanguage

String

はい

翻訳先の言語コードです。複数の言語はカンマで区切ります。例: en,ja,id。

DetextArea

String

いいえ

字幕消去の構成。指定しない場合、ソース字幕は保持されます。有効な値: Auto (字幕エリアを自動的に検出)、または 1 つ以上の消去エリアを指定する 2 レイヤーの配列 [[x, y, width, height], ...]。配列では、x はエリアの左上隅からビデオの左上隅までの水平距離の比率、y は垂直距離の比率、width は幅の比率、height は高さの比率です。すべての値の範囲は 0~1 です。

SupportEditing

Boolean

いいえ

翻訳を修正するための後編集を有効にします。デフォルト: false。

BilingualSubtitle

Boolean

いいえ

出力動画にバイリンガル字幕を生成します。3つすべての翻訳タイプに対応しています。デフォルト: false。

SubtitleTranslate

String

いいえ

JSON 文字列形式の字幕翻訳設定。字幕翻訳に必須です。

NeedSpeechTranslate

Boolean

いいえ

音声翻訳を有効にします。デフォルト: false。

SpeechTranslate

String

いいえ

音声翻訳の構成 (JSON 文字列)。 NeedSpeechTranslate が true の場合、またはこのパラメーターが指定されている場合に音声翻訳が実行されます。

NeedFaceTranslate

Boolean

いいえ

リップシンク翻訳を有効にします。デフォルト: false。

FaceTranslate

String

いいえ

リップシンク翻訳の設定を格納する JSON 文字列です。リップシンク翻訳は、NeedFaceTranslate が true の場合、またはこのパラメーターが指定されている場合に実行されます。

TextSource

String

いいえ

字幕ソースメソッド。

CustomParameter

String

いいえ

動画翻訳の効果を制御するためのカスタムパラメーター。

HotwordLibraryIdList

String

いいえ

カンマ区切りのホットワードライブラリ ID。 例: "**b4549d46c88681030f6e,549d46c88b4681030f6e**"。

FECanvas

JSON

いいえ

字幕フォントのアダプティブスケーリング用のフロントエンドプレビューキャンバスのディメンション。例: {"Width": 1080, "Height": 1920}。レンダリングされるフォントサイズは、次の式で計算されます: FontSize x Math.min(outputWidth/feWidth, outputHeight/feHeight)。例えば、FECanvas={"Width": 1080, "Height": 1920}、FontSize=100、出力解像度が 720x1280 の場合、レンダリングされる FontSize は 100 x Math.min(720/1080, 1280/1920) = 67 となります。

字幕なしで出力ビデオを生成するには、SubtitleTrackClip.FontSize を 0 に設定します。

SourceLanguage の有効な値

字幕翻訳 (TextSource=OCR または OCR_ASR)

字幕翻訳 (TextSource=ASR)

外部 SRT ソース

音声翻訳

リップシンク翻訳

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

外部 SRT ソースと同じ

外部 SRT ソースと同じ

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 (英語) のみ

TextSource の有効な値

値

説明

デフォルトの対象

ASR

自動音声認識 (ASR) を通じて字幕を認識します。

-

OCR

光学式文字認識 (OCR) で字幕を認識し、OcrArea で認識エリアを設定します。

字幕翻訳

OCR_ASR

OCR を優先します。OCR が失敗した場合は、ASR にフォールバックします。OcrArea を使用して認識エリアを設定します。

音声翻訳とリップシンク翻訳

ALL

ASR で文字起こしされたテキストとタイムラインを優先し、OCR で不正確な部分を修正します。字幕翻訳でのみ利用可能です。

-

SubtitleFile

InputConfig.Subtitle で指定された外部 SRT ファイルを使用します。

-

SubtitleTranslate

パラメーター

タイプ

必須

説明

OcrArea

String

いいえ

OCR 認識エリア。指定しない場合、字幕エリアが自動的に検出されます。有効な値は Auto、または単一層の配列 [x, y, width, height] です。この配列では、x はエリアの左上隅からビデオの左上隅までの水平距離の比率、y は垂直距離の比率、width は幅の比率、height は高さの比率を表します。すべての値の範囲は 0 から 1 です。DetextArea とは異なり、指定できるエリアは 1 つだけです。

SubtitleConfig

String

いいえ

字幕スタイルを JSON 文字列として出力します。パラメーターは Timeline の SubtitleTrackClip 仕様に従います。字幕を非表示にするには、FontSize を 0 に設定します。

SpeechTranslate

パラメーター

タイプ

必須

説明

OcrArea

String

いいえ

OCR 認識エリア。SubtitleTranslate.OcrArea と同じフォーマットです。

CustomSrtType

String

条件付き

InputConfig.Subtitle が指定されている場合は必須です。入力字幕のタイプを指定します。有効な値: SourceSrt (ソース言語)、TargetSrt (ターゲット言語)、BilingualSrtSrcFirst (バイリンガル、ソース言語の下にターゲット言語)、BilingualSrtTgtFirst (バイリンガル、ターゲット言語の下にソース言語)。

SubtitleTimeForce

Boolean

いいえ

字幕の時間範囲内の音声のみを翻訳します。 デフォルト: false。 TextSource が OCR または OCR_ASR の場合にのみ有効です。

SubtitleConfig

String

いいえ

出力字幕のスタイル設定。 SubtitleTranslate.SubtitleConfig と同じフォーマットです。

OriginalJobId

String

いいえ

後編集の再送信には、初期タスク (SupportEditing が true の場合) から返される SpeechTranslationJobId の値を使用します。 初期の翻訳結果は SpeechTranslatedSubtitleURL から入手できます。 SRT ファイルを修正し、URL を InputConfig.Subtitle に渡します。

SkipSong

Integer

いいえ

歌唱部分の翻訳をスキップします。有効な値: 0 (デフォルト、ボーカルを含む、検出されたすべての音声を翻訳)、1 (歌声を識別して除外します)。音楽検出アルゴリズムは 100% 正確ではありません。ソースビデオに歌唱が含まれている場合にのみ、1 に設定してください。

FaceTranslate

パラメーター

タイプ

必須

説明

OcrArea

String

いいえ

OCR 認識エリア。SubtitleTranslate.OcrArea と同じフォーマットです。

CustomSrtType

String

条件付き

InputConfig.Subtitle が指定されている場合は必須です。 SpeechTranslate.CustomSrtType と同じ値が有効です。

SubtitleTimeForce

Boolean

いいえ

SpeechTranslate.SubtitleTimeForce と同じ動作です。

SubtitleConfig

String

いいえ

出力字幕のスタイル設定です。フォーマットは SubtitleTranslate.SubtitleConfig と同じです。

SpeechDurationThres

Float

いいえ

リップシンク処理の対象となる、秒単位での最小セグメント期間。このしきい値未満のセグメントは、リップシンク処理がスキップされます。デフォルト: 1。ソースビデオの総持続時間を超えることはできません。

FacialClarity

Float

いいえ

顔の鮮明度レベル。有効値: 0~1。デフォルト: 1 (最高の鮮明度)。低解像度のソースビデオの場合は、小さい値を使用してください。

SRT フォーマットの例

中国語から英語への翻訳の場合:

SourceSrt (ソース言語のみ):

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

TargetSrt (ターゲット言語のみ):

1
00:00:01,000 --> 00:00:05,000
Hello,World!

BilingualSrtSrcFirst (ターゲットがソースの下):

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

BilingualSrtTgtFirst (ソースがターゲットの下):

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

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 レスポンスパラメーター

単一ターゲット言語

カテゴリ

パラメーター

タイプ

説明

共通

EditingProjectId

String

後編集プロジェクト ID。

MediaURL

String

出力メディアアセット URL。

MediaId

String

出力メディアアセット ID。

DetextVideoURL

String

字幕消去済み動画の URL。

DetextVideoMediaId

String

字幕消去済み動画の ID。

字幕翻訳

OriginalSubtitleMediaId

String

ソース SRT ファイルの ID。

OriginalSubtitleURL

String

ソース SRT ファイルの URL。

TranslatedSubtitleMediaId

String

翻訳済み SRT ファイルの ID。

TranslatedSubtitleURL

String

翻訳済み SRT ファイルの URL。

TranslatedText

String

翻訳済みテキスト。

TranslatedTextArray

String

複数の字幕入力に対する翻訳済みテキストの配列。

音声翻訳

SpeechTranslatedSubtitleMediaId

String

出力動画の字幕表示用の SRT ファイル ID。

SpeechTranslatedSubtitleURL

String

出力動画の字幕表示用の SRT ファイル URL。

SpeechTranslatedSubtitleURLSigned

String

出力動画の字幕表示用の署名付き SRT ファイル URL。

SpeechTranslatedSubtitleMediaIdForFix

String

翻訳修正用の SRT ファイル ID。

SpeechTranslatedSubtitleURLForFix

String

翻訳修正用の SRT ファイル URL。

SpeechBilingualSubtitleMediaId

String

バイリンガル SRT ファイル ID。

SpeechBilingualSubtitleURL

String

バイリンガル SRT ファイル URL。

SpeechTranslationJobId

String

後編集用の音声翻訳タスク ID。

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****"
}

複数ターゲット言語

パラメーター

タイプ

説明

DetextVideoURL

String

字幕除去済み動画の URL。

DetextVideoMediaId

String

字幕除去済み動画の ID。

VideoTranslationAiResultMap

JSON

翻訳先の言語ごとにグループ化された翻訳結果。各キーは言語コード (例: en) で、値にはその言語の翻訳結果パラメーターが含まれます。

VideoTranslationAiResultMap

カテゴリ

パラメーター

タイプ

説明

共通

MediaURL

String

ターゲット言語の出力メディアアセット URL。

MediaId

String

ターゲット言語の出力メディアアセット ID。

字幕翻訳

OriginalSubtitleMediaId

String

ソース SRT ファイルの ID。

OriginalSubtitleURL

String

ソース SRT ファイルの URL。

TranslatedSubtitleMediaId

String

翻訳済み SRT ファイルの ID。

TranslatedSubtitleURL

String

翻訳済み SRT ファイルの URL。

TranslatedText

String

翻訳済みテキスト。

TranslatedTextArray

String

複数の字幕エントリに対する翻訳済みテキストの配列。

音声翻訳

SpeechTranslatedSubtitleMediaId

String

出力動画の字幕表示用の SRT ファイル ID。

SpeechTranslatedSubtitleURL

String

出力動画の字幕表示用の SRT ファイル URL。

SpeechTranslatedSubtitleURLSigned

String

出力動画の字幕表示用の署名付き SRT ファイル URL。

SpeechTranslatedSubtitleMediaIdForFix

String

翻訳修正用の SRT ファイル ID。

SpeechTranslatedSubtitleURLForFix

String

翻訳修正用の署名付き SRT ファイル URL。

SpeechBilingualSubtitleMediaId

String

バイリンガル出力 ID。

SpeechBilingualSubtitleURL

String

バイリンガル出力 URL。

SpeechTranslationJobId

String

後編集用の音声翻訳タスク ID。

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"
}

シナリオ例

後編集を伴う音声翻訳

生成された SRT ファイルを修正し、再送信して翻訳出力を改善します。

重要

リップシンク翻訳は音声出力の修正のみをサポートします。口の動きの後編集は利用できません。

手順

  1. 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
         }
       }
  2. タスク結果を取得します。レスポンスには以下が含まれます:

    フィールド

    説明

    MediaId

    出力メディアアセット ID。

    TranslatedAudioMediaId

    翻訳済み音声ファイルの ID。

    SpeechTranslatedSubtitleURL

    出力動画の字幕表示用の翻訳済み SRT ファイル URL。

    SpeechTranslatedSubtitleURLSigned

    翻訳済み SRT ファイルの署名付き URL。

    SpeechTranslatedSubtitleURLForFix

    翻訳修正用の SRT ファイルの署名付き URL。

    音声翻訳 ジョブ ID

    音声翻訳タスクの ID です。再送信時にこの値を OriginalJobId に使用します。

       {
         "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*****"
       }
  3. SpeechTranslatedSubtitleURLForFix から SRT ファイルをダウンロードし、内容を修正して、タスクを再送信します。システムは、修正された字幕に基づいて出力を再生成します。

    重要

    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"
             }
           }
         }
       }

後編集マーク

重要

字幕行では、コンテンツとポストエディットマークの両方を空 (スペースやタブ文字を含む) にすることはできません。音声を変更せずに空の行を表示するには、行に <--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 を使用して、ホットワードのマッピングを定義し、文字起こしと翻訳の精度を向上させます。

仕組み

image

カスタムホットワードライブラリは以下を提供します:

  • 用語の翻訳を定義:特定の用語をどのように翻訳するかを指定します。例えば、「Intelligent Media Services」を「IMS」にマッピングしたり、「YYDS」(「永遠の神」を意味する中国のインターネットスラング) を「The GOAT」にマッピングしたりします。

  • 認識精度の向上:地名、製品名、同音異義語、珍しい単語など、業界固有の用語の認識を向上させます。

API リファレンス:

コード例

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 {

    // 環境変数から AccessKey 認証情報を取得します。
    static String ak = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String sk = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    // エンドポイントとリージョンを指定します。
    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("Name", "Description", 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);
        }
    }
}

参考

課金

料金詳細については、「動画翻訳の課金」をご参照ください。