翻訳を開始
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
}翻訳
翻訳を開始
ビデオまたはオーディオファイルをアップロードして、新しい翻訳プロジェクトを開始します
翻訳を開始
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
}翻訳を開始
ビデオまたはオーディオファイルをアップロードして、新しい翻訳プロジェクトを作成します。翻訳プロセスはバックグラウンドで非同期に実行されます。進捗状況の追跡と結果の取得には ステータスエンドポイント を使用してください。翻訳されたバージョン履歴やリップシンク履歴が必要な場合は、プロジェクト詳細を取得 を使用してください。同時実行制限
アカウントごとに最大10個の翻訳を同時に実行できます。すでに10個の翻訳が進行中の場合、新しいリクエストはCONCURRENT_TRANSLATION_LIMIT_REACHED (HTTP 429) を返します。
リクエスト
このエンドポイントは、ファイルアップロードを伴うmultipart/form-data を受け付けます。
ヘッダー
string
必須
VoiceCheap APIキー。app.voicecheap.ai/page-apiから取得してください。
ボディパラメータ
file
必須
翻訳対象の動画または音声ファイル。サポートされている動画形式:
video/mp4、video/quicktime、video/x-matroska、video/webm、video/mpegサポートされている音声形式: audio/mpeg、audio/wav、audio/mp4、audio/x-m4a、audio/flac、audio/ogg、audio/aac、audio/webmプランごとの最大ファイルサイズ: Beginner 5 GB、Starter 10 GB、Creator 20 GB、Pro 30 GB、Scale 40 GB、Enterprise 60 GB。string
必須
コンテンツの翻訳先言語。小文字である必要があります。許可される値 (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
ISO言語コードを使用したコンテンツのソース言語(例: デフォルト:
en、es、fr、de、ja、zh)。強く推奨: 自動検出を行う場合は、この項目を空のままにしてください。このパラメータは、言語コードが正しいこと、および有効なISO形式であることを100%確信している場合にのみ指定してください。誤った言語コードを指定すると、文字起こしが失敗します。当社の自動検出機能は80以上の言語に対応しており、非常に高精度です。
auto-detectstring
プロジェクトのカスタム名。ダッシュボードでプロジェクトを識別するのに便利です。デフォルト: 指定がない場合はプロジェクトIDが使用されます。
string
このプロジェクトのwebhookイベントを受信するhttpsエンドポイント。
アカウントに設定されたエンドポイントを上書きします。デフォルト: 設定されている場合は、アカウントのwebhookエンドポイント。
string
auto-detect、または1から32までの整数。話者数が判明している場合、話者分離(ダイアライゼーション)の精度が向上します。デフォルト: auto-detectstring
リクエスト固有の名前、ブランド、頭字語、専門用語のJSON文字列配列。これらの用語は、保存されたアカウントまたはチームの用語集と統合されます。
boolean
翻訳前に、ソースの文字起こしから一般的なフィラーワード(言い淀み)を削除します。デフォルト:
truestring
既存のソース言語のSRT文字起こしファイル。このフィールドを指定する場合、
originalLanguageを明示する必要があります。boolean
出力に背景音声を保持するかどうか。有効にすると、元の音声のみを削除(ステム分離)し、背景音楽、環境音、笑い声、拍手、群衆の音を保持します。ソースに背景音声がない場合はオフにしてください。デフォルト:
trueboolean
翻訳された音声の下で、元の話者の音声を小さく保持します。デフォルト:
falsenumber
keepOriginalVoiceが有効な場合の、1から70までの元の音声の音量。デフォルト: 30string
keepBackgroundMusicが有効な場合の音声分離モード。音声分離の品質と特性を制御します。スタジオ(推奨)
スタジオ(推奨)
プロフェッショナルな音質のために設計された、当社のデフォルトの音声処理:
- エコーや残響を除去
- 技術的な不完全さをクリーンアップ
- 明瞭で鮮明な音声を生成
リアル
リアル
録音環境の自然な特性を保持します:
- 元の録音に近い音を維持
- 環境特性を保持
このオプションは、背景要素を保持するため、場合によってはアーティファクトや予期しない影響が生じることがあります。
studio、realisticデフォルト: studioboolean
翻訳された動画の字幕を生成するかどうか。有効にすると、Netflixスタイルのクリーンな白黒字幕が追加されます。
subtitlesSourceを使用して、オリジナル(ソース言語)または翻訳済み(ターゲット言語)のテキストを選択してください。字幕は最適な読みやすさのために自動的に同期されます。注: 字幕の焼き込みには、subtitlesフィルタ(libass)を備えたFFmpegが必要です。利用できない場合、APIはハード焼き込みスタイルの代わりに字幕トラックを埋め込む方式にフォールバックします。デフォルト: falsestring
subtitlesが有効な場合に、字幕テキストのソースを選択します。許可される値: translated, originalデフォルト: translated注: originalが選択されているにもかかわらず元の文字起こしが利用できない場合、字幕はtranslatedにフォールバックします。string
翻訳完了後にリップシンク処理をトリガーします。
standard= Lip Syncpro= Lip Sync Prostudio= Lip Sync Studio
boolean
リクエストされたリップシンク実行に対して、アクティブスピーカー検出を有効にします。デフォルト:
falseboolean
下位互換性のために保持されているレガシーリップシンクセレクターです。デフォルト: 無効(フィールドを省略するとリップシンクをスキップします)フォームデータ: ブール値は
false= 標準リップシンク (動画1分あたり4分のクレジット)true= Lip Sync Pro (動画1分あたり9分のクレジット)
最大期間: 動画1本あたり30分。レイテンシ: リップシンク処理は通常、元の動画時間の2倍〜4倍の時間を要します。
API経由のリクエストでは、リップシンクの完了および失敗のメールは送信されません。ステータスエンドポイントを使用して
進捗状況を追跡してください。
trueまたはfalseの文字列として送信してください(例: -F "lipsyncPro=false")。lipsyncProと競合するlipSyncModeを組み合わせないでください。string
音声戦略:
cloningまたはcustom。デフォルト: cloningstring
voiceModeがcustomの場合に必須です。音声は有効なプロジェクト所有者に属している必要があります。任意の音声IDや所有されていない音声IDは拒否されます。object
生成される音声の詳細な制御のために、音声クローニングのパラメータを微調整します。フォームデータを使用する場合はJSON文字列として渡してください。すべての値は0から1の間である必要があります(0.01刻み)。
デフォルト値 (バランス型):アクセントの再現を避けるために推奨:
これらの設定は、
voiceModeがcloningの場合にのみ適用されます。表示 voiceCloningSettings プロパティ
表示 voiceCloningSettings プロパティ
number
デフォルト:"0.60"
音声の安定性 (0.00 - 1.00)音声の安定性と、生成ごとのランダム性を決定します。
- 低い値は感情の幅を広げますが、不自然な発話や早口になる可能性があります
- 高い値は一貫した出力を生成しますが、単調に聞こえる可能性があります
0.60ヒント: アクセントの再現を避けるには、0.80を使用してくださいnumber
デフォルト:"0.85"
音声の類似度 (0.00 - 1.00)AIが元の音声にどれだけ忠実であるかを制御します。
- 高い値にすると、クローンされた音声が元の音声により似るようになります
- 元の音声にノイズが多く、類似度が高すぎる場合、アーティファクトや背景ノイズが生成された音声に混入する可能性があります
0.85ヒント: アクセントの再現を避けるには、0.20を使用してくださいnumber
デフォルト:"0.60"
スピーカーブースト (0.00 - 1.00)元の話者への類似度を高めます。これは、ソース音声への似通った度合いを向上させる微細な強化機能です。注: 値を高くすると、計算時間とレイテンシが増加します。デフォルト:
0.60ヒント: アクセントの再現を避けるには、0.00を使用してください{
"stability": 0.6,
"similarity": 0.85,
"speakerBoost": 0.6
}
{
"stability": 0.8,
"similarity": 0.2,
"speakerBoost": 0.0
}
string
元の言語のままにするソース時間範囲のJSON配列。タイムスキップには動画入力と
[
{ "startTime": 10.2, "endTime": 12.8 }
]
keepBackgroundMusic=trueが必要です。これらはkeepOriginalVoiceと組み合わせることはできず、文字起こしセグメントと重複させることもできません。レスポンス
boolean
必須
リクエストが成功した場合は常に
truestring
必須
結果を説明する人間が読める形式のメッセージ
string
必須
作成された吹き替えプロジェクトの一意の識別子。このIDを使用してステータスを確認してください。
number
必須
分単位での概算処理時間。現在の見積もりでは、ソースメディアの開始1分あたり5分の処理時間がかかります。
例
有効なアカウントまたはチームに保存されている用語集ルールとカスタム翻訳指示が自動的に適用されます。
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'];
レスポンス例
{
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "abc123-def456-ghi789",
"estimatedDuration": 15
}
エラー
| ステータス | コード | 説明 |
|---|---|---|
| 400 | FILE_REQUIRED | リクエストでファイルがアップロードされませんでした |
| 400 | INVALID_FILE_TYPE | アップロードされたファイルタイプはサポートされていません |
| 400 | DURATION_DETECTION_FAILED | アップロードされたファイルの長さを検出できませんでした |
| 400 | INVALID_MULTIPART_REQUEST | マルチパートフォームデータが不正であるか、フィールド制限を超えています |
| 400 | INVALID_BOOLEAN_VALUE | ブール値パラメータの値が無効です(“true”または”false”を使用してください) |
| 400 | INVALID_JSON_FORMAT | voiceCloningSettingsのJSONが不正です |
| 400 | INVALID_BRAND_VOCABULARY | リクエスト固有の語彙エントリが無効です |
| 400 | INVALID_SOURCE_SRT | 提供されたソースSRTが不正です |
| 400 | SOURCE_LANGUAGE_REQUIRED_FOR_SRT | sourceSrtには明示的なoriginalLanguageが必要です |
| 400 | VOICE_ID_REQUIRED | 音声IDなしでカスタム音声モードが選択されました |
| 400 | VOICE_ID_NOT_ALLOWED_WITH_CLONING | 音声IDが音声クローニングと組み合わされています |
| 400 | VOICE_CLONING_SETTINGS_NOT_ALLOWED | クローン設定がカスタム音声モードと組み合わされています |
| 400 | CONFLICTING_LIPSYNC_OPTIONS | lipSyncModeが従来のlipsyncProと競合しています |
| 400 | TRANSLATION_TIME_SKIP_CONFLICT | タイムスキップが他の音声オプションと競合しています |
| 400 | TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND | タイムスキップには背景音声が必要です |
| 400 | TRANSLATION_TIME_SKIP_OUT_OF_RANGE | タイムスキップがメディアの長さを超えています |
| 400 | INVALID_TRANSLATION_TIME_SKIPS | タイムスキップが文字起こしセグメントと重複しています |
| 400 | SUBTITLES_NOT_AVAILABLE_FOR_AUDIO | 音声入力に対して焼き込み字幕がリクエストされました |
| 400 | LIPSYNC_NOT_AVAILABLE_FOR_AUDIO | 音声入力に対してリップシンクがリクエストされました |
| 400 | TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO | 音声入力に対してタイムスキップがリクエストされました |
| 400 | LIPSYNC_VIDEO_TOO_LONG | サポートされている長さを超えるメディアに対してリップシンクがリクエストされました |
| 413 | FILE_TOO_LARGE | アップロードされたファイルがユーザーのプラン制限を超えています |
| 401 | MISSING_API_KEY | APIキーが必要です |
| 401 | INVALID_API_KEY_FORMAT | APIキーはvc_で始まる必要があります |
| 401 | INVALID_API_KEY | 提供されたAPIキーは無効です |
| 403 | API_ACCESS_REQUIRED | このアカウントにはAPIアクセスが必要です |
| 403 | SUBSCRIPTION_REQUIRED | APIアクセスには有料サブスクリプションが必要です |
| 403 | INSUFFICIENT_CREDITS | このファイルを処理するためのクレジットが不足しています |
| 403 | CUSTOM_VOICE_ACCESS_DENIED | カスタム音声は有効なプロジェクト所有者が所有していません |
| 403 | LIPSYNC_MODE_ACCESS_DENIED | プレミアムリップシンクモードは現在のプランでは利用できません |
| 429 | RATE_LIMIT_EXCEEDED | リクエストが多すぎます(制限:1分あたり10リクエスト) |
| 429 | CONCURRENT_TRANSLATION_LIMIT_REACHED | 進行中の翻訳が多すぎます(制限:同時翻訳10件) |
このページは役に立ちましたか?

