skills/video-download/SKILL.md
Canonical social-video download skill for all supported platforms and table workflows. Always use this skill as the single download entrypoint when handling Douyin/抖音, Xiaohongshu/小红书, Bilibili/B站, TikTok, YouTube, Twitter/X, Instagram links, or when batch-processing Lark Base/Sheet rows that include social post URLs and need video files.
npx skillsauth add csfuwwc/md-skills video-downloadInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
scripts/download.py,不要在业务脚本里另写直连下载器。从分享链接下载视频到本地。抖音/小红书/B站使用 Playwright 无头浏览器,TikTok 优先使用真实浏览器 CDP 抓流,其他站点使用 yt-dlp。
重要:下载 B站视频前,必须先检查登录状态(未登录只能获取 480p)。
先进入 skill 根目录后再执行以下命令(命令均使用相对路径):
cd <your-skill-root>/video-download
python3 ./scripts/download.py check-login bilibili
0(输出 LOGIN_OK)→ 直接跳到步骤 3 下载2(输出 LOGIN_REQUIRED)→ 需要执行步骤 2 登录当 check-login 返回退出码 2 时,按以下流程操作:
python3 ./scripts/download.py login bilibili --signal-file /tmp/video_dl_login_done
立即向用户展示确认按钮,使用 AskQuestion 工具:
用户点击确认后:
touch /tmp/video_dl_login_done,等待登录脚本退出,然后继续下载兜底:如果用户直接关闭了浏览器窗口,登录脚本会自动检测到并保存 cookie,无需信号文件。
python3 ./scripts/download.py "<分享文本或链接>" [输出文件名.mp4]
脚本自动识别平台,优先使用 Playwright,其余 fallback 到 yt-dlp:
| 平台 | 支持的链接格式 | 引擎 | 需要登录 | 备注 |
|------|---------------|------|---------|------|
| 抖音 | v.douyin.com/xxx 短链、www.douyin.com/video/xxx、modal_id=xxx | Playwright | 否 | 抓网络请求 |
| 小红书 | xiaohongshu.com/discovery/item/xxx、explore/xxx、xhslink.com/xxx | Playwright | 否 | 抓网络请求 |
| B站 | bilibili.com/video/BVxxx、b23.tv/xxx 短链 | Playwright | 推荐 | 解析 __playinfo__,需要 ffmpeg |
| TikTok | tiktok.com/@user/video/xxx、vm.tiktok.com/xxx | CDP→tikwm→yt-dlp | 推荐 | 优先真实浏览器 CDP;app-only/shop 场景自动尝试 tikwm 兜底 |
| YouTube | youtube.com/watch?v=xxx、youtu.be/xxx | yt-dlp | 否 | |
| Twitter/X | x.com/xxx/status/xxx、twitter.com/... | yt-dlp | 否 | |
| Instagram | instagram.com/reel/xxx、instagram.com/p/xxx | yt-dlp | 否 | 私密内容需登录 |
| 其他 | 任意视频链接 | yt-dlp | 视站点 | 支持 1700+ 站点 |
~/Downloads/playwright(抖音/小红书/B站)、yt-dlp(其他站点)、ffmpeg脚本会优先尝试连接以下 CDP 端口抓取 video/mp4 响应体:
VIDEO_DOWNLOAD_TIKTOK_CDP_ENDPOINT(如果设置)http://127.0.0.1:9225http://127.0.0.1:9222端口约定(团队规则):
VIDEO_DOWNLOAD_TIKTOK_CDP_ENDPOINT,应把它视为唯一目标端口(例如 9225),不应在任务层再切换到其他端口进行重试。http://127.0.0.1:9225。若 CDP 抓取失败,会自动尝试 tikwm 解析;若仍失败,再按环境变量决定是否回退 yt-dlp。
失败重试策略(已内置):
CDP -> tikwmtikwm -> CDPVIDEO_DOWNLOAD_TIKTOK_ALLOW_YTDLP_FALLBACK=1 决定是否回退 yt-dlp可通过环境变量指定端口:
VIDEO_DOWNLOAD_TIKTOK_CDP_ENDPOINT=http://127.0.0.1:9225 \
python3 ./scripts/download.py "<tiktok链接>" "output.mp4"
可选环境变量:
VIDEO_DOWNLOAD_TIKTOK_DISABLE_TIKWM=1:禁用 tikwm 兜底VIDEO_DOWNLOAD_TIKTOK_ALLOW_YTDLP_FALLBACK=1:允许最终回退 yt-dlp每次 TikTok 成功下载后,会在视频旁边生成一个元文件:
<视频文件路径>.meta.json关键字段:
source: cdp / tikwm / ytdlptarget_video_idresolved_video_idexpected_durationactual_durationvalidation.id_okvalidation.duration_okvalidation.video_track_ok终端也会打印一行摘要,便于批处理写表:
[TikTok/META] source=... id_ok=... duration_ok=... video_track_ok=...
# 登录(打开可见浏览器)
python3 ./scripts/download.py login bilibili
# 带信号文件的登录(Agent 交互模式用)
python3 ./scripts/download.py login bilibili --signal-file /tmp/video_dl_login_done
# 检查登录状态
python3 ./scripts/download.py check-login bilibili
Cookie 保存在 ~/.config/video-download/<平台>_cookies.json,自动检测过期。
支持的平台: bilibili / douyin / xiaohongshu
pip3 install playwright && python3 -m playwright install chromium
brew install ffmpeg # B站视频合并需要
brew install yt-dlp # YouTube/Twitter/Instagram 等站点需要
| 问题 | 解决方案 |
|------|----------|
| SSL 证书错误 | 脚本已内置 ssl._create_unverified_context |
| 未捕获到视频地址 | 增加等待时间,或内容需要登录/是图文非视频 |
| curl/下载 403 | 检查 Referer 头是否匹配平台域名 |
| B站 ffmpeg 不存在 | brew install ffmpeg |
| B站画质低 | 执行 login bilibili 登录后重新下载 |
| CDN 地址过期 | 重新运行,URL 有几小时时效 |
| cookie 过期 | 重新执行 login 命令 |
| yt-dlp 未安装 | brew install yt-dlp 或 pip3 install yt-dlp |
tools
Use when the user asks to install Feishu/Lark CLI, configure lark-cli, connect an agent with Feishu CLI, check or refresh lark-cli auth, recover expired tokens, or start a Feishu device-flow login.
documentation
Use when a user provides Xiaohongshu/XHS/xhslink URLs, asks to fetch 小红书 note or video content, likes, saves/collections, comments, publish metadata, or wants to fill a spreadsheet/Base from 小红书 links.
content-media
Use when a user provides Weibo/微博 links, asks to fetch 微博 post text, likes, video visual content, or wants to fill a Lark Base table from 微博 links.
testing
Read and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Supports multiple accounts. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip.188.com.