Todos os produtos
Search
Central de documentação

Intelligent Media Services:Parâmetros de tradução de vídeo

Última atualização: Jun 28, 2026

Use SubmitVideoTranslationJob para enviar tarefas de tradução de vídeo e GetSmartHandleJob para recuperar os resultados. Este tópico aborda os parâmetros de solicitação e resposta de ambas as operações.

Disponibilidade

Tipo de tradução

Regiões suportadas

Tradução de legendas

China (Shanghai), China (Beijing), China (Shenzhen), China (Hangzhou), Singapura, EUA (Silicon Valley)

Tradução de fala

China (Shanghai), China (Beijing), China (Shenzhen), China (Hangzhou), Singapura, EUA (Silicon Valley)

Tradução com sincronia labial

China (Shanghai), Singapura

SubmitVideoTranslationJob

Importante

Para distinguir os tipos de tradução, configure os seguintes parâmetros booleanos:

  • Tradução de legendas: defina NeedSpeechTranslate e NeedFaceTranslate como false. Configure as opções de legenda em SubtitleTranslate.

  • Tradução de fala: defina NeedSpeechTranslate como true e NeedFaceTranslate como false. Configure as opções de fala em SpeechTranslate.

  • Tradução com sincronia labial: defina NeedFaceTranslate como true e NeedSpeechTranslate como false. Configure as opções de sincronia labial em FaceTranslate.

Parâmetro

Tipo

Obrigatório

Descrição

InputConfig

String

Sim

Configurações de entrada em formato JSON.

OutputConfig

String

Sim

Configurações de saída em formato JSON.

EditingConfig

String

Sim

Configurações de tradução em formato JSON.

Title

String

Não

Nome da tarefa.

Description

String

Não

Descrição da tarefa.

UserData

String

Não

Informações personalizadas em formato JSON. Comprimento máximo: 512 caracteres. Suporta configuração de URL de callback.

InputConfig

Parâmetro

Tipo

Obrigatório

Descrição

Type

String

Sim

Tipo de entrada. Valores válidos: Video, Audio, Subtitle. Consulte Restrições de tipo de entrada.

Video

String

Condicional

ID ou URL do arquivo de vídeo. Obrigatório quando Type é Video. Aceita um ID de ativo de mídia, uma URL do OSS na conta atual do Alibaba Cloud ou uma URL publicamente acessível.

Audio

String

Condicional

ID ou URL do arquivo de áudio. Obrigatório quando Type é Audio. Aceita um ID de ativo de mídia, uma URL do OSS na conta atual do Alibaba Cloud ou uma URL publicamente acessível. Formatos suportados: MP3, WAV.

Subtitle

String

Condicional

ID ou URL do arquivo de legenda. Obrigatório quando Type é Subtitle. Aceita um ID de ativo de mídia, uma URL do OSS na conta atual do Alibaba Cloud ou uma URL publicamente acessível. Formato suportado: SRT.

Restrições de tipo de entrada

Tipo de tradução

Tipos de entrada suportados

Tradução de legendas (NeedSpeechTranslate=false, NeedFaceTranslate=false)

Vídeo, Legenda

Tradução de fala (NeedSpeechTranslate=true)

Vídeo, Áudio

Tradução com sincronia labial (NeedFaceTranslate=true)

Apenas vídeo

OutputConfig

Parâmetro

Tipo

Obrigatório

Descrição

OutputTarget

String

Não

Destino de saída. Padrão: OSS. Valores válidos: OSS (salvar no OSS), VOD (salvar no ApsaraVideo VOD).

MediaURL

String

Sim

URL do OSS na conta atual do Alibaba Cloud. O caminho deve incluir a extensão do arquivo. Extensões suportadas: mp4 (quando InputConfig.Type=Video), wav (quando InputConfig.Type=Audio), srt (quando InputConfig.Type=Subtitle).

StorageLocation

String

Condicional

Obrigatório quando OutputTarget é VOD. Especifique o local de armazenamento sem prefixos de protocolo como http:// ou https://. Exemplo: outin-***<b>c7d2a3811eb83da00163e0</b>***.oss-cn-shanghai.aliyuncs.com.

FileName

String

Condicional

Obrigatório quando OutputTarget é VOD. Nome do arquivo com extensão. Extensões suportadas: mp4, wav, srt.

Width

Integer

Não

Largura do vídeo de saída em pixels. O padrão é a largura do vídeo de source.

Height

Integer

Não

Altura do vídeo de saída em pixels. O padrão é a altura do vídeo de source.

Video

JSONObject

Não

Configurações do vídeo de saída, como definições de CRF e codec. Exemplo: {"Crf": 27}.

EditingConfig

Parâmetro

Tipo

Obrigatório

Descrição

SourceLanguage

String

Sim

Código do idioma de source (por exemplo, zh). Consulte Valores válidos de SourceLanguage.

TargetLanguage

String

Sim

Código do idioma de destino. Separe vários idiomas por vírgulas. Exemplo: en,ja,id. Consulte Valores válidos de TargetLanguage.

DetextArea

String

Não

Configuração de remoção de legendas. Se não especificado, as legendas originais são mantidas. Valores válidos: Auto (detectar automaticamente a área da legenda) ou um array bidimensional [[x, y, width, height], ...] que especifica uma ou mais áreas de remoção. No array, x representa a proporção da distância horizontal entre o canto superior esquerdo da área e o canto superior esquerdo do vídeo; y, a proporção da distância vertical; width, a proporção da largura; e height, a proporção da altura. Todos os valores variam de 0 a 1.

SupportEditing

Boolean

Não

Ativa a pós-edição para corrigir traduções. Padrão: false.

BilingualSubtitle

Boolean

Não

Gera legendas bilíngues no vídeo de saída. Suportado pelos três tipos de tradução. Padrão: false.

SubtitleTranslate

String

Não

Configurações de tradução de legendas em formato JSON. Obrigatório para tradução de legendas.

NeedSpeechTranslate

Boolean

Não

Ativa a tradução de fala. Padrão: false.

SpeechTranslate

String

Não

Configurações de tradução de fala em formato JSON. A tradução de fala é executada quando NeedSpeechTranslate é true ou quando este parâmetro é especificado.

NeedFaceTranslate

Boolean

Não

Ativa a tradução com sincronia labial. Padrão: false.

FaceTranslate

String

Não

Configurações de tradução com sincronia labial em formato JSON. A tradução com sincronia labial é executada quando NeedFaceTranslate é true ou quando este parâmetro é especificado.

TextSource

String

Não

Método de source da legenda. Consulte Valores válidos de TextSource.

CustomParameter

String

Não

Parâmetros personalizados para controlar os efeitos da tradução de vídeo. Consulte CustomParameter.

HotwordLibraryIdList

String

Não

IDs separados por vírgulas de bibliotecas de palavras-chave. Exemplo: "**<b>b4549d46c88681030f6e</b><b>,</b><b>549d46c88b4681030f6e</b>**". Consulte Bibliotecas personalizadas de palavras-chave.

FECanvas

JSON

Não

Dimensões da tela de visualização do frontend para dimensionamento adaptativo da fonte da legenda. Exemplo: {"Width": 1080, "Height": 1920}. O tamanho da fonte renderizada é calculado assim: FontSize x Math.min(outputWidth/feWidth, outputHeight/feHeight). Por exemplo, com FECanvas={"Width": 1080, "Height": 1920}, FontSize=100 e resolução de saída 720x1280, o FontSize renderizado = 100 x Math.min(720/1080, 1280/1920) = 67.

Para gerar um vídeo de saída sem legendas, defina SubtitleTrackClip.FontSize como 0 .

Valores válidos de SourceLanguage

Tradução de legendas (TextSource=OCR ou OCR_ASR)

Tradução de legendas (TextSource=ASR)

Origem SRT externa

Tradução de fala

Tradução com sincronia labial

zh (Chinês), en (Inglês)

zh (Chinês), en (Inglês), fr (Francês), tr (Turco)

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

Igual à origem SRT externa

Igual à origem SRT externa

Valores válidos de TargetLanguage

Tradução de legendas:

zh (Chinês), zh-tw (Chinês Tradicional), en (Inglês), ja (Japonês), id (Indonésio), es (Espanhol), pt (Português), ar (Árabe), fr (Francês), tr (Turco), yue (Cantonês), de (Alemão), ko (Coreano), ru (Russo), th (Tailandês), vi (Vietnamita), ms (Malaio)

Dialetos chineses: sichuan (Sichuan), dongbei (Nordeste), henan (Henan), shanghai (Xangai), tianjin (Tianjin), beijing (Pequim), chongqing (Chongqing), hunan (Hunan), taiwan (Hakka Chinês), shanxi (Shanxi), shaanxi (Shaanxi)

Tradução de fala:

zh (Chinês), zh-tw (Chinês Tradicional), en (Inglês), ja (Japonês), ko (Coreano), yue (Cantonês), de (Alemão), fr (Francês), es (Espanhol), ar (Árabe), tr (Turco), ru (Russo), pt (Português), vi (Vietnamita), ms (Malaio), th (Tailandês), id (Indonésio)

Dialetos chineses: sichuan (Sichuan), tianjin (Tianjin)

Tradução com sincronia labial:

Apenas en (Inglês)

Valores válidos de TextSource

Valor

Descrição

Padrão para

ASR

Reconhece legendas por meio de Reconhecimento Automático de Fala (ASR).

-

OCR

Reconhece legendas por meio de Reconhecimento Óptico de Caracteres (OCR). Defina a área de reconhecimento por meio de OcrArea.

Tradução de legendas

OCR_ASR

Prioriza o OCR. Se o OCR falhar, reverte para ASR. Defina a área de reconhecimento por meio de OcrArea.

Tradução de fala e com sincronia labial

ALL

Prioriza o texto e a linha do tempo transcritos por ASR e refina com OCR para corrigir imprecisões. Disponível apenas para tradução de legendas.

-

SubtitleFile

Usa um arquivo SRT externo especificado em InputConfig.Subtitle.

-

SubtitleTranslate

Parâmetro

Tipo

Obrigatório

Descrição

OcrArea

String

Não

Área de reconhecimento OCR. Se não especificado, a área da legenda é detectada automaticamente. Valores válidos: Auto ou um array unidimensional [x, y, width, height] onde x representa a proporção da distância horizontal entre o canto superior esquerdo da área e o canto superior esquerdo do vídeo; y, a proporção da distância vertical; width, a proporção da largura; e height, a proporção da altura. Todos os valores variam de 0 a 1. Diferente de DetextArea, apenas uma única área pode ser especificada.

SubtitleConfig

String

Não

Estilo da legenda de saída em formato JSON. Os parâmetros seguem a especificação SubtitleTrackClip no Timeline. Defina FontSize como 0 para ocultar as legendas.

SpeechTranslate

Parâmetro

Tipo

Obrigatório

Descrição

OcrArea

String

Não

Área de reconhecimento OCR. Mesmo formato de SubtitleTranslate.OcrArea.

CustomSrtType

String

Condicional

Obrigatório se InputConfig.Subtitle for especificado. Especifica o tipo de legenda de entrada. Valores válidos: SourceSrt (idioma de source), TargetSrt (idioma de destino), BilingualSrtSrcFirst (bilíngue, destino abaixo da source), BilingualSrtTgtFirst (bilíngue, source abaixo do destino). Consulte Exemplos de formato SRT.

SubtitleTimeForce

Boolean

Não

Traduz apenas o áudio dentro do intervalo de tempo da legenda. Padrão: false. Válido apenas quando TextSource é OCR ou OCR_ASR.

SubtitleConfig

String

Não

Estilo da legenda de saída. Mesmo formato de SubtitleTranslate.SubtitleConfig.

OriginalJobId

String

Não

ID da tarefa inicial para reenvio de pós-edição. Use o valor SpeechTranslationJobId retornado pela tarefa inicial (quando SupportEditing é true). O resultado da tradução inicial está disponível em SpeechTranslatedSubtitleURL. Modifique o arquivo SRT e passe a URL para InputConfig.Subtitle.

SkipSong

Integer

Não

Ignora a tradução de trechos musicais cantados. Valores válidos: 0 (padrão, traduz toda a fala detectada, incluindo vocais), 1 (identifica e exclui vocais cantados). O algoritmo de detecção de música não é 100% preciso. Defina como 1 apenas quando o vídeo de source contiver canto.

FaceTranslate

Parâmetro

Tipo

Obrigatório

Descrição

OcrArea

String

Não

Área de reconhecimento OCR. Mesmo formato de SubtitleTranslate.OcrArea.

CustomSrtType

String

Condicional

Obrigatório se InputConfig.Subtitle for especificado. Mesmos valores válidos de SpeechTranslate.CustomSrtType.

SubtitleTimeForce

Boolean

Não

Mesmo comportamento de SpeechTranslate.SubtitleTimeForce.

SubtitleConfig

String

Não

Estilo da legenda de saída. Mesmo formato de SubtitleTranslate.SubtitleConfig.

SpeechDurationThres

Float

Não

Duração mínima do segmento em segundos para processamento de sincronia labial. Segmentos mais curtos que este limiar ignoram a sincronia labial. Padrão: 1. Não pode exceder a duração total do vídeo de source.

FacialClarity

Float

Não

Nível de clareza facial. Intervalo válido: 0 a 1. Padrão: 1 (maior clareza). Use um valor menor para vídeos de source de baixa resolução.

Exemplos de formato SRT

Para tradução de chinês para inglês:

SourceSrt (apenas idioma de source):

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

TargetSrt (apenas idioma de destino):

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

BilingualSrtSrcFirst (destino abaixo da source):

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

BilingualSrtTgtFirst (source abaixo do destino):

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

CustomParameter

Valor

Descrição

--add -dl

Use quando o áudio de entrada contiver vários idiomas. Por exemplo, em uma tarefa de tradução de coreano para francês, segmentos em inglês na entrada são traduzidos para francês. Em tarefas de chinês para inglês com entrada mista de chinês e inglês, não use este parâmetro porque a entrada em inglês é usada diretamente na saída.

Código de exemplo

Tradução de legendas

Entrada de arquivo de legenda
Importante

A entrada de arquivo SRT é cobrada com base nos preços de tradução de texto.

{
  "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"
  }
}
Entrada de arquivo de vídeo
{
  "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"
  }
}
Entrada de arquivos de vídeo e legenda
{
  "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"
  }
}

Tradução de fala

Entrada de arquivo de vídeo
{
  "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"
  }
}
Entrada de arquivos de vídeo e legenda
{
  "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"
  }
}
Entrada de arquivo de áudio
{
  "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"
  }
}

Tradução com sincronia labial

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

Parâmetros de resposta AiResult

Único idioma de destino

Categoria Parâmetro Tipo Descrição
Comum EditingProjectId String ID do projeto de pós-edição.
MediaURL String URL do ativo de mídia de saída.
MediaId String ID do ativo de mídia de saída.
DetextVideoURL String URL do vídeo com legendas removidas.
DetextVideoMediaId String ID do vídeo com legendas removidas.
Tradução de legendas OriginalSubtitleMediaId String ID do arquivo SRT de source.
OriginalSubtitleURL String URL do arquivo SRT de source.
TranslatedSubtitleMediaId String ID do arquivo SRT traduzido.
TranslatedSubtitleURL String URL do arquivo SRT traduzido.
TranslatedText String Texto traduzido.
TranslatedTextArray String Array de texto traduzido para múltiplas entradas de legendas.
Tradução de fala SpeechTranslatedSubtitleMediaId String ID do arquivo SRT para exibição de legendas no vídeo de saída.
SpeechTranslatedSubtitleURL String URL do arquivo SRT para exibição de legendas no vídeo de saída.
SpeechTranslatedSubtitleURLSigned String URL assinada do arquivo SRT para exibição de legendas no vídeo de saída.
SpeechTranslatedSubtitleMediaIdForFix String ID do arquivo SRT para correção de tradução.
SpeechTranslatedSubtitleURLForFix String URL do arquivo SRT para correção de tradução.
SpeechBilingualSubtitleMediaId String ID do arquivo SRT bilíngue.
SpeechBilingualSubtitleURL String URL do arquivo SRT bilíngue.
SpeechTranslationJobId String ID da tarefa de tradução de fala para pós-edição.
TranslatedAudioMediaId String ID do arquivo de áudio traduzido.
TranslatedAudioMediaURL String URL do arquivo de áudio traduzido.
Tradução com sincronia labial FaceTranslationMediaId String ID do arquivo de vídeo com sincronia labial.

Resposta de exemplo:

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

Múltiplos idiomas de destino

Parâmetro

Tipo

Descrição

DetextVideoURL

String

URL do vídeo com legendas removidas.

DetextVideoMediaId

String

ID do vídeo com legendas removidas.

VideoTranslationAiResultMap

JSON

Saídas de tradução agrupadas por idioma de destino. Cada chave é um código de idioma (por exemplo, en), e o valor contém os parâmetros do resultado da tradução para esse idioma.

VideoTranslationAiResultMap
Categoria Parâmetro Tipo Descrição
Comum MediaURL String URL do ativo de mídia de saída para o idioma de destino.
MediaId String ID do ativo de mídia de saída para o idioma de destino.
Tradução de legendas OriginalSubtitleMediaId String ID do arquivo SRT de source.
OriginalSubtitleURL String URL do arquivo SRT de source.
TranslatedSubtitleMediaId String ID do arquivo SRT traduzido.
TranslatedSubtitleURL String URL do arquivo SRT traduzido.
TranslatedText String Texto traduzido.
TranslatedTextArray String Array de texto traduzido para múltiplas entradas de legendas.
Tradução de fala SpeechTranslatedSubtitleMediaId String ID do arquivo SRT para exibição de legendas no vídeo de saída.
SpeechTranslatedSubtitleURL String URL do arquivo SRT para exibição de legendas no vídeo de saída.
SpeechTranslatedSubtitleURLSigned String URL assinada do arquivo SRT para exibição de legendas no vídeo de saída.
SpeechTranslatedSubtitleMediaIdForFix String ID do arquivo SRT para correção de tradução.
SpeechTranslatedSubtitleURLForFix String URL assinada do arquivo SRT para correção de tradução.
SpeechBilingualSubtitleMediaId String ID da saída bilíngue.
SpeechBilingualSubtitleURL String URL da saída bilíngue.
SpeechTranslationJobId String ID da tarefa de tradução de fala para pós-edição.
TranslatedAudioMediaId String ID do arquivo de áudio traduzido.
TranslatedAudioMediaURL String URL do arquivo de áudio traduzido.
Tradução com sincronia labial FaceTranslationMediaId String ID do arquivo de vídeo com sincronia labial.
Resposta de exemplo
{
  "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"
}

Exemplos de cenários

Tradução de fala com pós-edição

Corrija o arquivo SRT gerado e reenvie-o para refinar a saída da tradução.

Importante

A tradução com sincronia labial suporta correções apenas na saída de voz. A pós-edição dos movimentos labiais não está disponível.

Procedimento

  1. Envie uma tarefa de tradução de fala com SupportEditing definido como 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. Recupere o resultado da tarefa. A resposta inclui:

    Campo

    Descrição

    MediaId

    ID do ativo de mídia de saída.

    TranslatedAudioMediaId

    ID do arquivo de áudio traduzido.

    SpeechTranslatedSubtitleURL

    URL do arquivo SRT traduzido para exibição de legendas no vídeo de saída.

    SpeechTranslatedSubtitleURLSigned

    URL assinada do arquivo SRT traduzido.

    SpeechTranslatedSubtitleURLForFix

    URL assinada do arquivo SRT para correção de tradução.

    SpeechTranslationJobId

    ID da tarefa de tradução de fala. Use este valor para OriginalJobId no reenvio.

       {
         "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. Baixe o arquivo SRT de SpeechTranslatedSubtitleURLForFix, modifique o conteúdo e reenvie a tarefa. O sistema regenera a saída com base nas legendas modificadas.

    Adicione marcas de pós-edição ao arquivo SRT para controlar como cada segmento é tratado.
    Importante

    O parâmetro InputConfig.Subtitle deve conter o arquivo corrigido manualmente, que corresponde à versão modificada do arquivo de 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"
             }
           }
         }
       }

Marcas de pós-edição

Importante

Uma linha de legenda não pode ter tanto o conteúdo quanto a marca de pós-edição vazios (incluindo espaços e caracteres de tabulação). Para exibir uma linha vazia sem alterar o áudio, adicione <--onlymodifytext> à linha.

Marca

Efeito

Descrição

<--copy>

Usar áudio original

Substitui o áudio dentro do intervalo de tempo pelo áudio original do vídeo de source.

<--fsttran>

Usar tradução inicial

Substitui o áudio dentro do intervalo de tempo pelo resultado da tradução inicial.

<--mute>

Silenciar orador

Silencia a voz do orador dentro do intervalo de tempo.

<--mute_all>

Silenciar todo o áudio

Silencia todo o áudio dentro do intervalo de tempo.

<--onlymodifytext>

Modificar apenas texto

Altera o texto da legenda exibida sem alterar o áudio.

Exemplo de arquivo 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.

Bibliotecas personalizadas de palavras-chave

Use EditingConfig.HotwordLibraryIdList para definir mapeamentos de palavras-chave e melhorar a precisão da transcrição e tradução.

Como funciona

image

Uma biblioteca personalizada de palavras-chave oferece:

  • Definição de traduções de termos: especifique como termos específicos devem ser traduzidos. Por exemplo, mapeie "Intelligent Media Services" para "IMS".

  • Melhoria na precisão do reconhecimento: aprimore o reconhecimento de termos específicos da indústria, incluindo localizações geográficas, nomes de produtos, homófonos e palavras incomuns.

Referência da API:

Exemplo de código

Dependências 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>

Crie e use uma biblioteca de palavras-chave:

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);
        }
    }
}

Referências

Faturamento

Para detalhes sobre preços, consulte Faturamento da tradução de vídeo.