Install
openclaw skills install @zhouq2039-lang/douyin-video-parser抖音视频解析-把抖音视频链接生成交互式 HTML 报告。免费,不依赖任何 API key。一条命令出逐字稿(带时间戳)+ 连贯稿(无时间戳)+ 可视化 HTML 报告(含一句话总结、金句卡片、核心观点、结构拆解、内容总结等)
openclaw skills install @zhouq2039-lang/douyin-video-parser经常需要"读"抖音视频里的内容——判断对账号有没有用、提炼观点、做素材库。 但 AI 模型本身不能听音频,必须借工具。这条 skill 就是那套工具的固化。
核心做法:
video_idplay_addr,快路径,无外部依赖)Network.loadingFinished 事件后截获 aweme/v1/web/aweme/detail 接口响应,提取标题和 mp4 直链。零手动操作、不需要登录。
<video> 元素请求的 CDN 直链(douyinvod.com)。抖音对这类视频常用 DASH 分离(视频流/音频流是两个文件),脚本会逐个下载探测,挑带音轨的那个用于转写。--cookies 指定 cookies.txt)urllib 下载 mp4 到系统临时目录(不依赖外部 curl)faster-whisper(CPU、int8、base 模型)转写不需要:z-ai、ffmpeg 外部命令、curl、登录、API key、手动 cookie。
faster-whisper 自带的 PyAV 已经能读 mp4 抽音轨。
CDP 方案需要本机装有 Edge/Chrome(Windows 一般自带 Edge),并安装 websocket-client 库。
以下权限均为执行抖音链接解析任务所必需的最小权限。仅在用户明确提供抖音链接(v.douyin.com / douyin.com / iesdouyin.com)时才触发,不执行任何与本任务无关的系统操作。
| 能力 | 用途 | 触发条件 | 最小化说明 |
|---|---|---|---|
| 网络请求 | 访问 iesdouyin.com 获取视频直链;访问抖音视频 CDN 下载 mp4 | 用户提供抖音链接时 | 仅访问抖音/iesdouyin 域名,不向任何第三方发送数据 |
| 浏览器子进程 | CDP 方案:启动 headless Edge/Chrome 截获抖音详情接口 | iesdouyin API 失效时 | 仅访问 douyin.com,使用独立临时 profile(不碰用户浏览器数据),用后即杀 |
| 网络请求(模型) | 首次运行时从 HuggingFace 下载 whisper base 模型(~74 MB) | 首次转写、模型未缓存时 | 下载到系统临时目录后缓存,之后不再重复下载 |
| Python 子进程 | 运行 faster-whisper 转写脚本(CPU、int8) | 转写步骤 | 仅调用 faster-whisper 库,无外部命令行调用 |
| 文件读写 | 保存逐字稿/连贯稿 txt 文件、写入 HTML 报告 | 转写完成后 | 输出到脚本 work/ 目录(可用 --out-dir 指定受控目录) |
| 临时文件 | 在系统 temp 目录存放 mp4 和 whisper 模型 | 下载/转写期间 | mp4 转写完成后自动删除(--keep-mp4 可保留) |
不执行的操作:不读取用户本地任意文件、不访问抖音以外的任意 URL、不发送数据到任何第三方服务、不上传用户数据。
收到抖音链接后,第一步不是直接跑脚本,而是先检查环境:
python3 --version
python3 -c "import faster_whisper; print('ok')"
如果报 ImportError,立即安装:
pip3 install faster-whisper
首次运行脚本时会自动从 HuggingFace 下载 base 模型(~74 MB)到系统临时目录,之后不再重复下载(模型已缓存)。
不需要。脚本全部使用 Python 标准库 urllib,不依赖外部 curl。
抖音 2026-08 反爬升级后,iesdouyin share API 不再返回视频数据,脚本会自动切换 CDP 浏览器方案。需要:
pip3 install websocket-client脚本优先使用本地模型目录 ~/.whisper-models-local(存在且完整时直接加载,避免反复下载);否则自动从 HuggingFace 下载 base 模型(~74 MB)到系统临时目录并缓存。
环境就绪后,直接跑:
python3 scripts/transcribe.py "https://www.douyin.com/video/7634579290163531035"
# 或短链
python3 transcribe.py "https://v.douyin.com/xa-wFiDUUvVs/"
脚本会输出:
MMDD-<video_id>-逐字稿.txt(带时间戳)MMDD-<video_id>-连贯稿.txt(无时间戳)MMDD-<video_id>-报告.html(交互式 HTML 报告)--print-transcript)报告为单文件 HTML,打开即可直接浏览,包含六大模块:
| 模块 | 说明 |
|---|---|
| Hero 区 | 视频标题 + 平台 + 时长 |
| 一句话总结 | 智能提取核心观点,关键词高亮 |
| 金句卡片 | 最多 8 句适合二次传播的金句(有金句就留,不设下限)。点击卡片弹出 3:4 竖版大卡片弹窗,适合直接截图分享 |
| 深度解析(胶囊书架) | 点击展开四张胶囊卡片 |
| - 核心观点 | 3-6 条核心观点,编号列表 |
| - 结构拆解 | 开场/核心/结尾分区 |
| - 内容判断 | 立场/可信度/可借鉴点 |
| - 内容亮点 | 观点排行列表 |
报告使用系统字体栈(不依赖外部字体 CDN),所有用户内容均经 HTML 转义防止 XSS。
拿到连贯稿和 HTML 报告后,AI 不要只甩出文件就结束。 先读取 MMDD-<video_id>-连贯稿.txt 文件的完整内容(终端默认只打印前 500 字摘要,不要依赖终端输出),再按以下结构输出分析:
用一句话概括这个视频在讲什么。
根据视频类型,选择对应的结构框架来拆:
如果是口播/观点类:
| 结构 | 内容 |
|---|---|
| 开头钩子 | 视频前 5 秒用了什么话术抓住注意力 |
| 核心论点 | 主要在讲什么 |
| 论据/案例 | 用了什么例子支撑 |
| 结尾/CTA | 最后怎么收的,有没有引导行动 |
如果是营销/带货类:
| 结构 | 内容 |
|---|---|
| 痛点切入 | 开头怎么戳中用户痛点 |
| 产品卖点 | 列出提到的卖点 |
| 信任背书 | 用了什么方式建立信任(数据/案例/权威) |
| 转化路径 | 怎么引导用户下单/关注/点击 |
如果是知识/教程类:
| 结构 | 内容 |
|---|---|
| 主题 | 这期在教什么 |
| 步骤拆解 | 按顺序列出教学步骤 |
| 关键提醒 | 有没有强调注意事项 |
| 适用场景 | 适合什么人/什么场景用 |
挑出最多 8 句适合二次传播的金句(有传播力、有观点、有情绪;有金句就留,不设下限)
small 或 medium(更慢、更准):
python3 scripts/transcribe.py "<链接>" --model small
python3 scripts/transcribe.py "<链接>" --cookies cookies.txt
medium 模型,base 在长视频上准确率会掉。/tmp/。收到抖音视频链接时,第一反应不是去浏览器截图、不是去硬装 yt-dlp。 直接:
python3 scripts/transcribe.py "<链接>"
然后读输出目录里的连贯稿文件(完整内容在文件里,终端只打印摘要),按"先看说话的人站在哪儿(立场)→ 再看跟我们阶段/数据对不对得上 → 最后才说能不能用"的顺序判断。 不要直接跳进内容里去结构化。
--out-dir 指定目录--print-transcripthtml.escape() 转义,使用 data-* 属性 + 事件委托替代 inline onclick,防止 XSS--keep-mp4)