VideoScribe
文案提取 + 达人主页链接抓取 · 统一封装成可直接调用的 API
支持抖音分享文本、抖音链接和普通公开视频 URL
📁
点击选择或拖拽视频/音频文件mp4 / mov / mp3 / wav
正在解析...
✅ 提取完成
达人主页视频抓取
输入抖音达人主页链接,自动获取最近发布的视频列表及分享链接。
正在解析主页...
✅ 获取完成
| # | 视频标题 | 分享链接 | 时间 |
|---|
API 接口文档
所有接口需在请求头中携带 API Key 进行鉴权。
鉴权方式
Authorization: Bearer vs_xxxxxxxxxxxxxxxx // 在「密钥管理」中创建 API Key
POST 视频文案提取
/api/v1/extract
传入抖音分享文本、视频 URL,或直接上传本地文件,自动解析、提取音频、ASR 转写输出逐字稿。短视频可直接走同步接口。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
share_text | string | 二选一 | 抖音分享文本,支持整段口令直接粘贴 |
url | string | 二选一 | 公开视频 URL 或抖音长/短链接 |
file | file | 二选一 | 本地音视频文件,使用 multipart/form-data 上传 |
language | string | 可选 | 默认 zh |
JSON 请求
POST /api/v1/extract Content-Type: application/json Authorization: Bearer vs_xxxx { "share_text": "7- 长按复制此条消息... https://v.douyin.com/xY2_HbZk5Bg/", "language": "zh" }
文件上传
curl -X POST "$BASE_URL/api/v1/extract" \ -H "Authorization: Bearer vs_xxxx" \ -F "file=@/path/to/video.mp4" \ -F "language=zh"
Response
{
"code": 200,
"data": {
"transcript": "完整的逐字稿...",
"duration": 62.5,
"source": "douyin_share",
"sentences": [
{"text": "大家好", "start_time": 0.5, "end_time": 1.1}
]
}
}POST 异步文案提取
/api/v1/extract/async
适合大文件和长视频。提交任务后立即返回 task_id,再轮询状态接口获取结果;推荐文件较大或视频较长时优先使用。默认按 poll_after_ms 提示的间隔轮询即可。
JSON 请求
POST /api/v1/extract/async Content-Type: application/json Authorization: Bearer vs_xxxx { "url": "https://example.com/video.mp4", "language": "zh" }
文件上传
curl -X POST "$BASE_URL/api/v1/extract/async" \ -H "Authorization: Bearer vs_xxxx" \ -F "file=@/path/to/video.mp4" \ -F "language=zh"
Response
{
"code": 200,
"message": "accepted",
"data": {
"task_id": "t_xxxxxxxxxxxxxxxx",
"status": "processing",
"stage": "queued",
"is_terminal": false,
"poll_after_ms": 2000
}
}GET 查询异步结果
/api/v1/extract/status/{task_id}
轮询任务状态;状态值固定为 processing、completed、failed。完成后在 result 字段里返回与同步接口一致的逐字稿结构。
请求示例
curl -X GET "$BASE_URL/api/v1/extract/status/t_xxxxxxxxxxxxxxxx" \ -H "Authorization: Bearer vs_xxxx"
Response
{
"code": 200,
"data": {
"task_id": "t_xxxxxxxxxxxxxxxx",
"status": "completed",
"stage": "completed",
"is_terminal": true,
"poll_after_ms": 0,
"result": {
"transcript": "完整的逐字稿...",
"duration": 62.5,
"source": "file_upload"
}
}
}SDK 示例
下面两段示例都采用异步接口提交任务,并按服务返回的 poll_after_ms 自动轮询直到结束。
Python
import time
import requests
BASE_URL = "https://your-domain.com"
API_KEY = "vs_xxxx"
submit = requests.post(
f"{BASE_URL}/api/v1/extract/async",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": open("/path/to/video.mp4", "rb")},
data={"language": "zh"},
timeout=60,
)
submit.raise_for_status()
task_id = submit.json()["data"]["task_id"]
while True:
status = requests.get(
f"{BASE_URL}/api/v1/extract/status/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=30,
)
status.raise_for_status()
payload = status.json()["data"]
if payload["is_terminal"]:
if payload["status"] == "completed":
print(payload["result"]["transcript"])
else:
raise RuntimeError(payload["error"] or "extract failed")
break
time.sleep(payload["poll_after_ms"] / 1000)Node.js
import { readFile } from 'node:fs/promises';
const baseUrl = 'https://your-domain.com';
const apiKey = 'vs_xxxx';
const fileBytes = await readFile('/path/to/video.mp4');
const form = new FormData();
form.append('file', new Blob([fileBytes]), 'video.mp4');
form.append('language', 'zh');
const submitResp = await fetch(`${baseUrl}/api/v1/extract/async`, {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
});
const submitData = await submitResp.json();
const taskId = submitData.data.task_id;
while (true) {
const statusResp = await fetch(`${baseUrl}/api/v1/extract/status/${taskId}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const statusData = await statusResp.json();
const payload = statusData.data;
if (payload.is_terminal) {
if (payload.status === 'completed') {
console.log(payload.result.transcript);
} else {
throw new Error(payload.error || 'extract failed');
}
break;
}
await new Promise((resolve) => setTimeout(resolve, payload.poll_after_ms));
}POST 达人主页视频列表
/api/v1/profile/videos
传入达人主页链接,返回视频列表(标题、分享链接、发布时间、互动数据)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
profile_url | string | 必填 | 达人主页链接(长/短链接均可) |
count | integer | 可选 | 数量,默认 20,最大 50 |
Response
{
"code": 200,
"data": {
"creator": { "nickname": "达人昵称", "follower_count": 128000 },
"videos": [
{
"title": "视频标题",
"share_url": "https://www.douyin.com/video/730xxxx",
"publish_time": "2025-03-15 14:30:00",
"likes": 12000
}
]
}
}POST 批量文案提取
/api/v1/batch/extract
传入多个视频链接批量提取文案,最多 50 条。配合主页抓取使用。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
urls | string[] | 必填 | 视频链接数组,最多 50 条 |
错误码
| Code | 说明 |
|---|---|
200 | 成功 |
401 | 未携带 API Key 或 Key 无效 |
422 | 参数不合法,例如数量超过 50 |
500 | 服务器内部错误 |
API 密钥管理
创建和管理你的 API 密钥。调用任何接口前需在请求头携带有效 Key。
共 2 个密钥
| 名称 | API 密钥 | 今日用量 | 30天用量 | 状态 | 创建时间 | 操作 |
|---|
用量统计
查看 API 调用量和配额使用情况。
37
今日调用
892
近 30 天
50
每日配额
近 30 天调用趋势
最近调用记录
| 时间 | 接口 | 密钥 | 状态 |
|---|