---
name: "douyin-video-copy-extract"
description: "用于抖音文案提取、抖音文案一键提取、抖音视频文案提取、抖音视频转文字、抖音口播转文字和抖音逐字稿。用户粘贴抖音视频链接、分享文案或 aweme_id 后，提取视频上下文、原视频简介和口播逐字稿。"
source_client: "socialdatax-skills"
source_platform: "github"
source_skill: "douyin-video-copy-extract"
metadata:
  openclaw:
    requires:
      env: []
      bins: []
    primaryEnv: "SOCIALDATAX_API_KEY"
    install:
      - kind: "node"
        package: "socialdatax-skills"
        bins: []
    emoji: "🎙️"
    homepage: "https://socialdatax.com/ai?from=github"
---
<!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->

# 抖音文案提取

## 适用场景

用于抖音文案提取、抖音文案一键提取、抖音视频文案提取、抖音视频转文字、抖音口播转文字和抖音逐字稿。用户粘贴抖音视频链接、分享文案或 aweme_id 后，提取视频上下文、原视频简介和口播逐字稿。

## 快速开始

- 先给出当前 skill 支持的输入：视频链接、分享文案、内容 ID 或已有 job_id。
- 你通常会得到：视频基础信息、原视频简介、口播逐字稿、可复制文案和精简版；未完成时先继续查询任务状态。

## API Key 获取

获取或管理 API Key：访问 <https://socialdatax.com/ai?from=github>，按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`；不要引导用户使用其他域名。
- 先确认调用方式和命令实际运行位置：已认证的 hosted MCP 不要求本地 CLI 变量或 Node/npm；需要 Key 的直接 CLI 则在同一执行环境用下方命令检查。已能读取就继续原任务，不覆盖已有配置。不能运行命令或缺少 Node.js 属于执行环境问题，不能当成 Key 缺失；仅在确认用户没有 Key 时，才引导从上述官网获取。
- 本地 Agent：优先用客户端官方支持的持久化 Secret / env，并确认它注入 Agent 命令进程。WorkBuddy 可在当前可信工作空间的 `.codebuddy/settings.local.json` 中合并 `{"env":{"SOCIALDATAX_API_KEY":"<YOUR_API_KEY>"}}`，保留其他设置和 env；此路径只适用于 WorkBuddy，作用域只限该工作空间。真实 Key 由用户本地填写，文件不提交版本库。
- 远程 Agent：在实际运行命令的远程主机或服务配置客户端持久化 Secret / env，按该客户端的官方方式重新加载执行进程，并在同一远程会话检查；本机系统变量不会自动传到远程。不要因本机检查成功就认定远程也可用。
- 容器或云端沙箱 Agent：优先用平台支持的持久化 Secret / 环境变量注入功能，让它进入执行 CLI 的容器或沙箱；配置后按平台说明重建或重新加载，再在其中检查。不要改宿主机变量来代替沙箱注入；若平台无法持久保存或注入，说明限制并引导用户使用平台支持的鉴权方式，不绕过隔离。
- 检查为 false 时，先逐项排查：配置文件或 Secret 是否位于正确主机、工作空间和作用域，工作空间是否可信，字段是否正确且保留了已有设置，变量是否注入命令进程（仅 MCP server 的 env 不算），以及是否按官方说明重新加载或完全重启。修正后在原执行环境复查；只有明确不支持客户端持久化，或完成上述排查仍不可用，才用该环境官方支持的用户级/服务级环境变量兜底。不能仅因一次检查或重新加载失败就跳到系统配置。
- 系统兜底按实际执行主机处理：Windows 可用用户环境变量；macOS 可由用户在本机终端隐藏输入（如 Bash `read -s`）后传给 `launchctl setenv`，仅对当前登录会话有效，重登或重启电脑后需重新加载。输入失败、空输入或设置失败时明确报错并停止，返回非零退出码；清理临时变量不能覆盖原错误状态。配置后完全退出对应客户端及后台进程再打开；远程服务按其运行方式重载，沙箱仍通过平台注入。单独终端临时 `export`、只写 shell 启动文件或只关窗口都不能证明 Agent 已继承。真实 Key 不出现在聊天、日志、截图、命令历史或 Skill 文件里。
- 在实际执行 CLI 的同一环境运行 `node -e "console.log(JSON.stringify({apiKeyReadable:Boolean(['SOCIALDATAX_API_KEY','SOCIAL_MEDIA_MCP_API_KEY'].map(name=>process.env[name]?.trim()).find(Boolean))}))"`，只报告布尔结果，不打印 Key 或全部环境变量。检查遵循 CLI 的顺序：先读取去除首尾空白后的主变量，再兼容既有旧变量；新增配置仍统一用 `SOCIALDATAX_API_KEY`。`apiKeyReadable: false` 时停止业务调用并按上面的顺序排查；`true` 只证明存在可读取的非空值，继续原业务请求验证鉴权，不代表 Key 有效或余额充足。不要在检查命令里临时注入变量制造成功。

## 直接调用命令

优先使用 direct CLI；能运行 shell 命令的 Agent 不需要额外配置 MCP server：

```bash
npx -y socialdatax-skills@latest douyin transcript \
  --url "<douyin_content_url_or_share_text>" --pretty \
  --source-client socialdatax-skills --source-platform github \
  --source-skill douyin-video-copy-extract

npx -y socialdatax-skills@latest douyin transcript \
  --aweme-id "<aweme_id>" --pretty --source-client socialdatax-skills \
  --source-platform github --source-skill douyin-video-copy-extract

npx -y socialdatax-skills@latest douyin transcript \
  --job-id "<job_id>" --pretty --source-client socialdatax-skills \
  --source-platform github --source-skill douyin-video-copy-extract
```

## 参数说明

文案提取 / 转写：
- 输入：`--url <douyin_video_url_or_share_text>`：当用户粘贴抖音视频链接、短链或分享文案，想做文案提取 / 口播转文字时使用。
- 输入：`--aweme-id <aweme_id>`：当已经知道抖音视频 ID，想做文案提取 / 口播转文字时使用。
- 输入：`--job-id <job_id>`：继续查询已有文案提取 / 转写任务；不要为了查询状态再次提交新任务。
- 说明：单次文案提取 / 转写调用只能使用 `--url`、`--aweme-id` 或 `--job-id` 其中一种入口。

通用：
- 可选：`--pretty`：只影响输出格式，不改变实际请求结果。
- 可选：`--source-client socialdatax-skills --source-platform github --source-skill douyin-video-copy-extract`：这是当前 Agent Skill 的来源标记；按本 Skill 示例执行时保持这些值不变。

执行步骤：第一步，用 `--url` 或 `--aweme-id` 提交抖音视频文案提取；如果用户已经给了 `job_id`，直接用 `--job-id` 查询。
第二步，先看返回 JSON 里的 `data.is_terminal`：如果不是 `true`，复制同一个 `data.job_id`，运行上方 `douyin transcript --job-id <job_id>` 命令继续查询。
第三步，只有 `data.is_terminal` 是 `true` 时才交付结果：如果 `data.status` 是 `succeeded`，整理视频信息、简介和逐字稿；否则说明 `data.error.message` 或 `data.message`。
循环规则：每次查询返回后都先判断 `data.is_terminal`。只要 `data.is_terminal` 不是 `true`，就继续查询同一个 `data.job_id`；先等 `data.next_poll_after_seconds`，如果没有这个字段，就短暂等待后再查。
停止条件只有三类：终态、工具无法继续运行、用户要求停止。拿到 `data.job_id` 后，提交动作最多一次；不要重复提交同一个视频，不要把只有 `data.job_id` 的内容当作最终结果。
失败时，只在 `data.error.retryable` 是 `true` 时建议稍后重试；如果是 `false`，不要建议重复提交同一个视频。

## 输出建议

优先输出可直接复制的文案提取结果：视频基础信息、原视频简介、口播逐字稿、可复制文案和精简版；未完成时继续查询任务状态。

固定输出结构：任务成功后按以下顺序组织；字段只使用返回中可见内容，缺失时标注未返回，不补造。

1. 视频基础信息：标题、作者、发布时间、时长、aweme_id、原始链接等；只有返回中存在时才输出。
2. 原视频简介：优先使用 `description`，保留原意，适合用户直接复制或继续整理。
3. 口播逐字稿：输出转写正文，尽量保持原口播顺序。
4. 可复制文案版：基于原视频简介和口播逐字稿整理为便于复制的正文，不新增未出现的信息。
5. 精简版：用短段落概括视频主要内容，方便用户快速判断是否继续复盘。
6. 任务状态：如果任务未完成或失败，只输出 `job_id`、`status`、`next_action`、错误信息和是否可重试。

优先交付 `description` 原视频简介、口播逐字稿、可复制文案、精简版，以及返回中可见的视频上下文。
输出前先检查 `data.is_terminal`：如果不是 `true`，先用同一个 `data.job_id` 继续查询，不要提前写最终文案。只有工具无法继续运行、会话被中断或用户要求停止时，才输出 `data.job_id`、`data.status` 和 `data.next_action`，提示用户稍后继续查询。
只有 `data.is_terminal` 是 `true` 且 `data.status` 是 `succeeded` 时才输出逐字稿；失败时输出 `data.error.message` 或 `data.message`。
失败时先看 `data.error.retryable`：只有值为 `true` 才建议稍后重试；值为 `false` 时说明当前视频不适合重复提交。
如果结果显示没有可处理的视频资源或任务失败，按当前任务结果说明，不要换平台重试。
除非用户另行要求，当前 skill 只做文案提取和任务状态续查，不扩展到其他分析或改写任务。

## MCP 工具

与上面 direct CLI 命令对应的 MCP 工具：

- `douyin_submit_video_speech_text_by_video_url`
- `douyin_submit_video_speech_text_by_aweme_id`
- `douyin_get_video_speech_text_job`

如果当前 Agent 已接入 MCP 工具，只使用抖音视频文案提取对应工具：`douyin_submit_video_speech_text_by_video_url`、`douyin_submit_video_speech_text_by_aweme_id`、`douyin_get_video_speech_text_job`。
继续查询已有任务时，调用 `douyin_get_video_speech_text_job`；不要为了轮询状态再次调用 submit 工具。任务未到终态时继续用同一个 `job_id` 查询。

## 安全边界

这是只读 skill，可通过 direct CLI 或 hosted MCP 提交有限范围的视频转文字分析任务，也可以查询已有任务状态。 运行时使用用户环境变量中的 `SOCIALDATAX_API_KEY`；生成的 Skill 文件不包含 API Key。 不会读取本地浏览器数据，也不会执行登录、发帖、点赞、评论或账号修改。

## 示例结果

- 示例展示格式，不代表固定字段：成功=视频基础信息/原视频简介/逐字稿/可复制文案/精简版；未完成=继续查询同一 job_id；失败=错误原因/是否可重试/下一步。

## 异常处理

- 凭证来源排查：先确认本次调用使用 CLI 还是 MCP。CLI 在实际执行环境中按「API Key 获取」的检查规则排查生效配置（主变量优先，兼容既有旧变量）；MCP 检查当前连接实际使用的鉴权配置，不要求另设本地 CLI 变量。配置缺失时沿用前面的客户端排查与兜底顺序；不要输出 Key、Authorization header 或秘密配置值。

- 如果出现 SDK/依赖缺失、npm 网络、Node.js/npm/npx 不可用或执行权限错误：这是本地运行环境、依赖安装、网络或 AI 平台授权问题，不是 SocialDataX API Key 或业务数据返回错误。仅在用户已授权的范围内安装或修复本任务所需依赖，优先使用项目目录或临时环境。环境执行权限不等于用户授权；超出授权范围时，先说明具体改动并征得同意，包括全局安装、运行时升级或系统配置变更。需要网络或执行授权时提醒用户同意或完成授权；处理后继续原命令；不要改用公开网页搜索替代 SocialDataX 数据。
- 提交或查询异常：保留错误信息，先按上述实际凭证来源核对配置，并检查输入链接或 ID、以及 `job_id` 是否完整。
- 如果返回 `insufficient_balance` 或“积分不足”：不要重复提交或反复查询；展示错误中的官方充值链接（https://socialdatax.com/dashboard/billing，可带渠道参数）；若没有该链接，使用 https://socialdatax.com/dashboard/billing。充值后继续刚才失败的调用；已有任务或部分结果时，按对应任务查询、分页续查规则恢复。
- 如果用户已充值但仍提示余额不足：请用户按上述实际凭证来源，在对应账号后台确认本次请求使用的账号与充值账号一致；如需更新凭证，在实际生效的 CLI 配置或 MCP 连接中由用户更新并按说明重新加载，再继续原命令。不要仅因本地新变量缺失就要求重新配置，也不要展示凭证明文。
- 如果提交失败且没有返回 `data.job_id`，确认参数和 API Key 后可以重新提交；如果已经拿到 `data.job_id`，后续异常只查询同一个任务，不要重复提交视频。
- 任务失败：优先展示 `data.error.message` 或 `data.message`；只有 `data.error.retryable` 是 `true` 时才建议稍后重试。

## 常见问题

- 没结果：确认视频链接、分享文案、内容 ID 或 `job_id` 完整。
- 调用失败：如果已有 `job_id`，只查询同一个任务；如果没有 `job_id`，先确认 `SOCIALDATAX_API_KEY` 和输入格式；如果是 `insufficient_balance` 或“积分不足”，按上述官方充值链接说明完成充值后，按上述恢复规则继续，不要反复重试。
- 担心账号安全：这是只读能力，不登录、不发帖、不点赞、不评论。
- 想整理成文案：先等任务成功，再基于逐字稿和返回上下文整理可复制版本。
