技能标识:video-translate
|
翻译并配音现有视频为多种语言,保持唇形同步和自然语音模式。提供视频URL或HeyGen视频ID — 无需先在HeyGen上创建视频。
所有请求都需要X-Api-Key请求头。设置HEYGENAPIKEY环境变量。
bash
curl -X POST https://api.heygen.com/v2/video_translate \
-H X-Api-Key: $HEYGENAPIKEY \
-H Content-Type: application/json \
-d {videourl: https://example.com/video.mp4, outputlanguage: es-ES}
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| videourl | string | 是 | 要翻译的视频URL(或videoid) |
| videoid |
必须提供videourl或videoid之一。
bash
curl -X POST https://api.heygen.com/v2/video_translate \
-H X-Api-Key: $HEYGENAPIKEY \
-H Content-Type: application/json \
-d {
video_url: https://example.com/original-video.mp4,
output_language: es-ES,
title: 西班牙语版本
}
typescript
interface VideoTranslateRequest {
video_url?: string;
video_id?: string;
output_language: string;
title?: string;
translateaudioonly?: boolean;
speaker_num?: number;
callback_id?: string;
callback_url?: string;
}
interface VideoTranslateResponse {
error: null | string;
data: {
videotranslateid: string;
};
}
async function translateVideo(config: VideoTranslateRequest): Promise
const response = await fetch(https://api.heygen.com/v2/video_translate, {
method: POST,
headers: {
X-Api-Key: process.env.HEYGENAPIKEY!,
Content-Type: application/json,
},
body: JSON.stringify(config),
});
const json: VideoTranslateResponse = await response.json();
if (json.error) {
throw new Error(json.error);
}
return json.data.videotranslateid;
}
python
import requests
import os
def translate_video(config: dict) -> str:
response = requests.post(
https://api.heygen.com/v2/video_translate,
headers={
X-Api-Key: os.environ[HEYGENAPIKEY],
Content-Type: application/json
},
json=config
)
data = response.json()
if data.get(error):
raise Exception(data[error])
return data[data][videotranslateid]
| 语言 | 代码 | 备注 |
|---|---|---|
| 英语(美国) | en-US | 默认源语言 |
| 西班牙语(西班牙) |
typescript
const config = {
video_url: https://example.com/original.mp4,
output_language: es-ES,
title: 西班牙语翻译,
};
typescript
const config = {
video_url: https://example.com/original.mp4,
output_language: es-ES,
translateaudioonly: true,
};
typescript
const config = {
video_url: https://example.com/interview.mp4,
output_language: fr-FR,
speaker_num: 2,
};
更精细地控制翻译:
typescript
interface VideoTranslateV4Request {
inputvideoid?: string;
google_url?: string;
output_languages: string[]; // 一次调用多种语言
name: string;
srt_key?: string; // 自定义SRT字幕
instruction?: string;
vocabulary?: string[]; // 保留原样的术语
brandvoiceid?: string;
speaker_num?: number;
keepthesame_format?: boolean;
input_language?: string;
enablevideostretching?: boolean;
disablemusictrack?: boolean;
enablespeechenhancement?: boolean;
srt_role?: input | output;
translateaudioonly?: boolean;
}
typescript
const config = {
inputvideoid: originalvideoid,
output_languages: [es-ES, fr-FR, de-DE],
name: 多语言翻译,
};
typescript
const config = {
video_url: https://example.com/product-demo.mp4,
output_language: ja-JP,
vocabulary: [SuperWidget, Pro Max, TechCorp],
};
typescript
const config = {
video_url: https://example.com/video.mp4,
output_language: es-ES,
srt_key: path/to/custom-subtitles.srt,
srt_role: input,
};
bash
curl -X GET https://api.heygen.com/v2/videotranslate/{translateid} \
-H X-Api-Key: $HEYGENAPIKEY
typescript
interface TranslateStatusResponse {
error: null | string;
data: {
id: string;
status: pending | processing | completed | failed;
video_url?: string;
message?: string;
};
}
async function getTranslateStatus(translateId: string): Promise
const response = await fetch(
https://api.heygen.com/v2/video_translate/${translateId},
{ headers: { X-Api-Key: process.env.HEYGENAPIKEY! } }
);
const json: TranslateStatusResponse = await response.json();
if (json.error) {
throw new Error(json.error);
}
return json.data;
}
翻译比标准视频生成耗时更长 — 最多等待30分钟。
typescript
async function waitForTranslation(
translateId: string,
maxWaitMs = 1800000,
pollIntervalMs = 30000
): Promise
const startTime = Date.now();
while (Date.now() - startTime < maxWaitMs) {
const status = await getTranslateStatus(translateId);
switch (status.status) {
case completed:
return status.video_url!;
case failed:
throw new Error(status.message || 翻译失败);
default:
console.log(状态: ${status.status}...);
await new Promise((r) => setTimeout(r, pollIntervalMs));
}
}
throw new Error(翻译超时);
}
typescript
async function translateAndDownload(
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 video-translate-1776274657 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 video-translate-1776274657 技能
skillhub install video-translate-1776274657
文件大小: 4.16 KB | 发布时间: 2026-4-16 17:15