Tous les produits
Search
Centre de documentation

Intelligent Media Services:Video translation parameters

Dernière mise à jour :Aug 11, 2026

Utilisez l'opération SubmitVideoTranslationJob pour soumettre des tâches de traduction vidéo et l'opération GetSmartHandleJob pour en récupérer les résultats. Cette rubrique détaille les paramètres de requête et de réponse pour ces deux opérations.

Disponibilité

Type de traduction Régions prises en charge
Traduction de sous-titres Chine (Shanghai), Chine (Pékin), Chine (Shenzhen), Chine (Hangzhou), Singapour, États-Unis (Silicon Valley)
Traduction vocale Chine (Shanghai), Chine (Pékin), Chine (Shenzhen), Chine (Hangzhou), Singapour, États-Unis (Silicon Valley)
Traduction avec synchronisation labiale Chine (Shanghai), Singapour

SubmitVideoTranslationJob

Important

Pour distinguer les types de traduction, configurez les paramètres booléens suivants :

  • Traduction de sous-titres : définissez les paramètres NeedSpeechTranslate et NeedFaceTranslate sur false. Configurez les paramètres de sous-titrage dans le champ SubtitleTranslate.

  • Traduction vocale : définissez le paramètre NeedSpeechTranslate sur true et le paramètre NeedFaceTranslate sur false. Configurez les paramètres vocaux dans le champ SpeechTranslate.

  • Traduction avec synchronisation labiale : définissez le paramètre NeedFaceTranslate sur true et le paramètre NeedSpeechTranslate sur false. Configurez les paramètres de synchronisation labiale dans le champ FaceTranslate.

Paramètre Type Obligatoire Description
InputConfig String Oui Configurations d'entrée sous forme de chaîne JSON.
OutputConfig String Oui Configurations de sortie sous forme de chaîne JSON.
EditingConfig String Oui Configurations de traduction sous forme de chaîne JSON.
Title String Non Nom de la tâche.
Description String Non Description de la tâche.
UserData String Non Informations personnalisées sous forme de chaîne JSON. Longueur maximale : 512 caractères. Prend en charge la configuration de l'URL de rappel.

InputConfig

Paramètre Type Obligatoire Description
Type String Oui Type d'entrée. Valeurs valides : Video, Audio, Subtitle. Consultez les contraintes relatives aux types d'entrée.
Video String Conditionnel ID ou URL du fichier vidéo. Obligatoire lorsque le paramètre Type est défini sur Video. Accepte un ID de ressource multimédia, une URL OSS associée au compte Alibaba Cloud actuel ou une URL accessible publiquement.
Audio String Conditionnel ID ou URL du fichier audio. Obligatoire lorsque le paramètre Type est défini sur Audio. Accepte un ID de ressource multimédia, une URL OSS associée au compte Alibaba Cloud actuel ou une URL accessible publiquement. Formats pris en charge : MP3, WAV.
Subtitle String Conditionnel ID ou URL du fichier de sous-titres. Obligatoire lorsque le paramètre Type est défini sur Subtitle. Accepte un ID de ressource multimédia, une URL OSS associée au compte Alibaba Cloud actuel ou une URL accessible publiquement. Format pris en charge : SRT.

Contraintes relatives aux types d'entrée

Type de traduction Types d'entrée pris en charge
Traduction de sous-titres (NeedSpeechTranslate=false, NeedFaceTranslate=false) Video, Subtitle
Traduction vocale (NeedSpeechTranslate=true) Video, Audio
Traduction avec synchronisation labiale (NeedFaceTranslate=true) Video uniquement

OutputConfig

Paramètre Type Obligatoire Description
OutputTarget String Non Destination de sortie. Valeur par défaut : OSS. Valeurs valides : OSS (enregistrement dans OSS), VOD (enregistrement dans ApsaraVideo VOD).
MediaURL String Oui URL OSS associée au compte Alibaba Cloud actuel. Le chemin doit inclure l'extension du fichier. Extensions prises en charge : mp4 (lorsque InputConfig.Type=Video), wav (lorsque InputConfig.Type=Audio), srt (lorsque InputConfig.Type=Subtitle).
StorageLocation String Conditionnel Obligatoire lorsque le paramètre OutputTarget est défini sur VOD. Spécifiez l'emplacement de stockage sans préfixes de protocole tels que http:// ou https://. Exemple : outin-***<b>c7d2a3811eb83da00163e0</b>***.oss-cn-shanghai.aliyuncs.com.
FileName String Conditionnel Obligatoire lorsque le paramètre OutputTarget est défini sur VOD. Nom du fichier avec extension. Extensions prises en charge : mp4, wav, srt.
Width Integer Non Largeur de la vidéo de sortie en pixels. Par défaut, la largeur de la vidéo source est conservée.
Height Integer Non Hauteur de la vidéo de sortie en pixels. Par défaut, la hauteur de la vidéo source est conservée.
Video JSONObject Non Configurations de la vidéo de sortie, telles que les paramètres CRF et le codec. Exemple : {"Crf": 27}.

EditingConfig

Paramètre Type Obligatoire Description
SourceLanguage String Oui Code de la langue source (par exemple, zh). Consultez les valeurs valides pour SourceLanguage.
TargetLanguage String Oui Code de la langue cible. Séparez plusieurs langues par des virgules. Exemple : en,ja,id. Consultez les valeurs valides pour TargetLanguage.
DetextArea String Non Configuration de la suppression des sous-titres. Si ce paramètre n'est pas spécifié, les sous-titres sources sont conservés. Valeurs valides : Auto (détection automatique de la zone des sous-titres) ou un tableau à deux dimensions [[x, y, width, height], ...] spécifiant une ou plusieurs zones de suppression. Dans le tableau, x représente le ratio de la distance horizontale entre le coin supérieur gauche de la zone et le coin supérieur gauche de la vidéo, y le ratio de la distance verticale, width le ratio de la largeur et height le ratio de la hauteur. Toutes les valeurs sont comprises entre 0 et 1.
SupportEditing Boolean Non Active la post-édition pour corriger les traductions. Valeur par défaut : false.
BilingualSubtitle Boolean Non Génère des sous-titres bilingues dans la vidéo de sortie. Pris en charge par les trois types de traduction. Valeur par défaut : false.
SubtitleTranslate String Non Configurations de traduction des sous-titres sous forme de chaîne JSON. Obligatoire pour la traduction de sous-titres.
NeedSpeechTranslate Boolean Non Active la traduction vocale. Valeur par défaut : false.
SpeechTranslate String Non Configurations de traduction vocale sous forme de chaîne JSON. La traduction vocale s'exécute lorsque le paramètre NeedSpeechTranslate est défini sur true ou lorsque ce paramètre est spécifié.
NeedFaceTranslate Boolean Non Active la traduction avec synchronisation labiale. Valeur par défaut : false.
FaceTranslate String Non Configurations de traduction avec synchronisation labiale sous forme de chaîne JSON. La synchronisation labiale s'exécute lorsque le paramètre NeedFaceTranslate est défini sur true ou lorsque ce paramètre est spécifié.
TextSource String Non Méthode de source des sous-titres. Consultez les valeurs valides pour TextSource.
CustomParameter String Non Paramètres personnalisés permettant de contrôler les effets de la traduction vidéo. Consultez la section CustomParameter.
HotwordLibraryIdList String Non Liste des IDs de bibliothèques de mots clés, séparés par des virgules. Exemple : "**<b>b4549d46c88681030f6e</b><b>,</b><b>549d46c88b4681030f6e</b>**". Consultez la section Bibliothèques de mots clés personnalisées.
FECanvas JSON Non Dimensions de la toile de prévisualisation frontale pour l'adaptation de la taille de police des sous-titres. Exemple : {"Width": 1080, "Height": 1920}. La taille de police rendue est calculée comme suit : FontSize x Math.min(outputWidth/feWidth, outputHeight/feHeight). Par exemple, avec FECanvas={"Width": 1080, "Height": 1920}, FontSize=100 et une résolution de sortie de 720x1280, la taille de police rendue sera égale à 100 x Math.min(720/1080, 1280/1920) = 67.
Pour produire une vidéo de sortie sans sous-titres, définissez le paramètre SubtitleTrackClip.FontSize sur 0 .

Valeurs valides pour SourceLanguage

Traduction de sous-titres (TextSource=OCR ou OCR_ASR) Traduction de sous-titres (TextSource=ASR) Source SRT externe Traduction vocale Traduction avec synchronisation labiale
zh (chinois), en (anglais) zh (chinois), en (anglais), fr (français), tr (turc) 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 Identique à la source SRT externe Identique à la source SRT externe

Valeurs valides pour TargetLanguage

Traduction de sous-titres :

zh (chinois), zh-tw (chinois traditionnel), en (anglais), ja (japonais), id (indonésien), es (espagnol), pt (portugais), ar (arabe), fr (français), tr (turc), yue (cantonais), de (allemand), ko (coréen), ru (russe), th (thaï), vi (vietnamien), ms (malais)

Dialectes chinois : sichuan (Sichuan), dongbei (Nord-Est), henan (Henan), shanghai (Shanghai), tianjin (Tianjin), beijing (Pékin), chongqing (Chongqing), hunan (Hunan), taiwan (hakka), shanxi (Shanxi), shaanxi (Shaanxi)

Traduction vocale :

zh (chinois), zh-tw (chinois traditionnel), en (anglais), ja (japonais), ko (coréen), yue (cantonais), de (allemand), fr (français), es (espagnol), ar (arabe), tr (turc), ru (russe), pt (portugais), vi (vietnamien), ms (malais), th (thaï), id (indonésien)

Dialectes chinois : sichuan (Sichuan), tianjin (Tianjin)

Traduction avec synchronisation labiale :

en (anglais) uniquement

Valeurs valides pour TextSource

Valeur Description Valeur par défaut pour
ASR Reconnaît les sous-titres via la reconnaissance automatique de la parole (ASR). -
OCR Reconnaît les sous-titres via la reconnaissance optique de caractères (OCR). Définissez la zone de reconnaissance via le paramètre OcrArea. Traduction de sous-titres
OCR_ASR Privilégie l'OCR. En cas d'échec, bascule vers l'ASR. Définissez la zone de reconnaissance via le paramètre OcrArea. Traduction vocale et avec synchronisation labiale
ALL Privilégie le texte et la chronologie transcrits par ASR, puis affine avec l'OCR pour corriger les imprécisions. Disponible uniquement pour la traduction de sous-titres. -
SubtitleFile Utilise un fichier SRT externe spécifié dans le champ InputConfig.Subtitle. -

SubtitleTranslate

Paramètre Type Obligatoire Description
OcrArea String Non Zone de reconnaissance OCR. Si ce paramètre n'est pas spécifié, la zone des sous-titres est détectée automatiquement. Valeurs valides : Auto ou un tableau à une dimension [x, y, width, height]x représente le ratio de la distance horizontale entre le coin supérieur gauche de la zone et le coin supérieur gauche de la vidéo, y le ratio de la distance verticale, width le ratio de la largeur et height le ratio de la hauteur. Toutes les valeurs sont comprises entre 0 et 1. Contrairement au paramètre DetextArea, une seule zone peut être spécifiée.
SubtitleConfig String Non Style des sous-titres de sortie sous forme de chaîne JSON. Les paramètres suivent la spécification SubtitleTrackClip dans la timeline. Définissez le paramètre FontSize sur 0 pour masquer les sous-titres.

SpeechTranslate

Paramètre Type Obligatoire Description
OcrArea String Non Zone de reconnaissance OCR. Même format que le paramètre SubtitleTranslate.OcrArea.
CustomSrtType String Conditionnel Obligatoire si le champ InputConfig.Subtitle est spécifié. Indique le type de sous-titre d'entrée. Valeurs valides : SourceSrt (langue source), TargetSrt (langue cible), BilingualSrtSrcFirst (bilingue, cible sous la source), BilingualSrtTgtFirst (bilingue, source sous la cible). Consultez les exemples de format SRT.
SubtitleTimeForce Boolean Non Traduit uniquement l'audio contenu dans la plage temporelle des sous-titres. Valeur par défaut : false. Valide uniquement lorsque le paramètre TextSource est défini sur OCR ou OCR_ASR.
SubtitleConfig String Non Style des sous-titres de sortie. Même format que le paramètre SubtitleTranslate.SubtitleConfig.
OriginalJobId String Non ID de la tâche initiale pour la resoumission après post-édition. Utilisez la valeur SpeechTranslationJobId renvoyée par la tâche initiale (lorsque le paramètre SupportEditing est défini sur true). Le résultat de la traduction initiale est disponible via le champ SpeechTranslatedSubtitleURL. Modifiez le fichier SRT et transmettez l'URL au champ InputConfig.Subtitle.
SkipSong Integer Non Ignore la traduction des sections musicales chantées. Valeurs valides : 0 (valeur par défaut, traduit toute la parole détectée, y compris les voix chantées), 1 (identifie et exclut les voix chantées). L'algorithme de détection musicale n'est pas précis à 100 %. Définissez ce paramètre sur 1 uniquement si la vidéo source contient du chant.

FaceTranslate

Paramètre Type Obligatoire Description
OcrArea String Non Zone de reconnaissance OCR. Même format que le paramètre SubtitleTranslate.OcrArea.
CustomSrtType String Conditionnel Obligatoire si le champ InputConfig.Subtitle est spécifié. Mêmes valeurs valides que pour le paramètre SpeechTranslate.CustomSrtType.
SubtitleTimeForce Boolean Non Même comportement que le paramètre SpeechTranslate.SubtitleTimeForce.
SubtitleConfig String Non Style des sous-titres de sortie. Même format que le paramètre SubtitleTranslate.SubtitleConfig.
SpeechDurationThres Float Non Durée minimale du segment en secondes pour le traitement de synchronisation labiale. Les segments plus courts que ce seuil ignorent la synchronisation labiale. Valeur par défaut : 1. Ne peut pas dépasser la durée totale de la vidéo source.
FacialClarity Float Non Niveau de netteté du visage. Plage valide : 0 à 1. Valeur par défaut : 1 (netteté maximale). Utilisez une valeur plus faible pour les vidéos source de basse résolution.

Exemples de format SRT

Pour une traduction du chinois vers l'anglais :

SourceSrt (langue source uniquement) :

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

TargetSrt (langue cible uniquement) :

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

BilingualSrtSrcFirst (cible sous la source) :

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

BilingualSrtTgtFirst (source sous la cible) :

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

CustomParameter

Valeur Description
--add -dl À utiliser lorsque l'audio d'entrée contient plusieurs langues. Par exemple, dans une tâche de traduction du coréen vers le français, les segments en anglais présents dans l'entrée seront traduits en français. Pour les tâches de traduction du chinois vers l'anglais avec une entrée mixte chinois-anglais, n'utilisez pas ce paramètre car l'anglais d'entrée est utilisé directement dans la sortie.

Exemples de code

Traduction de sous-titres

Entrée de fichier de sous-titres
Important

L'entrée de fichier SRT est facturée selon les tarifs de la traduction de texte.

{
  "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"
  }
}
Entrée de fichier vidéo
{
  "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"
  }
}
Entrée de fichier vidéo et de sous-titres
{
  "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"
  }
}

Traduction vocale

Entrée de fichier vidéo
{
  "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"
  }
}
Entrée de fichier vidéo et de sous-titres
{
  "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"
  }
}
Entrée de fichier audio
{
  "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"
  }
}

Traduction avec synchronisation labiale

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

Paramètres de réponse AiResult

Langue cible unique

Catégorie Paramètre Type Description
Commun EditingProjectId String ID du projet de post-édition.
MediaURL String URL de la ressource multimédia de sortie.
MediaId String ID de la ressource multimédia de sortie.
DetextVideoURL String URL de la vidéo dont les sous-titres ont été supprimés.
DetextVideoMediaId String ID de la vidéo dont les sous-titres ont été supprimés.
Traduction de sous-titres OriginalSubtitleMediaId String ID du fichier SRT source.
OriginalSubtitleURL String URL du fichier SRT source.
TranslatedSubtitleMediaId String ID du fichier SRT traduit.
TranslatedSubtitleURL String URL du fichier SRT traduit.
TranslatedText String Texte traduit.
TranslatedTextArray String Tableau de textes traduits pour plusieurs entrées de sous-titres.
Traduction vocale SpeechTranslatedSubtitleMediaId String ID du fichier SRT pour l'affichage des sous-titres dans la vidéo de sortie.
SpeechTranslatedSubtitleURL String URL du fichier SRT pour l'affichage des sous-titres dans la vidéo de sortie.
SpeechTranslatedSubtitleURLSigned String URL signée du fichier SRT pour l'affichage des sous-titres dans la vidéo de sortie.
SpeechTranslatedSubtitleMediaIdForFix String ID du fichier SRT pour la correction de la traduction.
SpeechTranslatedSubtitleURLForFix String URL du fichier SRT pour la correction de la traduction.
SpeechBilingualSubtitleMediaId String ID du fichier SRT bilingue.
SpeechBilingualSubtitleURL String URL du fichier SRT bilingue.
SpeechTranslationJobId String ID de la tâche de traduction vocale pour la post-édition.
TranslatedAudioMediaId String ID du fichier audio traduit.
TranslatedAudioMediaURL String URL du fichier audio traduit.
Traduction avec synchronisation labiale FaceTranslationMediaId String ID du fichier vidéo avec synchronisation labiale.

Exemple de réponse :

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

Langues cibles multiples

Paramètre Type Description
DetextVideoURL String URL de la vidéo dont les sous-titres ont été supprimés.
DetextVideoMediaId String ID de la vidéo dont les sous-titres ont été supprimés.
VideoTranslationAiResultMap JSON Sorties de traduction regroupées par langue cible. Chaque clé correspond à un code de langue (par exemple, en), et la valeur contient les paramètres de résultat de traduction pour cette langue.
VideoTranslationAiResultMap
Catégorie Paramètre Type Description
Commun MediaURL String URL de la ressource multimédia de sortie pour la langue cible.
MediaId String ID de la ressource multimédia de sortie pour la langue cible.
Traduction de sous-titres OriginalSubtitleMediaId String ID du fichier SRT source.
OriginalSubtitleURL String URL du fichier SRT source.
TranslatedSubtitleMediaId String ID du fichier SRT traduit.
TranslatedSubtitleURL String URL du fichier SRT traduit.
TranslatedText String Texte traduit.
TranslatedTextArray String Tableau de textes traduits pour plusieurs entrées de sous-titres.
Traduction vocale SpeechTranslatedSubtitleMediaId String ID du fichier SRT pour l'affichage des sous-titres dans la vidéo de sortie.
SpeechTranslatedSubtitleURL String URL du fichier SRT pour l'affichage des sous-titres dans la vidéo de sortie.
SpeechTranslatedSubtitleURLSigned String URL signée du fichier SRT pour l'affichage des sous-titres dans la vidéo de sortie.
SpeechTranslatedSubtitleMediaIdForFix String ID du fichier SRT pour la correction de la traduction.
SpeechTranslatedSubtitleURLForFix String URL signée du fichier SRT pour la correction de la traduction.
SpeechBilingualSubtitleMediaId String ID de la sortie bilingue.
SpeechBilingualSubtitleURL String URL de la sortie bilingue.
SpeechTranslationJobId String ID de la tâche de traduction vocale pour la post-édition.
TranslatedAudioMediaId String ID du fichier audio traduit.
TranslatedAudioMediaURL String URL du fichier audio traduit.
Traduction avec synchronisation labiale FaceTranslationMediaId String ID du fichier vidéo avec synchronisation labiale.
Exemple de réponse
{
  "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"
}

Exemples de scénarios

Traduction vocale avec post-édition

Corrigez le fichier SRT généré et resoumettez la tâche pour affiner le résultat de la traduction.

Important

La traduction avec synchronisation labiale prend en charge uniquement les corrections de la sortie vocale. La post-édition des mouvements labiaux n'est pas disponible.

Procédure

  1. Soumettez une tâche de traduction vocale en définissant le paramètre SupportEditing sur 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. Récupérez le résultat de la tâche. La réponse inclut les éléments suivants :

    Champ Description
    MediaId ID de la ressource multimédia de sortie.
    TranslatedAudioMediaId ID du fichier audio traduit.
    SpeechTranslatedSubtitleURL URL du fichier SRT traduit pour l'affichage des sous-titres dans la vidéo de sortie.
    SpeechTranslatedSubtitleURLSigned URL signée du fichier SRT traduit.
    SpeechTranslatedSubtitleURLForFix URL signée du fichier SRT pour la correction de la traduction.
    SpeechTranslationJobId ID de la tâche de traduction vocale. Utilisez cette valeur pour le paramètre OriginalJobId lors de la resoumission.
       {
         "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. Téléchargez le fichier SRT depuis l'URL SpeechTranslatedSubtitleURLForFix, modifiez son contenu, puis resoumettez la tâche. Le système régénère la sortie en se basant sur les sous-titres modifiés.

    Ajoutez des marques de post-édition au fichier SRT pour contrôler le traitement de chaque segment.
    Important

    Le paramètre InputConfig.Subtitle doit contenir le fichier corrigé manuellement, qui est la version modifiée du fichier issu de l'URL 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"
             }
           }
         }
       }

Marques de post-édition

Important

Une ligne de sous-titre ne peut pas avoir à la fois le contenu et la marque de post-édition vides (y compris les espaces et les tabulations). Pour afficher une ligne vide sans modifier l'audio, ajoutez la marque <--onlymodifytext> à la ligne.

Marque Effet Description
<--copy> Utiliser l'audio original Remplace l'audio dans la plage temporelle par l'audio original de la vidéo source.
<--fsttran> Utiliser la traduction initiale Remplace l'audio dans la plage temporelle par le résultat de la traduction initiale.
<--mute> Couper le son de l'orateur Coupe le son de la voix de l'orateur dans la plage temporelle.
<--mute_all> Couper tout l'audio Coupe tout l'audio dans la plage temporelle.
<--onlymodifytext> Modifier le texte uniquement Modifie le texte des sous-titres affichés sans changer l'audio.

Exemple de fichier 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.

Bibliothèques de mots clés personnalisées

Utilisez le paramètre EditingConfig.HotwordLibraryIdList pour définir des mappages de mots clés et améliorer la précision de la transcription et de la traduction.

Fonctionnement

image

Une bibliothèque de mots clés personnalisée permet de :

  • Définir les traductions de termes : spécifiez comment certains termes doivent être traduits. Par exemple, mappez « Intelligent Media Services » sur « IMS ».

  • Améliorer la précision de la reconnaissance : optimisez la reconnaissance des termes spécifiques à un secteur, notamment les lieux géographiques, les noms de produits, les homophones et les mots peu courants.

Référence API :

Exemple de code

Dépendances 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>

Créer et utiliser une bibliothèque de mots clés :

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 {

    // Obtain AccessKey credentials from environment variables.
    static String ak = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String sk = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    // Specify the endpoint and 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];

            // Add translation results in multiple target languages.
            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());
        }

        // Create a hotword library.
        String hotwordLibraryId = createHotwordLibrary("Name", "Description", hotwords);

        // Retrieve details about a specific hotword library.
        getHotwordLibrary(hotwordLibraryId);

        // List all hotword libraries.
        listHotwordLibraries();
    }

    public static void testVideoTranslation() throws ClientException {

        // Set HotwordLibraryIdList in EditingConfig to the ID of the hotword library.
        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" +
                "}";

        // Set HotwordLibraryIdList in EditingConfig to the ID of the hotword library.
        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);
        }
    }
}

Références

Facturation

Pour plus d'informations sur les tarifs, consultez la page Facturation de la traduction vidéo.