微信视频号视频下载与二次创作
Overview
本技能覆盖从「视频号分享链接」到「可发布的原创短视频」的完整链路:
sph 链接 → 下载 → 语音转写 → 选题提炼 → 原创脚本 → AI 配音 → 成品视频
核心下载器 scripts/fallback_download.py 零第三方依赖(仅 Python 标准库,860 行),
开箱即用,不需要克隆任何仓库、不需要 pip 安装、不需要 MCP 连接器授权。
两条下载路径
| 路径 | 依赖 | 适用 |
|---|---|---|
零依赖(首选) fallback_download.py |
无,纯标准库 | 绝大多数场景,分发即用 |
MCP 增强 download_channels.py |
本机 video-link-mcp 项目 |
需要项目内其他能力时 |
优先用零依赖路径。仅当用户机器上已装 video-link-mcp 且需要其扩展能力时才走第二条。
凭据配置
视频号没有公开媒体直链,分享链接必须经「元宝代解析 → finder-preview get_feed_info」
换取带 token 的播放地址,因此需要腾讯元宝登录 Cookie。
Cookie 按以下优先级获取(任选其一):
--cookie "<cookie 字符串>"命令行参数- 环境变量
YUANBAO_COOKIE - 文件
~/.workbuddy/credentials/yuanbao_cookie.txt
无 Cookie 时的降级方案(脚本原生支持):
- har 子命令:从浏览器/抓包工具导出的 .har 文件提取直链
- direct 子命令:已知 MP4 直链时直接下载
Cookie 会过期(服务端返回 HTTP 401「登录态已过期」)。遇到 401 必须重新授权,
运行 scripts/auth_yuanbao.py 走一次扫码登录即可。
快速决策
| 用户意图 | 执行任务 |
|---|---|
| 「下载这个视频号视频」+ 链接 | 任务 A |
| 「转成文字 / 要字幕 / 要文案」 | 任务 B |
| 「提炼选题 / 写脚本 / 怎么做原创」 | 任务 C |
| 「做成视频 / 配音 / 出成品」 | 任务 D |
| 报 HTTP 401 / 未找到 Cookie | 先做授权 |
授权(首次或 Cookie 过期时)
python scripts/auth_yuanbao.py
脚本打开有头浏览器(优先系统 Chrome),用户扫码登录元宝后自动检测并保存 Cookie。
要点:
- 绝不能用 headless:腾讯微信扫码登录页对无头浏览器有 anti-bot 拦截,页面会被清空。
- 登录态判定:hy_token / hy_user / hy_source 三个 cookie 出现任一即可。
- 验证:python scripts/fallback_download.py check 返回 {"ok": true} 即就绪。
任务 A:下载视频
# 解析(不下载,看元数据)
python scripts/fallback_download.py parse "<sph 链接>"
# 下载单个
python scripts/fallback_download.py download "<sph 链接>" --out 视频号下载
# 批量(urls.txt 每行一个链接)
python scripts/fallback_download.py batch urls.txt --out 视频号下载
# 只要视频/图集/原声/封面
python scripts/fallback_download.py download "<链接>" --want video
所有子命令输出 JSON(ok / error / 元数据 / 文件路径),便于程序化解析。
批量场景也可直接用 scripts/download_channels.py(带进度与去重,依赖 video-link-mcp)。
任务 B:语音转写
python scripts/transcribe.py <视频目录> -o <文字稿目录>
要点:
- 转写前探测时长与音轨。短于 15 秒的视频通常是纯画面/字幕,无口播,转写为空属正常,这类直接从标题+画面提炼选题。
- 模型走 ModelScope(HuggingFace 常被本机代理拦截返回 502)。
- 2 分钟左右的教程/观点类视频转写质量最好。
- 需先 pip install faster-whisper imageio-ffmpeg modelscope。
任务 C:选题提炼与原创脚本
读取任务 B 的文字稿,产出三件套(模板见 references/workflow.md):
- 选题分析——选题为什么成立、爆款结构拆解、可原创的切入角度
- 原创脚本——第一人称重写,60–90 秒
- 发布文案——标题×3 + 简介 + 话题标签 + 封面文案
版权红线(必须遵守):只提取参考视频的「通用洞察 + 内容结构」做原创改写。
严禁复制原作者的特定产品名、skill 名、原话表述、具体案例细节。
把他人视频加噪点/水印去重后当自己发布属搬运,平台会判「非原创」限流或封号。
正确做法:基于改写后的脚本自己出镜录制。
任务 D:成品视频合成
python scripts/compose_video.py --script 脚本.md -o 成品.mp4 [--videos 画面目录]
流程:脚本按 ## 拆场景 → 逐场景 edge-tts 配音 → 画面循环+zoompan 拉长到配音时长
→ 生成 SRT 字幕 → 拼接封装为 9:16 竖屏 MP4。
- 配音免费(edge-tts):男声
zh-CN-YunxiNeural、女声zh-CN-XiaoxiaoNeural --videos给 AI 生成的画面片段;不给则用纯色渐变背景 + 字幕- AI 生图/生视频消耗 WorkBuddy 积分(生图 5–10/张,生视频 50–100/5 秒),执行前须告知用户并获同意
关键约束(非显而易见,务必遵守)
- 元宝授权必须用有头浏览器 + 系统 Chrome,headless 会被 anti-bot 清空页面。
- ffmpeg 用
imageio-ffmpeg(pip 国内源)。不要用 winget(极慢)或 Playwright 自带的(只有 pad/crop/scale,缺 libx264 与噪声/文字滤镜)。 - pip 安装大包须设
CODEBUDDY_SAFE_DELETE_ENABLED=0,否则会被 safe-delete 保护机制中断。 - whisper 模型走 ModelScope,HuggingFace 常被代理拦截。
- ffmpeg 滤镜里的 Windows 字体路径要转义:
\→/、:→\:。 - 工作区内的
.txt被 Python 写入可能被保护机制污染(出现%TSD-Header-###%头,致 ffmpeg concat 失败)。清单类文件写系统临时目录。 - subprocess 捕获 ffmpeg 输出用
errors='replace',否则中文/二进制 stderr 抛UnicodeDecodeError。 - 视频号无第三方自动发布 API——发布只能本人通过视频号助手扫码手动上传,勿向用户承诺自动发布。
完整排错手册见 references/troubleshooting.md。
Resources
scripts/
fallback_download.py— 核心,零依赖视频号下载器(parse/download/batch/direct/har/check)auth_yuanbao.py— 元宝 Cookie 授权(有头浏览器扫码)download_channels.py— 批量下载(依赖 video-link-mcp,带进度与去重)transcribe.py— 批量语音转写(faster-whisper)compose_video.py— 配音 + 画面 + 字幕合成成品 MP4setup_env.py— 可选环境安装(video-link-mcp venv、依赖、模型)
references/
troubleshooting.md— 环境与工具链排错手册workflow.md— 选题提炼与原创脚本方法论 + 输出模板