🚀 快速安装
复制以下命令并运行,立即安装此 Skill:
npx skills add https://skills.sh/heygen-com/skills/faceswap
💡 提示:需要 Node.js 和 NPM
换脸 (HeyGen API)
使用 GPU 加速的 AI 处理,将源图像中的脸部换入目标视频。源图像提供要换入的脸部,目标视频接收新脸部。
认证
所有请求都需要 X-Api-Key 头部。设置 HEYGEN_API_KEY 环境变量。
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflow_type": "FaceswapNode", "input": {"source_image_url": "https://example.com/face.jpg", "target_video_url": "https://example.com/video.mp4"}}'
默认工作流
- 调用
POST /v1/workflows/executions,参数为workflow_type: "FaceswapNode"、源脸部图像和目标视频 - 在响应中接收
execution_id - 每 10 秒轮询
GET /v1/workflows/executions/{id},直到状态为completed - 使用输出中返回的
video_url
执行换脸
端点
POST https://api.heygen.com/v1/workflows/executions
请求字段
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
workflow_type |
string | 是 | 必须为 "FaceswapNode" |
input.source_image_url |
string | 是 | 要换入的脸部图像的 URL |
input.target_video_url |
string | 是 | 要应用换脸的视频的 URL |
curl
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_type": "FaceswapNode",
"input": {
"source_image_url": "https://example.com/face-photo.jpg",
"target_video_url": "https://example.com/original-video.mp4"
}
}'
TypeScript
interface FaceswapInput {
source_image_url: string;
target_video_url: string;
}
interface ExecuteResponse {
data: {
execution_id: string;
status: "submitted";
};
}
async function faceswap(input: FaceswapInput): Promise<string> {
const response = await fetch("https://api.heygen.com/v1/workflows/executions", {
method: "POST",
headers: {
"X-Api-Key": process.env.HEYGEN_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
workflow_type: "FaceswapNode",
input,
}),
});
const json: ExecuteResponse = await response.json();
return json.data.execution_id;
}
Python
import requests
import os
def faceswap(source_image_url: str, target_video_url: str) -> str:
payload = {
"workflow_type": "FaceswapNode",
"input": {
"source_image_url": source_image_url,
"target_video_url": target_video_url,
},
}
response = requests.post(
"https://api.heygen.com/v1/workflows/executions",
headers={
"X-Api-Key": os.environ["HEYGEN_API_KEY"],
"Content-Type": "application/json",
},
json=payload,
)
data = response.json()
return data["data"]["execution_id"]
响应格式
{
"data": {
"execution_id": "node-gw-f1s2w3p4",
"status": "submitted"
}
}
检查状态
端点
GET https://api.heygen.com/v1/workflows/executions/{execution_id}
curl
curl -X GET "https://api.heygen.com/v1/workflows/executions/node-gw-f1s2w3p4" \
-H "X-Api-Key: $HEYGEN_API_KEY"
响应格式(已完成)
{
"data": {
"execution_id": "node-gw-f1s2w3p4",
"status": "completed",
"output": {
"video_url": "https://resource.heygen.ai/faceswap/output.mp4"
}
}
}
轮询直到完成
async function faceswapAndWait(
input: FaceswapInput,
maxWaitMs = 600000,
pollIntervalMs = 10000
): Promise<string> {
const executionId = await faceswap(input);
console.log(`已提交换脸任务: ${executionId}`);
const startTime = Date.now();
while (Date.now() - startTime < maxWaitMs) {
const response = await fetch(
`https://api.heygen.com/v1/workflows/executions/${executionId}`,
{ headers: { "X-Api-Key": process.env.HEYGEN_API_KEY! } }
);
const { data } = await response.json();
switch (data.status) {
case "completed":
return data.output.video_url;
case "failed":
throw new Error(data.error?.message || "换脸失败");
case "not_found":
throw new Error("未找到工作流");
default:
await new Promise((r) => setTimeout(r, pollIntervalMs));
}
}
throw new Error("换脸超时");
}
使用示例
基础换脸
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
-H "X-Api-Key: $HEYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_type": "FaceswapNode",
"input": {
"source_image_url": "https://example.com/headshot.jpg",
"target_video_url": "https://example.com/presentation.mp4"
}
}'
与数字人视频串联使用
先生成数字人视频,然后换入自定义脸部:
import time
# 步骤 1:生成数字人视频
avatar_execution_id = requests.post(
"https://api.heygen.com/v1/workflows/executions",
headers={"X-Api-Key": os.environ["HEYGEN_API_KEY"], "Content-Type": "application/json"},
json={
"workflow_type": "AvatarInferenceNode",
"input": {
"avatar": {"avatar_id": "Angela-inblackskirt-20220820"},
"audio_list": [{"audio_url": "https://example.com/speech.mp3"}],
},
},
).json()["data"]["execution_id"]
# 步骤 2:等待数字人视频完成
while True:
status = requests.get(
f"https://api.heygen.com/v1/workflows/executions/{avatar_execution_id}",
headers={"X-Api-Key": os.environ["HEYGEN_API_KEY"]},
).json()["data"]
if status["status"] == "completed":
avatar_video_url = status["output"]["video"]["video_url"]
break
time.sleep(10)
# 步骤 3:换入自定义脸部
faceswap_execution_id = faceswap(
source_image_url="https://example.com/custom-face.jpg",
target_video_url=avatar_video_url,
)
最佳实践
- 使用清晰、正面的脸部照片 — 源图像应显示单张脸部,光线良好
- 换脸是 GPU 密集型操作 — 预计处理时间 1-3 分钟,每 10 秒轮询一次
- 源图像质量很重要 — 更高分辨率的脸部照片效果更好
- 每张源图像一张脸 — 源图像中应恰好包含一张要换入的脸部
- 适用于任何视频 — 目标视频可以是数字人视频、录制视频或任何有可见脸部的视频
- 可与其他工作流串联使用 — 先生成数字人视频,然后换入自定义脸部以实现个性化
📄 原始文档
完整文档(英文):
https://skills.sh/heygen-com/skills/faceswap
💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)