Übersetzung 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
}Übersetzung und Synchronisation
Übersetzung starten
Laden Sie eine Video- oder Audiodatei hoch und starten Sie ein neues Übersetzungsprojekt
Übersetzung 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
}Übersetzung starten
Erstellen Sie ein neues Übersetzungsprojekt durch Hochladen einer Video- oder Audiodatei. Der Übersetzungsprozess läuft asynchron im Hintergrund. Verwenden Sie den Status-Endpunkt, um den Fortschritt zu verfolgen und Ergebnisse abzurufen. Verwenden Sie Projektdetails abrufen, wenn Sie eine übersetzte Versionshistorie oder Lippensynchronisationshistorie benötigen.Gleichzeitige Ausführungsgrenze
Projekterstellung, Übersetzung und Vertonung prüfen alle das Limit Ihres Kontos für aktive Übersetzungen (höchstens 10, möglicherweise weniger). Nur laufende Übersetzungs- oder Vertonungsvorgänge belegen Plätze; Projekte mit reiner Transkription nicht. Bei Erreichen des Limits gibt die APICONCURRENT_TRANSLATION_LIMIT_REACHED (HTTP 429) zurück. Das geltende Limit steht in details.limit.
Anfrage
Dieser Endpunkt akzeptiertmultipart/form-data mit einem Datei-Upload.
Header
string
erforderlich
Ihr VoiceCheap API-Schlüssel. Erhalten Sie einen von app.voicecheap.ai/page-api.
Body-Parameter
file
erforderlich
Die zu übersetzende Video- oder Audiodatei.Unterstützte Videoformate:
video/mp4, video/quicktime, video/x-matroska, video/webm, video/mpegUnterstützte Audioformate: audio/mpeg, audio/wav, audio/mp4, audio/x-m4a, audio/flac, audio/ogg, audio/aac, audio/webmMaximale Dateigröße nach Plan: Beginner 5 GB, Starter 10 GB, Creator 20 GB, Pro 30 GB, Scale 40 GB und Enterprise 60 GB.string
erforderlich
Die Sprache, in die der Inhalt übersetzt werden soll. Muss kleingeschrieben sein.Zulässige Werte (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
Die Quellsprache des Inhalts unter Verwendung von ISO-Sprachcodes (z. B. Standard:
en, es, fr, de, ja, zh).Dringend empfohlen: Lassen Sie dies für die automatische Erkennung leer.Geben Sie diesen Parameter nur an, wenn Sie zu 100 % sicher sind, dass der Sprachcode korrekt ist und im gültigen ISO-Format vorliegt. Falsche Sprachcodes führen zu Transkriptionsfehlern. Unsere automatische Erkennung unterstützt über 80 Sprachen und ist hochpräzise.
auto-detectstring
Ein benutzerdefinierter Name für das Projekt. Nützlich zur Identifizierung von Projekten in Ihrem Dashboard.Standard: Die Projekt-ID wird verwendet, falls keine Angabe gemacht wird.
string
Ein https-Endpunkt, der die Webhook-Ereignisse für dieses Projekt empfängt,
und den für Ihr Konto konfigurierten Endpunkt überschreibt.Standard: Der Webhook-Endpunkt des Kontos, sofern einer konfiguriert ist.
string
auto-detect oder eine Ganzzahl von 1 bis 32. Eine bekannte Sprecheranzahl kann die Diarisierung verbessern.Standard: auto-detectstring
Ein JSON-String-Array von anfragespezifischen Namen, Marken, Akronymen oder Fachbegriffen. Diese Begriffe werden mit dem gespeicherten Konto- oder Team-Glossar zusammengeführt.
boolean
Entfernen Sie häufige Füllwörter aus dem Quelltranskript vor der Übersetzung.Standard:
truestring
Ein vorhandenes SRT-Transkript in der Quellsprache.
originalLanguage muss explizit angegeben werden, wenn dieses Feld bereitgestellt wird.string
Das fertige SRT in der Zielsprache, von Ihnen geschrieben. Wenn es gesetzt ist, überspringt VoiceCheap die Übersetzungs-Engine und erzeugt nur die Stimmen und mischt die Ausgabe aus diesem Text. Die Ausrichtungsregeln stehen im Nur-Synchronisationsmodus. Maximal 1.000.000 Zeichen.
boolean
Ob das Hintergrundaudio in der Ausgabe beibehalten werden soll.Wenn aktiviert, bleiben Hintergrundmusik, Umgebungsgeräusche, Lachen, Klatschen und Publikumsgeräusche erhalten, während nur die Originalstimme entfernt wird (Stems-Trennung). Deaktivieren Sie dies, wenn Ihre Quelle kein Hintergrundaudio enthält.Standard:
trueboolean
Behalten Sie den ursprünglichen Sprecher leise unter der übersetzten Stimme bei.Standard:
falsenumber
Lautstärke der Originalstimme von
1 bis 70, wenn keepOriginalVoice aktiviert ist.Standard: 30string
Stimmisolationsmodus, wenn
Zulässige Werte:
keepBackgroundMusic aktiviert ist. Steuert die Qualität und Eigenschaften der Stimmtrennung.Studio (Empfohlen)
Studio (Empfohlen)
Unsere Standard-Stimmverarbeitung, entwickelt für professionelle Audioqualität:
- Entfernt Echos und Nachhall
- Bereinigt technische Unvollkommenheiten
- Erzeugt eine klare und deutliche Stimme
Realistisch
Realistisch
Bewahrt die natürlichen Eigenschaften der Aufnahmeumgebung:
- Behält einen Klang bei, der der Originalaufnahme näher kommt
- Bewahrt Umgebungseigenschaften
Diese Option kann in einigen Fällen aufgrund der Bewahrung von Hintergrundelementen Artefakte oder unerwartete Effekte erzeugen.
studio, realisticStandard: studioboolean
Ob Untertitel für das übersetzte Video generiert werden sollen.Wenn aktiviert, werden klare schwarz-weiße Untertitel hinzugefügt. Mit
subtitlesSource wählen Sie den Originaltext (Quellsprache) oder den übersetzten Text (Zielsprache). Die Untertitel werden für gute Lesbarkeit automatisch synchronisiert.Standard: falsestring
Wählen Sie die Untertitel-Textquelle, wenn
subtitles aktiviert ist.Zulässige Werte: translated, originalStandard: translatedHinweis: Wenn original ausgewählt ist, aber die ursprüngliche Transkription nicht verfügbar ist, greifen die Untertitel auf translated zurück.string
Löst die Lippensynchronisation-Verarbeitung nach Abschluss der Synchronisation aus.
standard= Lip Syncpro= Lip Sync Prostudio= Lip Sync Studio
boolean
Aktivieren Sie die Erkennung aktiver Sprecher für den angeforderten Lippensynchronisation-Durchlauf.Standard:
falseboolean
Legacy-Lippensynchronisation-Auswahl für Abwärtskompatibilität beibehalten.Standard: nicht aktiviert (lassen Sie das Feld weg, um die Lippensynchronisation zu überspringen)Form-data: Senden Sie boolesche Werte als
false= Standard-Lippensynchronisation (4 Minuten Guthaben pro 1 Minute Video)true= Lip Sync Pro (9 Minuten Guthaben pro 1 Minute Video)
Maximale Dauer: 180 Minuten pro Video.Latenz: Die Lippensynchronisation-Verarbeitung fügt normalerweise das 2- bis 4-fache der ursprünglichen Videodauer hinzu.
E-Mails zum Abschluss oder Fehler der Lippensynchronisation werden für API-ausgelöste Anfragen nicht gesendet. Verwenden Sie den Status-Endpunkt, um
den Fortschritt zu verfolgen.
true- oder false-Strings (z. B. -F "lipsyncPro=false").Kombinieren Sie
lipsyncPro nicht mit einem widersprüchlichen lipSyncMode.string
Sprachstrategie:
cloning oder custom.Standard: cloningstring
Erforderlich, wenn
voiceMode custom ist. Verwenden Sie eine ID aus dubbing_voices_list: eine Katalogstimme oder eine vom authentifizierten
Konto gespeicherte benutzerdefinierte Stimme. Die Teamabrechnung gewährt keinen Zugriff auf die gespeicherten Stimmen anderer Mitglieder.object
Feinabstimmung der Parameter für das Stimmklonen für eine erweiterte Kontrolle über die generierte Stimme. Übergeben Sie dies als JSON-String bei Verwendung von form-data. Alle Werte müssen zwischen 0 und 1 liegen (mit einer Schrittweite von 0,01). Ein
Standardwerte (ausgewogen):
speakerBoost-Wert aus älteren Integrationen wird weiterhin akzeptiert, hat aber keine Wirkung mehr.Diese Einstellungen gelten nur, wenn
voiceMode auf cloning gesetzt ist.Anzeigen Eigenschaften der Stimmklonen-Einstellungen
Anzeigen Eigenschaften der Stimmklonen-Einstellungen
number
Standard:"0.60"
Stimmstabilität (0,00 - 1,00)Bestimmt, wie stabil die Stimme ist und die Zufälligkeit zwischen jeder Generierung.
- Niedrigere Werte ermöglichen eine größere emotionale Bandbreite, können aber zu seltsamer oder gehetzter Sprache führen
- Höhere Werte erzeugen ein konsistenteres Ergebnis, können aber monoton klingen
0.60 (studio) / 0.65 (realistic)number
Standard:"0.80"
Stimmähnlichkeit (0,00 - 1,00)Steuert, wie genau die KI an der Originalstimme festhält.
- Höhere Werte machen die geklonte Stimme ähnlicher zum Original
- Wenn das Originalaudio verrauscht ist und die Ähnlichkeit zu hoch eingestellt ist, können Artefakte oder Hintergrundgeräusche in die generierte Stimme übertragen werden
0.80 (studio) / 0.75 (realistic){
"stability": 0.6,
"similarity": 0.8
}
string
Ein JSON-Array von Quellzeitbereichen, die in der Originalsprache verbleiben sollten.Zeitübersprünge erfordern Videoeingabe und
[
{ "startTime": 10.2, "endTime": 12.8 }
]
keepBackgroundMusic=true. Sie können nicht mit keepOriginalVoice kombiniert werden und dürfen sich nicht mit Transkriptsegmenten überschneiden.Nur-Synchronisation (eigene Übersetzung mitbringen)
Senden SietranslatedSrt, wenn die Übersetzung schon vorliegt und VoiceCheap nur die Stimmen erzeugen und mischen soll.
In diesem Modus:
- Keine KI-Übersetzung und keine SmartSync-Umformulierung. Jeder Cue wird wörtlich gesprochen. Gespeicherte Glossarregeln und eigene Übersetzungsanweisungen gelten ebenfalls nicht, weil sie nur in der Übersetzungs-Engine laufen.
- Das Timing kommt aus der Quelle. Jedes Segment behält Start, Ende und Sprecher des Quelltranskripts; die Zeitcodes Ihres SRT dienen nur dazu, Cues den Segmenten zuzuordnen. Die erzeugte Sprache wird gedehnt oder gestaucht, damit sie in das Segmentfenster passt, ohne den Wortlaut zu ändern.
- Dieselben Credits wie eine Übersetzung. Der Lauf wird genau wie eine Standardübersetzung desselben Mediums abgerechnet.
- Stimm-, Hintergrund-, Untertitel- und Lippensync-Optionen gelten unverändert.
voiceMode,keepBackgroundMusic,subtitles,lipSyncModeund die übrigen Synchronisationsoptionen verhalten sich wie oben beschrieben.
message bestätigt den Modus, und die übersetzte Version meldet dubbingMode: "dub-only" in
Projektdetails abrufen.
Ausrichtungsregeln
| Anfrage | Modus | Regel |
|---|---|---|
translatedSrt + sourceSrt | index | Beide Dateien müssen dieselbe Anzahl von Cues enthalten; Cue n der Übersetzung wird auf Cue n der Quelle gesprochen. Eine abweichende Anzahl wird vor dem Upload mit TRANSLATED_SRT_CUE_COUNT_MISMATCH abgelehnt. |
nur translatedSrt | timestamps | Das Medium wird zuerst transkribiert, danach wird jeder übersetzte Cue dem Transkriptsegment zugeordnet, das innerhalb von 50 ms nach dem Cue-Start beginnt, oder dem Segment mit der größten Überlappung. Mehrere Cues auf einem Segment werden verbunden. Ein Cue ohne Segment oder ein Segment ohne Cue lässt den Lauf fehlschlagen. |
timestamps werden erst nach der Transkription erkannt und asynchron gemeldet. Der Status-Endpunkt antwortet mit HTTP 200, status: "failed" und einem error mit code und message; der Webhook project.translation.failed enthält denselben Code und dieselbe Nachricht. Bei TRANSLATED_SRT_UNMATCHED_CUES stehen die nicht zugeordneten Cue-Nummern im Nachrichtentext, bei TRANSLATED_SRT_MISSING_SEGMENTS die Segmentindizes ohne Cue. Diese Antworten enthalten kein strukturiertes details-Feld. Für eine eindeutige Zuordnung senden Sie sourceSrt zusammen mit translatedSrt, oder erstellen Sie zuerst das Projekt mit Projekt erstellen, exportieren das Transkript, übersetzen es Cue für Cue und rufen Projekt synchronisieren auf.
Tempo prüfen
Lange Sätze müssen beschleunigt werden, damit sie in ihr Segment passen. Exportieren Sie das übersetzte Transkript mit Projekttranskript exportieren: jedes übersetzte Segment trägtfinalSpeedFactor, das
Verhältnis zwischen der erzeugten Sprache und dem Segmentfenster vor der letzten Tempopassung. Kürzen Sie die Cues, die ungefähr über
1.3 liegen, und starten Sie die Synchronisation erneut mit dem überarbeiteten SRT.
translatedSrt wird auch vom JSON-Endpunkt Projekt synchronisieren akzeptiert. Er synchronisiert ein
bereits transkribiertes Projekt, ohne das Medium erneut hochzuladen.Antwort
boolean
erforderlich
Immer
true bei erfolgreichen Anfragenstring
erforderlich
Eine für Menschen lesbare Nachricht, die das Ergebnis beschreibt
string
erforderlich
Die eindeutige Kennung für das erstellte Synchronisationsprojekt. Verwenden Sie diese ID, um den Status zu überprüfen.
number
erforderlich
Grobe Verarbeitungsschätzung in Minuten. Die aktuelle Schätzung liegt bei fünf Minuten Verarbeitungszeit pro begonnener Minute Quellmedium.
Beispiele
Gespeicherte Glossar-Regeln und benutzerdefinierte Synchronisationsanweisungen des aktiven Kontos oder Teams werden automatisch angewendet.
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'];
Antwortbeispiel
{
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "abc123-def456-ghi789",
"estimatedDuration": 15
}
Fehler
| Status | Code | Beschreibung |
|---|---|---|
| 400 | FILE_REQUIRED | Es wurde keine Datei mit der Anfrage hochgeladen |
| 400 | INVALID_FILE_TYPE | Der hochgeladene Dateityp wird nicht unterstützt |
| 400 | DURATION_DETECTION_FAILED | Die Dauer der hochgeladenen Datei konnte nicht ermittelt werden |
| 400 | INVALID_MULTIPART_REQUEST | Multipart-Formulardaten sind fehlerhaft oder überschreiten Feldgrenzen |
| 400 | INVALID_BOOLEAN_VALUE | Ein boolescher Parameter hat einen ungültigen Wert (verwenden Sie “true” oder “false”) |
| 400 | INVALID_JSON_FORMAT | Das voiceCloningSettings JSON ist fehlerhaft |
| 400 | INVALID_BRAND_VOCABULARY | Ein anfragespezifischer Glossar-Eintrag ist ungültig |
| 400 | INVALID_SOURCE_SRT | Die bereitgestellte Quell-SRT ist fehlerhaft |
| 400 | SOURCE_LANGUAGE_REQUIRED_FOR_SRT | sourceSrt erfordert eine explizite originalLanguage |
| 400 | INVALID_TRANSLATED_SRT | Das gelieferte übersetzte SRT ist fehlerhaft |
| 400 | TRANSLATED_SRT_CUE_COUNT_MISMATCH | translatedSrt und sourceSrt enthalten nicht dieselbe Anzahl von Cues |
| 400 | VOICE_ID_REQUIRED | Der Modus für benutzerdefinierte Stimmen wurde ohne eine Stimmen-ID ausgewählt |
| 400 | VOICE_ID_NOT_ALLOWED_WITH_CLONING | Eine Stimmen-ID wurde mit Stimmklonen kombiniert |
| 400 | VOICE_CLONING_SETTINGS_NOT_ALLOWED | Klon-Einstellungen wurden mit dem Modus für benutzerdefinierte Stimmen kombiniert |
| 400 | CONFLICTING_LIPSYNC_OPTIONS | lipSyncMode steht im Konflikt mit dem veralteten lipsyncPro |
| 400 | TRANSLATION_TIME_SKIP_CONFLICT | Zeitübersprünge stehen im Konflikt mit einer anderen Audio-Option |
| 400 | TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND | Zeitübersprünge erfordern Hintergrundaudio |
| 400 | TRANSLATION_TIME_SKIP_OUT_OF_RANGE | Ein Zeitübersprung reicht über die Mediendauer hinaus |
| 400 | INVALID_TRANSLATION_TIME_SKIPS | Ein Zeitübersprung überschneidet sich mit einem Transkriptionssegment |
| 400 | SUBTITLES_NOT_AVAILABLE_FOR_AUDIO | Eingebrannte Untertitel wurden für Audio-Input angefordert |
| 400 | LIPSYNC_NOT_AVAILABLE_FOR_AUDIO | Lippensynchronisation wurde für Audio-Input angefordert |
| 400 | TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO | Zeitübersprünge wurden für Audio-Input angefordert |
| 400 | LIPSYNC_VIDEO_TOO_LONG | Lippensynchronisation wurde für Medien angefordert, die länger als die unterstützte Dauer sind |
| 413 | FILE_TOO_LARGE | Die hochgeladene Datei überschreitet das Plan-Limit des Benutzers |
| 401 | MISSING_API_KEY | API-Schlüssel ist erforderlich |
| 401 | INVALID_API_KEY_FORMAT | API-Schlüssel muss mit vc_ beginnen |
| 401 | INVALID_API_KEY | Der bereitgestellte API-Schlüssel ist ungültig |
| 403 | SUBSCRIPTION_REQUIRED | API-Zugriff erfordert einen Starter-Plan oder höher |
| 403 | INSUFFICIENT_CREDITS | Nicht genügend Credits, um diese Datei zu verarbeiten |
| 403 | CUSTOM_VOICE_ACCESS_DENIED | Die ausgewählte Stimme ist weder eine Katalogstimme noch eine vom authentifizierten Konto gespeicherte benutzerdefinierte Stimme. |
| 403 | LIPSYNC_MODE_ACCESS_DENIED | Der Premium-Lippensynchronisationsmodus ist im aktuellen Plan nicht verfügbar |
| 429 | RATE_LIMIT_EXCEEDED | Zu viele Anfragen (Limit: 10 Anfragen pro Minute) |
| 429 | CONCURRENT_TRANSLATION_LIMIT_REACHED | Kontolimit für gleichzeitige Übersetzungen erreicht; siehe details.limit |
War diese Seite hilfreich?

