🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

Douyin Video Skills

by @poca233

抖音视频搜索、筛选、链接获取、文案提取与修正工具。支持在抖音网页中登录后搜索自定义关键词,按筛选参数从搜索结果中选择合适视频;点开候选视频后先校验当前弹层标题与目标搜索结果标题是否一致,若不一致则自动关闭弹层并继续尝试后续候选,再提取视频语音文案并输出原始稿、修正版、修正说明。适用场景包括抖音二次创作前的素材采集...

Versionv1.0.0
Downloads523
TERMINAL
clawhub install douyin-video-skills

📖 About This Skill


name: douyin-video-skills description: "抖音视频搜索、筛选、链接获取、文案提取与修正工具。支持在抖音网页中登录后搜索自定义关键词,按筛选参数从搜索结果中选择合适视频;点开候选视频后先校验当前弹层标题与目标搜索结果标题是否一致,若不一致则自动关闭弹层并继续尝试后续候选,再提取视频语音文案并输出原始稿、修正版、修正说明。适用场景包括抖音二次创作前的素材采集、竞品研究、视频文案提取与清洗。"

抖音视频搜索、文案提取与修正

从抖音网页中搜索自定义关键词,筛选并选定目标视频,校验当前视频是否正确,再提取视频语音文案,并对抽取结果进行修正和落盘。

功能概述

  • 搜索视频: 从抖音首页输入关键词并进入视频搜索结果,避免直接跳搜索 URL
  • 筛选结果: 按标题关键词、账号类型、点赞、时长、内容类型等参数筛选候选视频
  • 锁定目标视频: 点开候选视频后,校验标题是否匹配(支持归一化匹配、包含匹配、相似度匹配)
  • 获取稳定链接: 优先使用页面 modal_id 组装稳定视频链接,必要时再尝试分享按钮
  • 提取文案: 下载视频、提取音频、调用 ASR 获取语音文案
  • 修正文案: 结合标题、标签、上下文和领域常识修正 ASR 错误
  • 自动保存: 输出原始稿、修正版、修正说明、meta 信息等文件
  • 环境要求

    依赖安装

    pip install requests ffmpeg-python
    

    系统要求

  • FFmpeg 必须安装在系统中(用于音视频处理)
  • macOS: brew install ffmpeg
  • Ubuntu: apt install ffmpeg
  • 浏览器自动化要求

    需要可用的 playwright-cli 以及它的 skills。

    #### 安装 playwright-cli

    npm install -g @playwright/cli@latest
    

    #### 安装 playwright-cli 的 skills

    playwright-cli install --skills
    

    #### 校验安装

    playwright-cli --version
    

    推荐使用有头模式、持久化登录态,并显式指定 profile 目录:

    playwright-cli -s=douyinflow open https://www.douyin.com/ --headed --persistent --profile ~/.playwright/douyinflow
    

    API 密钥配置(仅文案提取需要)

    文案提取功能使用硅基流动 API,需要设置环境变量:

    export API_KEY="your-siliconflow-api-key"
    

    对 OpenClaw / Gateway 环境,建议写入:

    ~/.openclaw/.env
    

    获取 API 密钥: https://cloud.siliconflow.cn/

    使用方法

    方法一:使用总控脚本(推荐)

    python3 skills/douyin-video-skills/scripts/run_pipeline.py \
      --keyword "青少年无人机" \
      --pick-index 1 \
      --must-include 青少年 \
      --must-include 无人机 \
      --content-type-hint 培训 \
      --content-type-hint 科普 \
      --account-hint 教育 \
      --profile ~/.playwright/douyinflow \
      --human-delay-min-ms 800 \
      --human-delay-max-ms 2500 \
      --captcha-max-waits 3 \
      --title-match-mode default \
      --title-min-similarity 0.82 \
      --max-title-retry 5 \
      --headed \
      --persistent
    

    总控脚本支持的主要参数

    --keyword              自定义搜索词(必填)
    --pick-index           选择第几个符合条件的结果(默认 1)
    --must-include         标题必须包含的词,可多次传入
    --exclude-word         需要排除的词,可多次传入
    --content-type-hint    内容类型提示,如 培训 / 科普 / 推荐,可多次传入
    --account-hint         账号类型提示,如 教育 / 俱乐部 / 教练,可多次传入
    --min-likes            最低点赞量
    --duration-min-sec     最短时长(秒)
    --duration-max-sec     最长时长(秒)
    --profile              playwright-cli 持久化浏览器 profile 目录(默认 ~/.playwright/douyinflow)
    --human-delay-min-ms   人类化操作最短等待时间(毫秒)
    --human-delay-max-ms   人类化操作最长等待时间(毫秒)
    --captcha-max-waits    验证码暂停等待次数(默认 3)
    --title-match-mode     标题匹配模式:strict / default / loose
    --title-min-similarity 标题最小相似度阈值(默认 0.82)
    --max-title-retry      标题校验失败后最多尝试多少个候选(默认 5)
    --headed               浏览器前台运行
    --persistent           使用持久化登录态
    --output-dir           输出目录(默认 output)
    

    方法二:分步执行

    #### 1. 打开抖音并复用登录态(首次运行后会在 ~/.playwright/douyinflow 生成登录态文件,后续可复用)

    playwright-cli -s=douyinflow open https://www.douyin.com/ --headed --persistent --profile ~/.playwright/douyinflow
    

    #### 2. 从首页输入搜索词并进入视频结果页

    推荐让总控脚本自动完成,不要直接手写跳转搜索 URL。这样更接近真人操作,更利于减少验证码。

    #### 3. 选定视频后做标题一致性校验

    python3 skills/douyin-video-skills/scripts/title_match_check.py \
      --expected "目标搜索结果标题" \
      --actual "当前弹层标题" \
      --mode default \
      --min-similarity 0.82
    

    > 默认不是死板的逐字完全相等,而是按“归一化标题 + 包含关系 + 相似度阈值”综合判断。 > 若仍不匹配,不继续当前视频提取;应自动关闭弹层并尝试下一个候选。

    #### 4. 提取视频文案

    python3 skills/douyin-video-skills/scripts/douyin_downloader.py \
      --link "https://www.iesdouyin.com/share/video/" \
      --action extract \
      --output ./output
    

    #### 5. 修正文案并生成附加文件

    python3 skills/douyin-video-skills/scripts/transcript_cleanup.py \
      --title "视频标题" \
      --raw ./output//transcript.md \
      --outdir ./output/
    

    筛选参数示例

    {
      "keyword": "青少年无人机",
      "pickIndex": 1,
      "mustInclude": ["青少年", "无人机"],
      "excludeWords": ["直播", "纯广告", "录播回放"],
      "minLikes": 0,
      "durationMinSec": 15,
      "durationMaxSec": 120,
      "contentTypeHints": ["培训", "科普", "推荐"],
      "accountHints": ["教育", "俱乐部", "教练"]
    }
    

    更详细的筛选思路参考:

  • references/filter-rules.md
  • 发布文案参考:

  • references/publish-copy.md
  • 输出目录结构

    完整执行后,每个视频建议保存到独立文件夹:

    output/
    └── /
        ├── meta.json
        ├── source-link.txt
        ├── transcript.md
        ├── transcript-raw.md
        ├── transcript-clean.md
        └── transcript-fixes.md
    

    文件说明

  • meta.json: 标题、关键词、视频ID、筛选参数、提取时间
  • source-link.txt: 最终用于提取的链接
  • transcript.md: 提取器原始产物
  • transcript-raw.md: 原始转写稿
  • transcript-clean.md: 修正版文案
  • transcript-fixes.md: 修正说明与待确认项
  • 工作流程

    搜索与筛选

    1. 打开抖音首页并复用登录态 2. 以较慢节奏输入搜索词并点击搜索 3. 切换到视频结果页 4. 从搜索结果中读取候选视频列表 5. 按筛选参数过滤候选项 6. 选中第 N 个符合条件的视频

    标题一致性校验

    1. 记录目标搜索结果标题 2. 点开视频进入弹层 3. 读取当前页面 modal_id 4. 读取当前弹层标题 5. 执行标题校验脚本(默认使用归一化匹配 + 相似度阈值) 6. 若标题不一致,自动关闭弹层,回到结果列表继续尝试后续候选,直到找到校验通过的视频

    提取与修正

    1. 用 modal_id 组装稳定视频链接:https://www.iesdouyin.com/share/video/ 2. 下载视频到临时目录 3. 使用 FFmpeg 从视频中提取音频(MP3 格式) 4. 调用硅基流动 SenseVoice API 进行语音识别 5. 保存 transcript.md 6. 基于标题、标签、上下文和领域常识修正 ASR 文案 7. 输出 transcript-raw.mdtranscript-clean.mdtranscript-fixes.md

    常见问题

    搜索时频繁触发验证码怎么办

    建议优先使用以下方式减少验证码:

  • 使用固定 profile 目录复用登录态
  • 从首页输入搜索,不要直接跳搜索 URL
  • 增加人类化延迟,不要秒点秒跳
  • 遇到验证码时先手工完成,再继续流程
  • 当前脚本已支持:

  • 人类化延迟参数:--human-delay-min-ms / --human-delay-max-ms
  • 验证码暂停恢复:检测到验证码后暂停,等待人工处理完成再继续
  • 搜索结果点开后,当前视频变了

    这是抖音网页常见问题。必须增加校验:

  • 标题先做归一化
  • 再判断包含关系
  • 最后再看相似度是否达到阈值
  • 若仍不一致,不要在错误视频上继续提取。应执行:关闭弹层 → 回到结果列表 → 尝试下一个候选标题 → 重新校验,直到找到正确视频。

    分享按钮不稳定

    PC 端分享按钮可能:

  • 只在悬停时出现
  • 位于播放器浮层中,不易点击
  • DOM 结构经常变化
  • 因此本 skill 默认:

  • 优先读取 modal_id
  • modal_id 组装稳定视频链接
  • 不把“复制链接”当成唯一依赖
  • 提取文案失败

  • 检查 API_KEY 是否已设置
  • 确保 API 密钥有效且有足够额度
  • 确保 FFmpeg 已正确安装
  • 确保输入链接为有效抖音分享链接或可解析的视频链接
  • 文案有错别字或语义不通

    ASR 常见问题包括:

  • 同音错字
  • 连词错误
  • 重复词
  • 断句错误
  • 领域术语误识别
  • 因此提取后必须执行修正步骤。

    注意事项

  • 本工具仅供学习和研究使用
  • 使用时需遵守相关法律法规
  • 请勿用于任何侵犯版权或违法的目的
  • 不要把分享按钮点击成功作为唯一成功条件
  • 不要直接信任 ASR 文案用于分析
  • 不要在未完成标题一致性校验前就进入提取
  • 不要把 Playwright 的 element ref 写死成固定编号
  • 📋 Tips & Best Practices

    搜索时频繁触发验证码怎么办

    建议优先使用以下方式减少验证码:

  • 使用固定 profile 目录复用登录态
  • 从首页输入搜索,不要直接跳搜索 URL
  • 增加人类化延迟,不要秒点秒跳
  • 遇到验证码时先手工完成,再继续流程
  • 当前脚本已支持:

  • 人类化延迟参数:--human-delay-min-ms / --human-delay-max-ms
  • 验证码暂停恢复:检测到验证码后暂停,等待人工处理完成再继续
  • 搜索结果点开后,当前视频变了

    这是抖音网页常见问题。必须增加校验:

  • 标题先做归一化
  • 再判断包含关系
  • 最后再看相似度是否达到阈值
  • 若仍不一致,不要在错误视频上继续提取。应执行:关闭弹层 → 回到结果列表 → 尝试下一个候选标题 → 重新校验,直到找到正确视频。

    分享按钮不稳定

    PC 端分享按钮可能:

  • 只在悬停时出现
  • 位于播放器浮层中,不易点击
  • DOM 结构经常变化
  • 因此本 skill 默认:

  • 优先读取 modal_id
  • modal_id 组装稳定视频链接
  • 不把“复制链接”当成唯一依赖
  • 提取文案失败

  • 检查 API_KEY 是否已设置
  • 确保 API 密钥有效且有足够额度
  • 确保 FFmpeg 已正确安装
  • 确保输入链接为有效抖音分享链接或可解析的视频链接
  • 文案有错别字或语义不通

    ASR 常见问题包括:

  • 同音错字
  • 连词错误
  • 重复词
  • 断句错误
  • 领域术语误识别
  • 因此提取后必须执行修正步骤。