Iniciar Tradução
curl --request POST \
--url https://api.voicecheap.ai/v1/translate \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"targetLanguage": "<string>",
"originalLanguage": "<string>",
"projectName": "<string>",
"webhookUrl": "<string>",
"numberOfSpeakers": "<string>",
"brandVocabulary": "<string>",
"removeFillerWords": true,
"sourceSrt": "<string>",
"keepBackgroundMusic": true,
"keepOriginalVoice": true,
"originalVoiceVolume": 123,
"voiceIsolatorOption": "<string>",
"subtitles": true,
"subtitlesSource": "<string>",
"lipSyncMode": "<string>",
"activeSpeakerDetectionEnabled": true,
"lipsyncPro": true,
"voiceMode": "<string>",
"voiceId": "<string>",
"voiceCloningSettings": {
"stability": 123,
"similarity": 123,
"speakerBoost": 123
},
"translationTimeSkips": "<string>"
}
'import requests
url = "https://api.voicecheap.ai/v1/translate"
payload = {
"targetLanguage": "<string>",
"originalLanguage": "<string>",
"projectName": "<string>",
"webhookUrl": "<string>",
"numberOfSpeakers": "<string>",
"brandVocabulary": "<string>",
"removeFillerWords": True,
"sourceSrt": "<string>",
"keepBackgroundMusic": True,
"keepOriginalVoice": True,
"originalVoiceVolume": 123,
"voiceIsolatorOption": "<string>",
"subtitles": True,
"subtitlesSource": "<string>",
"lipSyncMode": "<string>",
"activeSpeakerDetectionEnabled": True,
"lipsyncPro": True,
"voiceMode": "<string>",
"voiceId": "<string>",
"voiceCloningSettings": {
"stability": 123,
"similarity": 123,
"speakerBoost": 123
},
"translationTimeSkips": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
targetLanguage: '<string>',
originalLanguage: '<string>',
projectName: '<string>',
webhookUrl: '<string>',
numberOfSpeakers: '<string>',
brandVocabulary: '<string>',
removeFillerWords: true,
sourceSrt: '<string>',
keepBackgroundMusic: true,
keepOriginalVoice: true,
originalVoiceVolume: 123,
voiceIsolatorOption: '<string>',
subtitles: true,
subtitlesSource: '<string>',
lipSyncMode: '<string>',
activeSpeakerDetectionEnabled: true,
lipsyncPro: true,
voiceMode: '<string>',
voiceId: '<string>',
voiceCloningSettings: {stability: 123, similarity: 123, speakerBoost: 123},
translationTimeSkips: '<string>'
})
};
fetch('https://api.voicecheap.ai/v1/translate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voicecheap.ai/v1/translate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'targetLanguage' => '<string>',
'originalLanguage' => '<string>',
'projectName' => '<string>',
'webhookUrl' => '<string>',
'numberOfSpeakers' => '<string>',
'brandVocabulary' => '<string>',
'removeFillerWords' => true,
'sourceSrt' => '<string>',
'keepBackgroundMusic' => true,
'keepOriginalVoice' => true,
'originalVoiceVolume' => 123,
'voiceIsolatorOption' => '<string>',
'subtitles' => true,
'subtitlesSource' => '<string>',
'lipSyncMode' => '<string>',
'activeSpeakerDetectionEnabled' => true,
'lipsyncPro' => true,
'voiceMode' => '<string>',
'voiceId' => '<string>',
'voiceCloningSettings' => [
'stability' => 123,
'similarity' => 123,
'speakerBoost' => 123
],
'translationTimeSkips' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.voicecheap.ai/v1/translate"
payload := strings.NewReader("{\n \"targetLanguage\": \"<string>\",\n \"originalLanguage\": \"<string>\",\n \"projectName\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"numberOfSpeakers\": \"<string>\",\n \"brandVocabulary\": \"<string>\",\n \"removeFillerWords\": true,\n \"sourceSrt\": \"<string>\",\n \"keepBackgroundMusic\": true,\n \"keepOriginalVoice\": true,\n \"originalVoiceVolume\": 123,\n \"voiceIsolatorOption\": \"<string>\",\n \"subtitles\": true,\n \"subtitlesSource\": \"<string>\",\n \"lipSyncMode\": \"<string>\",\n \"activeSpeakerDetectionEnabled\": true,\n \"lipsyncPro\": true,\n \"voiceMode\": \"<string>\",\n \"voiceId\": \"<string>\",\n \"voiceCloningSettings\": {\n \"stability\": 123,\n \"similarity\": 123,\n \"speakerBoost\": 123\n },\n \"translationTimeSkips\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.voicecheap.ai/v1/translate")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"targetLanguage\": \"<string>\",\n \"originalLanguage\": \"<string>\",\n \"projectName\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"numberOfSpeakers\": \"<string>\",\n \"brandVocabulary\": \"<string>\",\n \"removeFillerWords\": true,\n \"sourceSrt\": \"<string>\",\n \"keepBackgroundMusic\": true,\n \"keepOriginalVoice\": true,\n \"originalVoiceVolume\": 123,\n \"voiceIsolatorOption\": \"<string>\",\n \"subtitles\": true,\n \"subtitlesSource\": \"<string>\",\n \"lipSyncMode\": \"<string>\",\n \"activeSpeakerDetectionEnabled\": true,\n \"lipsyncPro\": true,\n \"voiceMode\": \"<string>\",\n \"voiceId\": \"<string>\",\n \"voiceCloningSettings\": {\n \"stability\": 123,\n \"similarity\": 123,\n \"speakerBoost\": 123\n },\n \"translationTimeSkips\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voicecheap.ai/v1/translate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"targetLanguage\": \"<string>\",\n \"originalLanguage\": \"<string>\",\n \"projectName\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"numberOfSpeakers\": \"<string>\",\n \"brandVocabulary\": \"<string>\",\n \"removeFillerWords\": true,\n \"sourceSrt\": \"<string>\",\n \"keepBackgroundMusic\": true,\n \"keepOriginalVoice\": true,\n \"originalVoiceVolume\": 123,\n \"voiceIsolatorOption\": \"<string>\",\n \"subtitles\": true,\n \"subtitlesSource\": \"<string>\",\n \"lipSyncMode\": \"<string>\",\n \"activeSpeakerDetectionEnabled\": true,\n \"lipsyncPro\": true,\n \"voiceMode\": \"<string>\",\n \"voiceId\": \"<string>\",\n \"voiceCloningSettings\": {\n \"stability\": 123,\n \"similarity\": 123,\n \"speakerBoost\": 123\n },\n \"translationTimeSkips\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"projectId": "<string>",
"estimatedDuration": 123
}Tradução
Iniciar Tradução
Envie um arquivo de vídeo ou áudio e inicie um novo projeto de tradução
Iniciar Tradução
curl --request POST \
--url https://api.voicecheap.ai/v1/translate \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"targetLanguage": "<string>",
"originalLanguage": "<string>",
"projectName": "<string>",
"webhookUrl": "<string>",
"numberOfSpeakers": "<string>",
"brandVocabulary": "<string>",
"removeFillerWords": true,
"sourceSrt": "<string>",
"keepBackgroundMusic": true,
"keepOriginalVoice": true,
"originalVoiceVolume": 123,
"voiceIsolatorOption": "<string>",
"subtitles": true,
"subtitlesSource": "<string>",
"lipSyncMode": "<string>",
"activeSpeakerDetectionEnabled": true,
"lipsyncPro": true,
"voiceMode": "<string>",
"voiceId": "<string>",
"voiceCloningSettings": {
"stability": 123,
"similarity": 123,
"speakerBoost": 123
},
"translationTimeSkips": "<string>"
}
'import requests
url = "https://api.voicecheap.ai/v1/translate"
payload = {
"targetLanguage": "<string>",
"originalLanguage": "<string>",
"projectName": "<string>",
"webhookUrl": "<string>",
"numberOfSpeakers": "<string>",
"brandVocabulary": "<string>",
"removeFillerWords": True,
"sourceSrt": "<string>",
"keepBackgroundMusic": True,
"keepOriginalVoice": True,
"originalVoiceVolume": 123,
"voiceIsolatorOption": "<string>",
"subtitles": True,
"subtitlesSource": "<string>",
"lipSyncMode": "<string>",
"activeSpeakerDetectionEnabled": True,
"lipsyncPro": True,
"voiceMode": "<string>",
"voiceId": "<string>",
"voiceCloningSettings": {
"stability": 123,
"similarity": 123,
"speakerBoost": 123
},
"translationTimeSkips": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
targetLanguage: '<string>',
originalLanguage: '<string>',
projectName: '<string>',
webhookUrl: '<string>',
numberOfSpeakers: '<string>',
brandVocabulary: '<string>',
removeFillerWords: true,
sourceSrt: '<string>',
keepBackgroundMusic: true,
keepOriginalVoice: true,
originalVoiceVolume: 123,
voiceIsolatorOption: '<string>',
subtitles: true,
subtitlesSource: '<string>',
lipSyncMode: '<string>',
activeSpeakerDetectionEnabled: true,
lipsyncPro: true,
voiceMode: '<string>',
voiceId: '<string>',
voiceCloningSettings: {stability: 123, similarity: 123, speakerBoost: 123},
translationTimeSkips: '<string>'
})
};
fetch('https://api.voicecheap.ai/v1/translate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voicecheap.ai/v1/translate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'targetLanguage' => '<string>',
'originalLanguage' => '<string>',
'projectName' => '<string>',
'webhookUrl' => '<string>',
'numberOfSpeakers' => '<string>',
'brandVocabulary' => '<string>',
'removeFillerWords' => true,
'sourceSrt' => '<string>',
'keepBackgroundMusic' => true,
'keepOriginalVoice' => true,
'originalVoiceVolume' => 123,
'voiceIsolatorOption' => '<string>',
'subtitles' => true,
'subtitlesSource' => '<string>',
'lipSyncMode' => '<string>',
'activeSpeakerDetectionEnabled' => true,
'lipsyncPro' => true,
'voiceMode' => '<string>',
'voiceId' => '<string>',
'voiceCloningSettings' => [
'stability' => 123,
'similarity' => 123,
'speakerBoost' => 123
],
'translationTimeSkips' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.voicecheap.ai/v1/translate"
payload := strings.NewReader("{\n \"targetLanguage\": \"<string>\",\n \"originalLanguage\": \"<string>\",\n \"projectName\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"numberOfSpeakers\": \"<string>\",\n \"brandVocabulary\": \"<string>\",\n \"removeFillerWords\": true,\n \"sourceSrt\": \"<string>\",\n \"keepBackgroundMusic\": true,\n \"keepOriginalVoice\": true,\n \"originalVoiceVolume\": 123,\n \"voiceIsolatorOption\": \"<string>\",\n \"subtitles\": true,\n \"subtitlesSource\": \"<string>\",\n \"lipSyncMode\": \"<string>\",\n \"activeSpeakerDetectionEnabled\": true,\n \"lipsyncPro\": true,\n \"voiceMode\": \"<string>\",\n \"voiceId\": \"<string>\",\n \"voiceCloningSettings\": {\n \"stability\": 123,\n \"similarity\": 123,\n \"speakerBoost\": 123\n },\n \"translationTimeSkips\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.voicecheap.ai/v1/translate")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"targetLanguage\": \"<string>\",\n \"originalLanguage\": \"<string>\",\n \"projectName\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"numberOfSpeakers\": \"<string>\",\n \"brandVocabulary\": \"<string>\",\n \"removeFillerWords\": true,\n \"sourceSrt\": \"<string>\",\n \"keepBackgroundMusic\": true,\n \"keepOriginalVoice\": true,\n \"originalVoiceVolume\": 123,\n \"voiceIsolatorOption\": \"<string>\",\n \"subtitles\": true,\n \"subtitlesSource\": \"<string>\",\n \"lipSyncMode\": \"<string>\",\n \"activeSpeakerDetectionEnabled\": true,\n \"lipsyncPro\": true,\n \"voiceMode\": \"<string>\",\n \"voiceId\": \"<string>\",\n \"voiceCloningSettings\": {\n \"stability\": 123,\n \"similarity\": 123,\n \"speakerBoost\": 123\n },\n \"translationTimeSkips\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voicecheap.ai/v1/translate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"targetLanguage\": \"<string>\",\n \"originalLanguage\": \"<string>\",\n \"projectName\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"numberOfSpeakers\": \"<string>\",\n \"brandVocabulary\": \"<string>\",\n \"removeFillerWords\": true,\n \"sourceSrt\": \"<string>\",\n \"keepBackgroundMusic\": true,\n \"keepOriginalVoice\": true,\n \"originalVoiceVolume\": 123,\n \"voiceIsolatorOption\": \"<string>\",\n \"subtitles\": true,\n \"subtitlesSource\": \"<string>\",\n \"lipSyncMode\": \"<string>\",\n \"activeSpeakerDetectionEnabled\": true,\n \"lipsyncPro\": true,\n \"voiceMode\": \"<string>\",\n \"voiceId\": \"<string>\",\n \"voiceCloningSettings\": {\n \"stability\": 123,\n \"similarity\": 123,\n \"speakerBoost\": 123\n },\n \"translationTimeSkips\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"projectId": "<string>",
"estimatedDuration": 123
}Iniciar Tradução
Crie um novo projeto de tradução enviando um arquivo de vídeo ou áudio. O processo de tradução é executado de forma assíncrona em segundo plano. Use o endpoint de status para acompanhar o progresso e recuperar resultados. Use Obter Detalhes do Projeto quando precisar do histórico da versão traduzida ou do histórico de sincronização labial.Limite de Simultaneidade
Você pode executar até 10 traduções ao mesmo tempo por conta. Se 10 traduções já estiverem em andamento, novas solicitações retornamCONCURRENT_TRANSLATION_LIMIT_REACHED (HTTP 429).
Solicitação
Este endpoint aceitamultipart/form-data com um upload de arquivo.
Cabeçalhos
string
obrigatório
Sua chave de API VoiceCheap. Obtenha uma em app.voicecheap.ai/page-api.
Parâmetros do corpo
file
obrigatório
O arquivo de vídeo ou áudio a ser traduzido.Formatos de vídeo suportados:
video/mp4, video/quicktime, video/x-matroska, video/webm, video/mpegFormatos de áudio suportados: audio/mpeg, audio/wav, audio/mp4, audio/x-m4a, audio/flac, audio/ogg, audio/aac, audio/webmTamanho máximo de arquivo por plano: Beginner 5 GB, Starter 10 GB, Creator 20 GB, Pro 30 GB, Scale 40 GB e Enterprise 60 GB.string
obrigatório
O idioma para o qual o conteúdo será traduzido. Deve estar em letras minúsculas.Valores permitidos (70+):
afrikaans, albanian, amharic, arabic, armenian, assamese, azerbaijani, basque, belarusian, bengali, bosnian, bulgarian, catalan, croatian, czech, danish, dutch, english, british english, estonian, finnish, french, french canadian, galician, german, greek, gujarati, hebrew, hindi, hungarian, icelandic, indonesian, irish, italian, japanese, kannada, kazakh, khmer, korean, lao, latvian, lithuanian, macedonian, malay, malayalam, mandarin, marathi, mongolian, nepali, norwegian, persian, polish, portuguese, brazilian portuguese, punjabi, romanian, russian, serbian, slovak, slovenian, spanish, swahili, swedish, tagalog, tamil, telugu, thai, turkish, ukrainian, urdu, vietnamese, welsh, yoruba, zulustring
O idioma de origem do conteúdo usando códigos de idioma ISO (por exemplo, Padrão:
en, es, fr, de, ja, zh).Altamente recomendado: Deixe este campo vazio para detecção automática.Forneça este parâmetro apenas se tiver 100% de certeza de que o código do idioma está correto e no formato ISO válido. Códigos de idioma incorretos causarão falhas na transcrição. Nossa detecção automática suporta mais de 80 idiomas e é altamente precisa.
auto-detectstring
Um nome personalizado para o projeto. Útil para identificar projetos em seu painel.Padrão: O ID do projeto será usado se não for fornecido.
string
Um endpoint https que recebe a eventos de webhook para este projeto,
substituindo o endpoint configurado em sua conta.Padrão: O endpoint de webhook da conta, quando um estiver configurado.
string
auto-detect ou um número inteiro de 1 a 32. Uma contagem de falantes conhecida pode melhorar a diarização.Padrão: auto-detectstring
Uma matriz de strings JSON de nomes, marcas, siglas ou termos especializados específicos da solicitação. Esses termos são mesclados com o glossário salvo da conta ou da equipe.
boolean
Remova palavras de preenchimento comuns da transcrição de origem antes da tradução.Padrão:
truestring
Uma transcrição SRT existente no idioma de origem.
originalLanguage deve ser explícito quando este campo for fornecido.boolean
Se deve preservar o áudio de fundo na saída.Quando ativado, mantém música de fundo, ambiente, risadas, aplausos e sons de multidão, removendo apenas a voz original (separação de stems). Desative se sua fonte não tiver áudio de fundo.Padrão:
trueboolean
Mantenha o falante original em volume baixo sob a voz traduzida.Padrão:
falsenumber
Volume da voz original de
1 a 70 quando keepOriginalVoice estiver ativado.Padrão: 30string
Modo de isolamento de voz quando
Valores permitidos:
keepBackgroundMusic estiver ativado. Controla a qualidade e as características da separação de voz.Estúdio (Recomendado)
Estúdio (Recomendado)
Nosso processamento de voz padrão, projetado para qualidade de áudio profissional:
- Remove ecos e reverberações
- Limpa imperfeições técnicas
- Produz uma voz clara e nítida
Realista
Realista
Preserva as características naturais do ambiente de gravação:
- Mantém um som mais próximo da gravação original
- Preserva as características ambientais
Esta opção pode criar artefatos ou efeitos inesperados em alguns casos devido à preservação de elementos de fundo.
studio, realisticPadrão: studioboolean
Se deve gerar legendas para o vídeo traduzido.Quando ativado, adiciona legendas limpas em preto e branco no estilo Netflix. Use
subtitlesSource para escolher o texto original (idioma de origem) ou traduzido (idioma de destino). As legendas são sincronizadas automaticamente para uma legibilidade ideal.Nota: Legendas embutidas (hard-burned) exigem FFmpeg com o filtro subtitles (libass). Se não estiver disponível, a API recorrerá à incorporação de uma faixa de legenda em vez de usar o estilo embutido.Padrão: falsestring
Escolha a fonte do texto das legendas quando
subtitles estiver ativado.Valores permitidos: translated, originalPadrão: translatedNota: Se original for selecionado, mas a transcrição original não estiver disponível, as legendas usarão translated como alternativa.string
Aciona o processamento de sincronização labial após a conclusão da dublagem.
standard= Lip Syncpro= Lip Sync Prostudio= Lip Sync Studio
boolean
Ativa a detecção de orador ativo para a execução de sincronização labial solicitada.Padrão:
falseboolean
Seletor de sincronização labial legado mantido para compatibilidade com versões anteriores.Padrão: não ativado (omita o campo para ignorar a sincronização labial)Form-data: Envie valores booleanos como strings
false= Sincronização labial padrão (4 minutos de créditos por 1 minuto de vídeo)true= Lip Sync Pro (9 minutos de créditos por 1 minuto de vídeo)
Duração máxima: 30 minutos por vídeo.Latência: O processamento de sincronização labial normalmente adiciona 2x-4x a duração do vídeo original.
E-mails de conclusão e falha de sincronização labial não são enviados para solicitações acionadas por API. Use o status endpoint para
acompanhar o progresso.
true ou false (por exemplo, -F "lipsyncPro=false").Não combine
lipsyncPro com um lipSyncMode conflitante.string
Estratégia de voz:
cloning ou custom.Padrão: cloningstring
Obrigatório quando
voiceMode é custom. A voz deve pertencer ao proprietário efetivo do projeto. IDs de voz arbitrários ou sem proprietário são rejeitados.object
Ajuste os parâmetros de clonagem de voz para controle avançado sobre a voz gerada. Passe como uma string JSON ao usar form-data. Todos os valores devem estar entre 0 e 1 (com incremento de 0,01).
Valores padrão (equilibrados):Recomendado para evitar a reprodução de sotaque:
Estas configurações aplicam-se apenas quando
voiceMode é cloning.Mostrar propriedades voiceCloningSettings
Mostrar propriedades voiceCloningSettings
number
padrão:"0.60"
Estabilidade da voz (0,00 - 1,00)Determina quão estável é a voz e a aleatoriedade entre cada geração.
- Valores mais baixos permitem uma gama emocional mais ampla, mas podem causar uma fala estranha ou apressada
- Valores mais altos produzem uma saída mais consistente, mas podem soar monótonos
0.60Dica: Para evitar a reprodução de sotaque, use 0.80number
padrão:"0.85"
Similaridade da voz (0,00 - 1,00)Controla o quanto a IA adere à voz original.
- Valores mais altos tornam a voz clonada mais semelhante à original
- Se o áudio original for ruidoso e a similaridade for muito alta, artefatos ou ruído de fundo podem ser transferidos para a voz gerada
0.85Dica: Para evitar a reprodução de sotaque, use 0.20number
padrão:"0.60"
Reforço do orador (0,00 - 1,00)Aumenta a similaridade com o orador original. Este é um aprimoramento sutil que aumenta a semelhança com a voz de origem.Nota: Valores mais altos aumentam o tempo de processamento e a latência.Padrão:
0.60Dica: Para evitar a reprodução de sotaque, use 0.00{
"stability": 0.6,
"similarity": 0.85,
"speakerBoost": 0.6
}
{
"stability": 0.8,
"similarity": 0.2,
"speakerBoost": 0.0
}
string
Uma matriz JSON de intervalos de tempo de origem que devem permanecer no idioma original.Pulos de tempo exigem entrada de vídeo e
[
{ "startTime": 10.2, "endTime": 12.8 }
]
keepBackgroundMusic=true. Eles não podem ser combinados com keepOriginalVoice e não podem sobrepor segmentos de transcrição.Resposta
boolean
obrigatório
Sempre
true para solicitações bem-sucedidasstring
obrigatório
Uma mensagem legível por humanos descrevendo o resultado
string
obrigatório
O identificador único para o projeto de tradução criado. Use este ID para verificar o status.
number
obrigatório
Estimativa aproximada de processamento em minutos. A estimativa atual é de cinco minutos de processamento por minuto iniciado de mídia de origem.
Exemplos
Regras de glossário salvas e instruções de tradução personalizadas da conta ou equipe efetiva são aplicadas automaticamente.
curl -X POST https://api.voicecheap.ai/v1/translate \
-H "x-api-key: vc_your-api-key" \
-F "file=@video.mp4" \
-F "targetLanguage=spanish" \
-F "projectName=My Spanish Translation" \
-F "numberOfSpeakers=2" \
-F 'brandVocabulary=["VoiceCheap","SmartSync"]' \
-F "removeFillerWords=true" \
-F "keepBackgroundMusic=true" \
-F "keepOriginalVoice=false" \
-F "voiceIsolatorOption=studio" \
-F "subtitles=true" \
-F "subtitlesSource=translated" \
-F "lipSyncMode=standard" \
-F "activeSpeakerDetectionEnabled=true"
interface StartTranslationResponse {
success: boolean;
message: string;
projectId: string;
estimatedDuration: number;
}
interface VoiceCloningSettings {
stability: number; // 0.00 - 1.00
similarity: number; // 0.00 - 1.00
speakerBoost: number; // 0.00 - 1.00
}
interface StartTranslationRequest {
targetLanguage: string;
originalLanguage?: string;
projectName?: string;
numberOfSpeakers?: 'auto-detect' | string;
brandVocabulary?: string[];
removeFillerWords?: boolean;
keepBackgroundMusic?: boolean;
keepOriginalVoice?: boolean;
originalVoiceVolume?: number;
voiceMode?: 'cloning' | 'custom';
voiceId?: string;
voiceIsolatorOption?: 'studio' | 'realistic';
subtitles?: boolean;
subtitlesSource?: 'translated' | 'original';
lipSyncMode?: 'standard' | 'pro' | 'studio';
activeSpeakerDetectionEnabled?: boolean;
voiceCloningSettings?: VoiceCloningSettings;
translationTimeSkips?: Array<{ startTime: number; endTime: number }>;
}
async function startTranslation(
file: File,
targetLanguage: string,
options?: {
originalLanguage?: string;
projectName?: string;
numberOfSpeakers?: 'auto-detect' | string;
brandVocabulary?: string[];
removeFillerWords?: boolean;
keepBackgroundMusic?: boolean;
keepOriginalVoice?: boolean;
originalVoiceVolume?: number;
voiceMode?: 'cloning' | 'custom';
voiceId?: string;
voiceIsolatorOption?: 'studio' | 'realistic';
subtitles?: boolean;
subtitlesSource?: 'translated' | 'original';
lipSyncMode?: 'standard' | 'pro' | 'studio';
activeSpeakerDetectionEnabled?: boolean;
voiceCloningSettings?: VoiceCloningSettings;
translationTimeSkips?: Array<{ startTime: number; endTime: number }>;
},
): Promise<StartTranslationResponse> {
const formData = new FormData();
formData.append('file', file);
formData.append('targetLanguage', targetLanguage);
if (options?.projectName) {
formData.append('projectName', options.projectName);
}
if (options?.originalLanguage) {
formData.append('originalLanguage', options.originalLanguage);
}
if (options?.numberOfSpeakers) {
formData.append('numberOfSpeakers', options.numberOfSpeakers);
}
if (options?.brandVocabulary) {
formData.append('brandVocabulary', JSON.stringify(options.brandVocabulary));
}
if (options?.removeFillerWords !== undefined) {
formData.append('removeFillerWords', String(options.removeFillerWords));
}
if (options?.keepBackgroundMusic !== undefined) {
formData.append('keepBackgroundMusic', String(options.keepBackgroundMusic));
}
if (options?.keepOriginalVoice !== undefined) {
formData.append('keepOriginalVoice', String(options.keepOriginalVoice));
}
if (options?.originalVoiceVolume !== undefined) {
formData.append('originalVoiceVolume', String(options.originalVoiceVolume));
}
if (options?.voiceMode) {
formData.append('voiceMode', options.voiceMode);
}
if (options?.voiceId) {
formData.append('voiceId', options.voiceId);
}
if (options?.voiceIsolatorOption) {
formData.append('voiceIsolatorOption', options.voiceIsolatorOption);
}
if (options?.subtitles !== undefined) {
formData.append('subtitles', String(options.subtitles));
}
if (options?.subtitlesSource) {
formData.append('subtitlesSource', options.subtitlesSource);
}
if (options?.lipSyncMode) {
formData.append('lipSyncMode', options.lipSyncMode);
}
if (options?.activeSpeakerDetectionEnabled !== undefined) {
formData.append('activeSpeakerDetectionEnabled', String(options.activeSpeakerDetectionEnabled));
}
if (options?.voiceCloningSettings) {
formData.append('voiceCloningSettings', JSON.stringify(options.voiceCloningSettings));
}
if (options?.translationTimeSkips) {
formData.append('translationTimeSkips', JSON.stringify(options.translationTimeSkips));
}
const response = await fetch('https://api.voicecheap.ai/v1/translate', {
method: 'POST',
headers: {
'x-api-key': 'vc_your-api-key',
},
body: formData,
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'Translation failed');
}
return response.json();
}
// Usage example
const file = document.querySelector<HTMLInputElement>('#fileInput')?.files?.[0];
if (file) {
const result = await startTranslation(file, 'spanish', {
projectName: 'My Spanish Translation',
keepBackgroundMusic: true,
voiceIsolatorOption: 'studio',
subtitles: true,
subtitlesSource: 'translated',
voiceCloningSettings: {
stability: 0.6,
similarity: 0.85,
speakerBoost: 0.6,
},
});
console.log('Project ID:', result.projectId);
}
const formData = new FormData();
formData.append('file', videoFile);
formData.append('targetLanguage', 'spanish');
formData.append('projectName', 'My Spanish Translation');
formData.append('keepBackgroundMusic', 'true');
formData.append('voiceIsolatorOption', 'studio');
formData.append('subtitles', 'true');
formData.append('subtitlesSource', 'translated');
formData.append(
'voiceCloningSettings',
JSON.stringify({
stability: 0.6,
similarity: 0.85,
speakerBoost: 0.6,
}),
);
const response = await fetch('https://api.voicecheap.ai/v1/translate', {
method: 'POST',
headers: {
'x-api-key': 'vc_your-api-key',
},
body: formData,
});
const data = await response.json();
console.log('Project ID:', data.projectId);
import requests
import json
files = {'file': open('video.mp4', 'rb')}
data = {
'targetLanguage': 'spanish',
'projectName': 'My Spanish Translation',
'keepBackgroundMusic': 'true',
'voiceIsolatorOption': 'studio',
'subtitles': 'true',
'subtitlesSource': 'translated',
'voiceCloningSettings': json.dumps({
'stability': 0.60,
'similarity': 0.85,
'speakerBoost': 0.60
})
}
headers = {'x-api-key': 'vc_your-api-key'}
response = requests.post(
'https://api.voicecheap.ai/v1/translate',
headers=headers,
files=files,
data=data
)
result = response.json()
print(f"Project ID: {result['projectId']}")
<?php
$curl = curl_init();
$voiceCloningSettings = json_encode([
'stability' => 0.60,
'similarity' => 0.85,
'speakerBoost' => 0.60
]);
$postFields = [
'file' => new CURLFile('video.mp4'),
'targetLanguage' => 'spanish',
'projectName' => 'My Spanish Translation',
'keepBackgroundMusic' => 'true',
'voiceIsolatorOption' => 'studio',
'subtitles' => 'true',
'subtitlesSource' => 'translated',
'voiceCloningSettings' => $voiceCloningSettings
];
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.voicecheap.ai/v1/translate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postFields,
CURLOPT_HTTPHEADER => [
'x-api-key: vc_your-api-key'
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
echo "Project ID: " . $result['projectId'];
Exemplo de Resposta
{
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "abc123-def456-ghi789",
"estimatedDuration": 15
}
Erros
| Status | Código | Descrição |
|---|---|---|
| 400 | FILE_REQUIRED | Nenhum arquivo foi enviado com a solicitação |
| 400 | INVALID_FILE_TYPE | O tipo de arquivo enviado não é suportado |
| 400 | DURATION_DETECTION_FAILED | Não foi possível detectar a duração do arquivo enviado |
| 400 | INVALID_MULTIPART_REQUEST | Os dados do formulário multipart estão malformados ou excedem os limites de campo |
| 400 | INVALID_BOOLEAN_VALUE | Um parâmetro booleano tem um valor inválido (use “true” ou “false”) |
| 400 | INVALID_JSON_FORMAT | O JSON voiceCloningSettings está malformado |
| 400 | INVALID_BRAND_VOCABULARY | Uma entrada de vocabulário específica da solicitação é inválida |
| 400 | INVALID_SOURCE_SRT | O SRT de origem fornecido está malformado |
| 400 | SOURCE_LANGUAGE_REQUIRED_FOR_SRT | sourceSrt requer um originalLanguage explícito |
| 400 | VOICE_ID_REQUIRED | O modo de vozes personalizadas foi selecionado sem um ID de voz |
| 400 | VOICE_ID_NOT_ALLOWED_WITH_CLONING | Um ID de voz foi combinado com clonagem de voz |
| 400 | VOICE_CLONING_SETTINGS_NOT_ALLOWED | As configurações de clone foram combinadas com o modo de vozes personalizadas |
| 400 | CONFLICTING_LIPSYNC_OPTIONS | lipSyncMode entra em conflito com o lipsyncPro legado |
| 400 | TRANSLATION_TIME_SKIP_CONFLICT | Pulos de tempo entram em conflito com outra opção de áudio |
| 400 | TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND | Pulos de tempo requerem áudio de fundo |
| 400 | TRANSLATION_TIME_SKIP_OUT_OF_RANGE | Um pulo de tempo se estende além da duração da mídia |
| 400 | INVALID_TRANSLATION_TIME_SKIPS | Um pulo de tempo se sobrepõe a um segmento de transcrição |
| 400 | SUBTITLES_NOT_AVAILABLE_FOR_AUDIO | Legendas embutidas foram solicitadas para entrada de áudio |
| 400 | LIPSYNC_NOT_AVAILABLE_FOR_AUDIO | Sincronização labial foi solicitada para entrada de áudio |
| 400 | TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO | Pulos de tempo foram solicitados para entrada de áudio |
| 400 | LIPSYNC_VIDEO_TOO_LONG | Sincronização labial foi solicitada para mídia com duração superior à suportada |
| 413 | FILE_TOO_LARGE | O arquivo enviado excede o limite do plano do usuário |
| 401 | MISSING_API_KEY | A chave de API é necessária |
| 401 | INVALID_API_KEY_FORMAT | A chave de API deve começar com vc_ |
| 401 | INVALID_API_KEY | A chave de API fornecida é inválida |
| 403 | API_ACCESS_REQUIRED | O acesso à API é necessário para esta conta |
| 403 | SUBSCRIPTION_REQUIRED | O acesso à API requer uma assinatura paga |
| 403 | INSUFFICIENT_CREDITS | Créditos insuficientes para processar este arquivo |
| 403 | CUSTOM_VOICE_ACCESS_DENIED | A voz personalizada não pertence ao proprietário efetivo do projeto |
| 403 | LIPSYNC_MODE_ACCESS_DENIED | O modo de sincronização labial premium não está disponível no plano atual |
| 429 | RATE_LIMIT_EXCEEDED | Muitas solicitações (limite: 10 solicitações por minuto) |
| 429 | CONCURRENT_TRANSLATION_LIMIT_REACHED | Muitas traduções em andamento (limite: 10 traduções simultâneas) |
Esta página foi útil?

