Vertaling starten
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>",
"translatedSrt": "<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
},
"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>",
"translatedSrt": "<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
},
"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>',
translatedSrt: '<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},
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>',
'translatedSrt' => '<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
],
'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 \"translatedSrt\": \"<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 },\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 \"translatedSrt\": \"<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 },\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 \"translatedSrt\": \"<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 },\n \"translationTimeSkips\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"projectId": "<string>",
"estimatedDuration": 123
}Vertaling en nasynchronisatie
Vertaling starten
Upload een video- of audiobestand en start een nieuw vertaalproject
Vertaling starten
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>",
"translatedSrt": "<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
},
"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>",
"translatedSrt": "<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
},
"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>',
translatedSrt: '<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},
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>',
'translatedSrt' => '<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
],
'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 \"translatedSrt\": \"<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 },\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 \"translatedSrt\": \"<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 },\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 \"translatedSrt\": \"<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 },\n \"translationTimeSkips\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"projectId": "<string>",
"estimatedDuration": 123
}Vertaling starten
Maak een nieuw vertaalproject aan door een video- of audiobestand te uploaden. Het vertaalproces draait asynchroon op de achtergrond. Gebruik het status-eindpunt om de voortgang te volgen en resultaten op te halen. Gebruik Projectdetails ophalen wanneer u vertaalde versiegeschiedenis of lipsynchronisatie-geschiedenis nodig heeft.Gelijktijdigheidslimiet
Projectaanmaak, vertaling en nasynchronisatie controleren allemaal de limiet van uw account voor actieve vertalingen (maximaal 10, mogelijk lager). Alleen lopende vertaal- of nasynchronisatietaken nemen plaatsen in; projecten met alleen transcriptie doen dat niet. Bij het bereiken van de limiet retourneert de APICONCURRENT_TRANSLATION_LIMIT_REACHED (HTTP 429). De toegepaste limiet staat in details.limit.
Verzoek
Dit eindpunt accepteertmultipart/form-data met een bestandsupload.
Headers
string
vereist
Uw VoiceCheap API-sleutel. Verkrijg er een via app.voicecheap.ai/page-api.
Body-parameters
file
vereist
Het video- of audiobestand dat moet worden vertaald.Ondersteunde videoformaten:
video/mp4, video/quicktime, video/x-matroska, video/webm, video/mpegOndersteunde audioformaten: audio/mpeg, audio/wav, audio/mp4, audio/x-m4a, audio/flac, audio/ogg, audio/aac, audio/webmMaximale bestandsgrootte per abonnement: Beginner 5 GB, Starter 10 GB, Creator 20 GB, Pro 30 GB, Scale 40 GB en Enterprise 60 GB.string
vereist
De taal waarin de inhoud moet worden vertaald. Moet in kleine letters zijn.Toegestane waarden (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, pt_brazil, punjabi, romanian, russian, serbian, slovak, slovenian, spanish, swahili, swedish, tagalog, tamil, telugu, thai, turkish, ukrainian, urdu, vietnamese, welsh, yoruba, zulustring
De brontaal van de inhoud met behulp van ISO-taalcodes (bijv. Standaard:
en, es, fr, de, ja, zh).Sterk aanbevolen: laat dit leeg voor automatische detectie.Geef deze parameter alleen op als u 100% zeker weet dat de taalcode correct is en in het juiste ISO-formaat staat. Onjuiste taalcodes leiden tot transcriptiefouten. Onze automatische detectie ondersteunt 80+ talen en is zeer nauwkeurig.
auto-detectstring
Een aangepaste naam voor het project. Handig voor het identificeren van projecten in uw dashboard.Standaard: De project-ID wordt gebruikt als er geen naam is opgegeven.
string
Een https-eindpunt dat de webhook-gebeurtenissen voor dit project ontvangt,
waarbij het eindpunt dat op uw account is geconfigureerd wordt overschreven.Standaard: Het webhook-eindpunt van het account, indien geconfigureerd.
string
auto-detect of een geheel getal van 1 tot 32. Een bekend aantal sprekers kan de diarizatie verbeteren.Standaard: auto-detectstring
Een JSON-stringarray van verzoekspecifieke namen, merken, acroniemen of specialistische termen. Deze termen worden samengevoegd met de opgeslagen woordenlijst van het account of team.
boolean
Verwijder veelvoorkomende stopwoorden uit de brontranscriptie vóór vertaling.Standaard:
truestring
Een bestaande SRT-transcriptie in de brontaal.
originalLanguage moet expliciet zijn wanneer dit veld wordt verstrekt.string
De definitieve SRT in de doeltaal, door u geschreven. Als dit veld is gezet, slaat VoiceCheap de vertaalengine over en genereert het alleen de stemmen en mixt de uitvoer vanuit deze tekst. Zie de alleen-nasynchronisatiemodus voor de uitlijningsregels. Maximaal 1.000.000 tekens.
boolean
Of achtergrondaudio in de uitvoer moet worden behouden.Indien ingeschakeld, blijft achtergrondmuziek, ambiance, gelach, applaus en omgevingsgeluid behouden terwijl alleen de originele stem wordt verwijderd (stem-scheiding). Schakel dit uit als uw bron geen achtergrondaudio bevat.Standaard:
trueboolean
Houd de originele spreker zachtjes hoorbaar onder de vertaalde stem.Standaard:
falsenumber
Volume van de originele stem van
1 tot 70 wanneer keepOriginalVoice is ingeschakeld.Standaard: 30string
Stemisolatiemodus wanneer
Toegestane waarden:
keepBackgroundMusic is ingeschakeld. Regelt de kwaliteit en kenmerken van de stem-scheiding.Studio (Aanbevolen)
Studio (Aanbevolen)
Onze standaard stemverwerking, ontworpen voor professionele audiokwaliteit:
- Verwijdert echo’s en galm
- Reinigt technische onvolkomenheden
- Produceert een heldere en scherpe stem
Realistisch
Realistisch
Behoudt de natuurlijke kenmerken van de opnameomgeving:
- Behoudt een geluid dat dichter bij de originele opname ligt
- Behoudt omgevingskenmerken
Deze optie kan in sommige gevallen artefacten of onverwachte effecten creëren vanwege het behoud van achtergrondelementen.
studio, realisticStandaard: studioboolean
Of er ondertitels moeten worden gegenereerd voor de vertaalde video.Indien ingeschakeld, worden duidelijke zwart-witte ondertitels toegevoegd. Gebruik
subtitlesSource om originele tekst (brontaal) of vertaalde tekst (doeltaal) te kiezen. De ondertitels worden automatisch gesynchroniseerd voor de leesbaarheid.Standaard: falsestring
Kies de bron voor de ondertitels wanneer
subtitles is ingeschakeld.Toegestane waarden: translated, originalStandaard: translatedOpmerking: Als original is geselecteerd maar de originele transcriptie niet beschikbaar is, vallen de ondertitels terug op translated.string
Activeer lipsynchronisatie-verwerking nadat de vertaling is voltooid.
standard= Lip Syncpro= Lip Sync Prostudio= Lip Sync Studio
boolean
Schakel detectie van de actieve spreker in voor de aangevraagde lipsynchronisatie.Standaard:
falseboolean
Verouderde lipsynchronisatie-selector behouden voor achterwaartse compatibiliteit.Standaard: niet ingeschakeld (laat het veld leeg om lipsynchronisatie over te slaan)Form-data: Verstuur booleaanse waarden als
false= Standaard lipsynchronisatie (4 minuten aan credits per 1 minuut video)true= Lip Sync Pro (9 minuten aan credits per 1 minuut video)
Maximale duur: 180 minuten per video.Latentie: Lipsynchronisatie-verwerking voegt doorgaans 2x-4x de oorspronkelijke videoduur toe.
E-mails over voltooiing en mislukking van lipsynchronisatie worden niet verzonden voor via de API geactiveerde verzoeken. Gebruik het status-endpoint om
de voortgang te volgen.
true of false strings (bijv. -F "lipsyncPro=false").Combineer
lipsyncPro niet met een tegenstrijdige lipSyncMode.string
Stemstrategie:
cloning of custom.Standaard: cloningstring
Vereist wanneer
voiceMode custom is. Gebruik een ID uit dubbing_voices_list: een catalogusstem of een aangepaste stem die door het
geauthenticeerde account is opgeslagen. Teamfacturering geeft geen toegang tot de opgeslagen stemmen van andere leden.object
Verfijn de parameters voor stemklonen voor geavanceerde controle over de gegenereerde stem. Geef door als een JSON-string bij gebruik van form-data. Alle waarden moeten tussen 0 en 1 liggen (met een stap van 0,01). Een
Standaardwaarden (gebalanceerd):
speakerBoost-waarde uit eerdere integraties wordt nog geaccepteerd, maar heeft geen effect meer.Deze instellingen zijn alleen van toepassing wanneer
voiceMode gelijk is aan cloning.Tonen eigenschappen van voiceCloningSettings
Tonen eigenschappen van voiceCloningSettings
number
standaard:"0.60"
Stemstabiliteit (0,00 - 1,00)Bepaalt hoe stabiel de stem is en de willekeur tussen elke generatie.
- Lagere waarden staan een breder emotioneel bereik toe, maar kunnen vreemde of gehaaste spraak veroorzaken
- Hogere waarden produceren een consistentere output, maar kunnen monotoon klinken
0.60 (studio) / 0.65 (realistic)number
standaard:"0.80"
Stemgelijkenis (0,00 - 1,00)Bepaalt hoe nauw de AI de originele stem volgt.
- Hogere waarden maken de gekloonde stem meer gelijk aan het origineel
- Als de originele audio ruis bevat en de gelijkenis te hoog is, kunnen artefacten of achtergrondruis in de gegenereerde stem terechtkomen
0.80 (studio) / 0.75 (realistic){
"stability": 0.6,
"similarity": 0.8
}
string
Een JSON-array van bron-tijdbereiken die in de oorspronkelijke taal moeten blijven.Tijdoverslaan vereist video-input en
[
{ "startTime": 10.2, "endTime": 12.8 }
]
keepBackgroundMusic=true. Ze kunnen niet worden gecombineerd met keepOriginalVoice en kunnen niet overlappen met transcriptsegmenten.Alleen-nasynchronisatie (eigen vertaling)
StuurtranslatedSrt wanneer u de vertaling al hebt en VoiceCheap alleen de stemmen moet genereren en de uitvoer moet mixen.
In deze modus:
- Geen AI-vertaling en geen SmartSync-herformulering. Elke cue wordt letterlijk ingesproken. Opgeslagen glossariumregels en aangepaste vertaalinstructies worden ook niet toegepast, omdat die alleen in de vertaalengine draaien.
- De timing komt uit de bron. Elk segment houdt begin, einde en spreker van het brontranscript; de tijdcodes van uw SRT dienen alleen om cues aan segmenten te koppelen. De gegenereerde spraak wordt opgerekt of ingekort zodat ze in het segmentvenster past, zonder de formulering te wijzigen.
- Dezelfde credits als een vertaling. De run wordt precies afgerekend als een standaardvertaling van hetzelfde medium.
- Stem-, achtergrond-, ondertitel- en lip-sync-opties blijven gelden.
voiceMode,keepBackgroundMusic,subtitles,lipSyncModeen de andere nasynchronisatie-opties gedragen zich zoals hierboven beschreven.
message van het antwoord bevestigt de modus, en de vertaalde versie meldt dubbingMode: "dub-only" in
Projectdetails ophalen.
Uitlijningsregels
| Verzoek | Modus | Regel |
|---|---|---|
translatedSrt + sourceSrt | index | Beide bestanden moeten hetzelfde aantal cues bevatten; cue n van de vertaling wordt ingesproken op cue n van de bron. Een afwijkend aantal wordt vóór de upload geweigerd met TRANSLATED_SRT_CUE_COUNT_MISMATCH. |
alleen translatedSrt | timestamps | Het medium wordt eerst getranscribeerd en daarna wordt elke vertaalde cue gekoppeld aan het transcriptsegment dat binnen 50 ms na het begin van de cue start, of aan het segment met de grootste overlap. Meerdere cues op één segment worden samengevoegd. Een cue zonder segment of een segment zonder cue laat de run mislukken. |
timestamps zijn pas na de transcriptie bekend en worden asynchroon gemeld. Het statusendpoint geeft HTTP 200 met status: "failed" en een error met code en message terug; de webhook project.translation.failed bevat dezelfde code en melding. Bij TRANSLATED_SRT_UNMATCHED_CUES staan de niet gekoppelde cuenummers in de melding, bij TRANSLATED_SRT_MISSING_SEGMENTS de segmentindexen zonder cue. Deze antwoorden bevatten geen gestructureerd details-veld. Voor een eenduidige koppeling stuurt u sourceSrt samen met translatedSrt, of maakt u het project eerst aan met Project aanmaken, exporteert u het transcript, vertaalt u het cue voor cue en roept u Project nasynchroniseren aan.
Het tempo controleren
Lange zinnen moeten worden versneld om in hun segment te passen. Exporteer het vertaalde transcript met Projecttranscriptie exporteren: elk vertaald segment bevatfinalSpeedFactor, de
verhouding tussen de gegenereerde spraak en het segmentvenster vóór de laatste tempo-aanpassing. Kort de cues in die ongeveer boven
1.3 uitkomen en start de nasynchronisatie opnieuw met de herziene SRT.
translatedSrt wordt ook geaccepteerd door het JSON-endpoint Project nasynchroniseren, dat een
al getranscribeerd project nasynchroniseert zonder het medium opnieuw te uploaden.Antwoord
boolean
vereist
Altijd
true voor succesvolle verzoekenstring
vereist
Een voor mensen leesbaar bericht dat het resultaat beschrijft
string
vereist
De unieke identificatiecode voor het gemaakte vertaalproject. Gebruik deze ID om de status te controleren.
number
vereist
Ruwe schatting van de verwerkingstijd in minuten. De huidige schatting is vijf minuten verwerkingstijd per gestarte minuut aan bronmedia.
Voorbeelden
Opgeslagen woordenlijst-regels en aangepaste vertaalinstructies van het actieve account of team worden automatisch toegepast.
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
}
interface StartTranslationRequest {
targetLanguage: string;
originalLanguage?: string;
projectName?: string;
numberOfSpeakers?: 'auto-detect' | string;
brandVocabulary?: string[];
removeFillerWords?: boolean;
sourceSrt?: string;
translatedSrt?: string;
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;
sourceSrt?: string;
translatedSrt?: string;
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?.sourceSrt) {
formData.append('sourceSrt', options.sourceSrt);
}
if (options?.translatedSrt) {
formData.append('translatedSrt', options.translatedSrt);
}
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,
},
});
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,
}),
);
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
})
}
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
]);
$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'];
Reactievoorbeeld
{
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "abc123-def456-ghi789",
"estimatedDuration": 15
}
Fouten
| Status | Code | Beschrijving |
|---|---|---|
| 400 | FILE_REQUIRED | Er is geen bestand geüpload bij het verzoek |
| 400 | INVALID_FILE_TYPE | Het geüploade bestandstype wordt niet ondersteund |
| 400 | DURATION_DETECTION_FAILED | Kon de duur van het geüploade bestand niet detecteren |
| 400 | INVALID_MULTIPART_REQUEST | Multipart form data is onjuist geformatteerd of overschrijdt de veldlimieten |
| 400 | INVALID_BOOLEAN_VALUE | Een booleaanse parameter heeft een ongeldige waarde (gebruik “true” of “false”) |
| 400 | INVALID_JSON_FORMAT | De voiceCloningSettings JSON is onjuist geformatteerd |
| 400 | INVALID_BRAND_VOCABULARY | Een verzoekspecifieke woordenlijst-invoer is ongeldig |
| 400 | INVALID_SOURCE_SRT | De aangeleverde bron-SRT is onjuist geformatteerd |
| 400 | SOURCE_LANGUAGE_REQUIRED_FOR_SRT | sourceSrt vereist een expliciete originalLanguage |
| 400 | INVALID_TRANSLATED_SRT | De aangeleverde vertaalde SRT is ongeldig |
| 400 | TRANSLATED_SRT_CUE_COUNT_MISMATCH | translatedSrt en sourceSrt bevatten niet hetzelfde aantal cues |
| 400 | VOICE_ID_REQUIRED | De modus voor aangepaste stemmen werd geselecteerd zonder een stem-ID |
| 400 | VOICE_ID_NOT_ALLOWED_WITH_CLONING | Een stem-ID werd gecombineerd met stemklonen |
| 400 | VOICE_CLONING_SETTINGS_NOT_ALLOWED | Klooninstellingen werden gecombineerd met de modus voor aangepaste stemmen |
| 400 | CONFLICTING_LIPSYNC_OPTIONS | lipSyncMode conflicteert met de verouderde lipsyncPro |
| 400 | TRANSLATION_TIME_SKIP_CONFLICT | Tijdoverslaan conflicteert met een andere audio-optie |
| 400 | TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND | Tijdoverslaan vereist achtergrondaudio |
| 400 | TRANSLATION_TIME_SKIP_OUT_OF_RANGE | Een tijdoverslag valt buiten de mediaduur |
| 400 | INVALID_TRANSLATION_TIME_SKIPS | Een tijdoverslag overlapt een transcriptiesegment |
| 400 | SUBTITLES_NOT_AVAILABLE_FOR_AUDIO | Ingebrande ondertitels werden aangevraagd voor audio-input |
| 400 | LIPSYNC_NOT_AVAILABLE_FOR_AUDIO | Lipsynchronisatie werd aangevraagd voor audio-input |
| 400 | TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO | Tijdoverslaan werd aangevraagd voor audio-input |
| 400 | LIPSYNC_VIDEO_TOO_LONG | Lipsynchronisatie werd aangevraagd voor media die langer is dan de ondersteunde duur |
| 413 | FILE_TOO_LARGE | Het geüploade bestand overschrijdt de limiet van het abonnement van de gebruiker |
| 401 | MISSING_API_KEY | API-sleutel is vereist |
| 401 | INVALID_API_KEY_FORMAT | API-sleutel moet beginnen met vc_ |
| 401 | INVALID_API_KEY | De verstrekte API-sleutel is ongeldig |
| 403 | SUBSCRIPTION_REQUIRED | API-toegang vereist een Starter-abonnement of hoger |
| 403 | INSUFFICIENT_CREDITS | Niet genoeg credits om dit bestand te verwerken |
| 403 | CUSTOM_VOICE_ACCESS_DENIED | De geselecteerde stem is geen catalogusstem of aangepaste stem die door het geauthenticeerde account is opgeslagen. |
| 403 | LIPSYNC_MODE_ACCESS_DENIED | De premium lipsynchronisatie-modus is niet beschikbaar in het huidige abonnement |
| 429 | RATE_LIMIT_EXCEEDED | Te veel verzoeken (limiet: 10 verzoeken per minuut) |
| 429 | CONCURRENT_TRANSLATION_LIMIT_REACHED | Accountlimiet voor gelijktijdige vertalingen bereikt; zie details.limit |
Was deze pagina nuttig?

