把任意来源的内容变成一篇可发布的微信公众号文章,覆盖从字幕提取到封面图的完整 8 步流程。支持 YouTube 视频、网页文章、PDF/Markdown/TXT 本地文档。只要用户提供了任意内容来源(URL、文件路径、视频链接),并且目标是产出中文文章或公众号稿件,就必须使用这个 skill——即使用户没有明确说「公众号」。触发场景包括:「写公众号文章」「转成微信文章」「帮我写篇文章」「翻译成文章」「整理成内容」「帮我看看这个视频讲了什么」「总结一下」。
Resources
5Install
npx skillscat add abangzhu/youtube-to-wechat Install via the SkillsCat registry.
内容 → 微信公众号完整工作流
把任意来源的内容变成一篇可发布的微信公众号文章。支持 YouTube 视频、网页文章、本地文档(PDF / Markdown / TXT)。整套流程对访谈、演讲、播客录像、深度报道效果最好。
规则文件分工
这套 skill 有两类规则,执行时不要混用:
| 规则文件 | 负责什么 | 什么时候看 |
|---|---|---|
| references/translation-quality.md | 英译中、术语、本地化、翻译腔排查、上下文标记、指代还原、术语边界、回译自检、英文示例中英对照 | 生成 bilingual-transcript.md、整理 transcript.md、复查英文来源文章时 |
| references/wechat-writing-rules.md | 微信公众号成文规则:结构、开头、来源交代、叙事视角、标点、AI 腔、引号、加粗、标题、结尾,以及可选的高阶手法(两件事合流、跨领域 reframing、自嘲切换器) | 写 article.md 和最终重写时 |
简单说:translation-quality.md 保证「原文没有走样,中文不像翻译」;wechat-writing-rules.md 保证「文章像中文作者写给公众号读者看的文章」。
总体流程
- 获取并整理内容,生成原始转录和工作底稿
- 调查人物或作者背景
- 从主播/作者视角和读者视角分析内容
- 写微信公众号初稿
- 对照原文检查遗漏的高价值内容
- 用读者视角、编辑视角、事实视角评估
- 根据评估重写,直到通过
- 拟标题、按需加章节标题、准备封面图
Step 1:获取并整理内容
1.0 判断内容来源类型
在开始之前,先确认来源类型,选择对应路径:
| 来源类型 | 判断条件 | 执行路径 |
|---|---|---|
| YouTube 视频 | URL 包含 youtube.com 或 youtu.be |
→ 路径 A |
| 网页文章 | 其他网页 URL(博客、新闻、论文页面等) | → 路径 B |
| 本地文件 | 文件路径(.pdf / .md / .txt / .docx 转存版) | → 路径 C |
路径 A:YouTube 视频
A.1 下载字幕
方法一:yt-dlp(最快,优先尝试)
# 优先下载中文字幕(zh-Hans)
yt-dlp --write-auto-sub --sub-lang zh-Hans --skip-download \
--cookies-from-browser chrome \
-o "%(title)s" \
"VIDEO_URL"
# 如果没有中文字幕,下载英文字幕
yt-dlp --write-auto-sub --sub-lang en --skip-download \
--cookies-from-browser chrome \
-o "%(title)s" \
"VIDEO_URL"常见错误:如果报 "Sign in to confirm you're not a bot",加 --cookies-from-browser chrome 参数(需本地已登录 Chrome)。
方法二:tactiq.io 网页转录(yt-dlp 被 SABR 或 PO Token 拦住时的首选)
yt-dlp 报 Requested format is not available、PO Token was not provided 或 Some web client https formats have been skipped 等错误时,说明 YouTube 的流量限制绕不过去,但字幕本身可能还在。优先切到 tactiq.io:
- 用 Chrome DevTools MCP 打开
https://tactiq.io/tools/run/youtube_transcript?yt={URL_ENCODED_YOUTUBE_URL} - 等 3-5 秒让 tactiq 后台拉字幕
evaluate_script取document.querySelector('#transcript').innerText- 拿到的是「时间戳 + 文本」每两行一对的格式,直接保存为
full_transcript_en.txt或_zh.txt
这条路 90% 情况下几秒内就能搞定。完整脚本和失败处理见 references/youtube-transcript-fallback.md。
方法三:Chrome DevTools MCP fetch 拦截器(tactiq 也失败但视频确实有字幕时用)
如果 tactiq 的 #transcript 为空而 YouTube 播放器显示字幕可用,走 Chrome DevTools MCP 在页面上注入 fetch 拦截器、再点击 Show transcript 的路径。步骤和脚本见同一份 fallback 文档。
视频真的没有字幕的处理:如果 YouTube 播放器直接显示 "Subtitles/closed captions unavailable",所有免费路径都会失效(tactiq、youtubetranscript、downsub 全部依赖 YouTube 原生字幕)。此时用 AskUserQuestion 让用户选:基于二手媒体报道成文、等 24-48 小时 YouTube 自动生成字幕、用户自备转录文件、换视频。不要静默降级。处理细则见 fallback 文档最后一节。
A.2 解析 VTT 字幕文件
使用 scripts/parse_vtt.py 解析字幕:
python scripts/parse_vtt.py "字幕文件目录路径"输出:full_transcript_zh.txt(去重后的纯文本转录)。
A.3 生成双语对照转录(英文视频必做)
英文来源的 YouTube 视频必须生成 bilingual-transcript.md。当用户明确说「忠实翻译」「保留英文」「逐句对照」「要英文原文」时,更不可省略。
transcript.md 是主题提炼版,服务于写稿;bilingual-transcript.md 是逐段核查版,服务于翻译校验。两者目的不同,不能互相代替。
格式:
[时间戳] 英文原文(逐字保留,不改动)
中文忠实译文
---
[时间戳] 下一段英文原文
下一段中文译文
---文件开头加视频元信息(标题、链接、频道、演讲者),正文按时间戳顺序覆盖全部片段,一个不漏。
翻译时执行 references/translation-quality.md 的「忠实翻译层」:翻译前先标记上下文、代词、泛指词和前文回指;翻译时保持原意,不压缩实质内容;翻译后对关键句做回译自检,确认主语、逻辑、术语和程度没有走样。
路径 B:网页文章
B.1 抓取页面内容
用 WebFetch 工具读取页面,prompt 设为「提取文章全文,保留段落结构和小节标题,不要摘要,不要省略」。
如果文章有分页或 WebFetch 截断,分页多次调用,拼接成完整文本后保存为 full_transcript_zh.txt。
抓取后记录文章的标题、作者、发布日期、来源网站,这些信息后续写来源注记时需要用到。
官方文档/指南类页面的抓取要求
如果 WebFetch 返回的是摘要或明显不完整的内容(缺少代码块、缺少示例、段落比原页面少),切换到 Chrome DevTools MCP:
navigate_page打开目标 URLevaluate_script提取完整正文:document.body.innerText.substring(start, end)(每次 8000 字符,分段直到取完)
这对官方 API 文档、产品指南、技术规范尤其重要。原文的代码块和示例 prompt 是核心内容,WebFetch 摘要会丢掉它们。一旦这一步被压缩,下游的转录和写作都无法补救。
路径 C:本地文件
C.1 读取文件
用 Read 工具直接读取文件路径。PDF 较长时分段读取(每次不超过 20 页),将所有内容拼接后保存为 full_transcript_zh.txt。
通用:生成工作底稿 transcript.md
三条路径都走完后,将内容整理为带主题分节的 Markdown 文件(transcript.md),标注:
- 作者 / 主播 / 嘉宾名字
- 每个话题段的主要论点
- 重要引语(保留原话)
- 关键数字、案例、时间线、产品名、术语
如果原始内容是英文,整理 transcript.md 时同步完成本地化处理,不要留到写稿时再改。术语格式、缩写处理、俚语意译、英文句式改写、翻译腔排查都按 references/translation-quality.md 执行;同时处理未还原的代词和泛指词、主语切换、成熟术语中文译法和长句拆分。完成后对照「真实案例回归表」做一次 case 级检查。
内容类型决定压缩程度:
- 访谈 / 播客 / 演讲:提炼核心论点,保留重要原话、案例细节、人物背景线索
- 官方文档 / 产品指南 / 技术规范 / 操作手册:完整翻译每一段,不删减;原文有几条建议就翻几条,原文有示例就保留并翻译
英文 prompt 示例、代码块或官方模板必须中英文对照,放在同一个代码块里。英文在上,空行分隔,中文在下。
Step 2:人物背景调查
适用范围:访谈、演讲、播客等有具体说话人的内容,调查主播和嘉宾。如果来源是署名文章或报告,调查作者。如果是匿名文档或机构报告(没有具体说话人),跳过此步,直接进入 Step 3。
在正式分析内容之前,先对核心人物做背景调查。这一步的目的不是写简介,而是理解他们的世界观是怎么来的。只有知道一个人经历了什么,才能理解他为什么说这些话、这些话对他意味着什么。
用 WebSearch 搜索以下维度,每个人物各做一次:
传记与职业轨迹
- 成长背景、教育经历(什么时期、在哪里、受谁影响)
- 职业关键节点:第一份重要工作、重大转型、成名作或成名事件
- 现在在做什么、为什么做这个
思想形成与演变
- 他最重要的几个观点是什么,这些观点是怎么形成的?
- 思想有没有发生过明显转变?什么事件或经历触发了转变?
- 他在哪些问题上改变了主意,为什么?
个人得失与教训
- 他公开谈过的失败或低谷是什么?他从中学到了什么?
- 他最引以为傲的成就背后有哪些不为人知的代价或取舍?
- 有没有他反复提到、对他影响深远的某段经历或某个人?
价值观与立场
- 他在乎什么?他反对什么?他选边站的地方在哪里?
- 他的观点在同行中处于什么位置(主流/异见/边缘)?
调查完成后,为每位主要人物写一份「人物小传」,通常 1000-2500 字,根据资料丰富程度决定。小传不是简历罗列,而是叙述性文字:这个人是怎么一步步走到今天的,哪些经历是真正的转折点,他的核心观点是从什么土壤里长出来的。
Step 3:内容分析与提炼
分三步执行,顺序不能颠倒。
提炼的目标是洞察和分析,不是压缩。 保留具体的数据、案例、故事和原话,它们是观点成立的血肉。一段带着具体细节的内容,比十条提炼出来的要点更有价值。
叙事视角只用于内部分析。 主播视角和观众视角不是正文写法。写文章时,你才是文章作者。先理解演讲者或原作者的观点,再用自己的判断、场景和解释转达给读者。
3.1 主播 / 作者视角:他想传递什么?
站在主播、嘉宾或作者的立场,理解他主动选择说这些话的意图:
- 核心论点是什么?整期内容想让观众记住的一件事是什么?
- 他用了哪些案例、数据、故事来支撑这个论点?
- 他刻意强调或反复提到的观点有哪些?
- 他对行业/未来的判断是什么,对接下来 12-18 个月有没有明确预测?
- 他给出了哪些可操作的建议?
- 结合 Step 2 的人物背景,这些观点和他的经历或立场有哪些关联?
3.2 读者视角:什么真正有价值?
切换到目标读者(创业者 / AI 从业者 / 产品经理)的视角,独立判断哪些内容值得带走:
- 最反直觉、最容易被忽视的发现是什么?
- 哪些观点会让读者停下来想「啊,原来是这样」?
- 哪些方法论可以直接指导行动?
- 有没有描述了但没有命名的新角色、新工作方式、新产品范式?
- 哪些金句信息密度高、有画面感、可以脱离上下文独立理解?
- 嘉宾说这句话的底气来自哪里?人物背景会不会改变读者对观点的理解?
3.3 对照原文查漏
两个视角总结完后,回到转录原文逐段遍历:
- 有没有重要论点在两个视角里都没有出现?
- 有没有具体的数字、时间线、案例细节被遗漏?
- 有没有嘉宾对未来的判断没有被捕捉到?
把补充发现合并进 3.1 或 3.2 对应的位置,再进入 Step 4。
Step 4:写微信公众号初稿
4.1 文章长度
文章字数不设固定上限,根据访谈时长和信息密度动态决定:
- 30 分钟以内的短访谈,内容集中,1000-1500 字足够
- 1 小时左右的标准播客,覆盖多个话题,1500-2500 字合理
- 超过 1.5 小时的长对谈,或信息密度极高的专业访谈,2500 字以上不必克制
判断标准只有一个:内容说清楚了没有。还有重要的观点、案例、数据没有放进去,就不是写完了。
4.2 成文方式
写 article.md 时按 references/wechat-writing-rules.md 执行,尤其注意这几件事:
- 文章正文不要用 Markdown 标题、列表、表格;
article.md第一行的# 标题是唯一例外 - 开头三段按固定节奏写。第一段直接给具体场景、数字或判断,不写人物简历;第二段再交代人是谁、公司背景、可信度锚点;第三段锁定文章要回答的问题。不要第一句就介绍人物。
- 视频或原文是素材来源,不是正文主角;不要频繁用「他说」「他提到」「这期视频里」推动段落,也不要加「X 对这件事评价挺复杂」这类只承担转场功能的空句
- 每段尽量有具体的人、事、数字、场景或原话,避免空洞断言。能量化的地方就量化,不用「大幅提升」「显著下降」这种模糊词
- 主动筛掉对读者零价值的转录细节:讲者「念不准某个词」「笑了出声」「让观众举手」这类现场花絮、主持流程元评论(「时间关系跳过」)、未展开的人名引用、反复的自我修正。判断标准:这一句抽掉,文章的信息量和论点会不会打折?不会就删。详见 wechat-writing-rules.md「筛掉对读者无信息量的转录细节」
- 如果讲者说到「这张图」「这根箭头」「这段代码在屏幕上」「这个方框」等 deixis 指示语,或者讲架构 / 流程 / 对比表 / 数据曲线 / 产品 UI 这些光靠文字无法还原的内容,必须在文章对应段落插入原视频截图。写初稿时先用
[图:MM:SS - 描述]占位不打断节奏,初稿写完统一用 Chrome DevTools MCP 打开 YouTube 视频对应时间点截图,再替换占位符。完整截图流程和插图规范见 references/visual-capture.md - 如果文章超过 2000 字,适当使用
**完整短句**形式的章节标题分段;不要用冷名词作章节标题 - 如果引入新概念,首次出现时用「」锚一次定义,后面裸写不再加引号;定义用"名词 + 破题动作"一句话讲清楚
- 如果材料能对应具体的实操场景,在结尾附近自然做一次桥接,把判断落到具体团队 / 岗位 / 决策上,不硬凑。不要做「国内 vs 海外」的地域二分,经验是否只适用于某地域要经得起反问;大多数工程判断本身就是通用的,别给它强加地域标签
- 正文里的英文术语按 wechat-writing-rules.md 第七节 的大小写规则处理。术语词组每个单词首字母大写(Agent、Semantic Search、Context Window),缩写全大写(RAG、LLM、ESQL),代码标识符反引号原样(
@tool、top K、jina-grep) - 看一眼素材手头有没有能用 第十章的高阶手法 的条件。两件事合流适合有双线索的材料,跨领域 reframing 适合很容易被读者当"又一条新闻"的事件,自嘲切换器适合典故或理论密度偏高的段落之间。不强求,合适的时候用一两条,能让文章明显跳出同质化的 AI 生成稿。
如果演讲或访谈围绕一个技术产品、协议或框架展开(比如 MCP、某个平台、某个工具),在介绍人物的同时顺手给它一句定义。不需要教科书式解释,一句能让非熟悉读者继续读下去即可。
4.3 指南类内容的写法
如果来源是官方文档或操作指南,文章里的例子应该直接用原文给出的示例,而不是自己重新发明一个。
引用方式:用一句话自然引出,然后直接展示,展示之后再做分析。英文示例仍按 references/translation-quality.md 的规则放中英文对照。
Step 5:检查遗漏的高价值内容
写完初稿后,回到转录原文做一次漏网检查:
- 有没有反常识的数字或数据?
- 有没有嘉宾描述的具体失败案例细节?
- 有没有对未来 18 个月的明确判断?
- 有没有提到但没有展开的新角色或新工作方式?
- 有没有值得记住的金句还没引用?
- 人物背景里有没有某个经历或转折,和文章里的某个观点特别契合,但还没有用上?
如果有遗漏,判断是否足够重要到加入正文。
Step 6:用三层评估
评估报告本身是内部工作文档,可以使用标准 Markdown 标题、列表、表格和加粗。它不受微信公众号正文规则限制。
6.1 读者视角
- 标题能不能让目标读者停下来点进来?
- 开头 3 段能不能让人继续读?
- 每个 Take-away 有没有让人「啊对」的感觉?
- 结尾有没有留下值得思考的东西?
6.2 编辑视角
对照 references/wechat-writing-rules.md 检查:
- 正文有没有 Markdown 标题、列表、表格?
- 有没有冒号、破折号、双引号等禁用标点?
- 有没有 AI 腔词语和公式化句式(包括「不是 A 而是 B」及其变体)?
- 直接引语、概念名词、加粗是否符合规范?加粗总量(含章节标题)是否不超过 5 处?
- 开头第一段是直接给判断 / 场景 / 数字,还是先写人物简历了?
- 章节标题(如果有)是不是完整短句带动词,不是冷名词?
- 能量化的支撑点有没有留下模糊形容词(「大幅」「显著」「很多」)?
- 标题是否包含具体主体(不是纯抽象概念)?问题句标题文章里有没有真的给出答案?
- 来源交代是否自然?有没有「X 评价挺复杂」这类空转场句?全文读起来是在分享观点,还是替原视频做广告?
- 有没有告诉而不是展示:空洞断言多,具体细节少?
- 有没有残留对读者零价值的转录细节(讲者念不准、现场举手、时间关系跳过、未展开的人名)?抽掉这些句子文章是否更干净?
- 涉及「这张图」「这根箭头」「这段代码」「屏幕上」等 deixis 指示语的段落,是否都截图插入了?有没有
[图:MM:SS - 描述]占位符没替换? - 如果材料能对应实操场景,是否做了一次桥接把判断落到具体团队 / 岗位上?桥接里有没有「国内团队」「海外做法」这类地域二分?抽掉地域限定词后经验是否还成立?成立就不要保留地域词
- 英文术语是否按大小写规则处理:词组每个单词首字母大写,缩写全大写,代码标识符反引号原样?
6.3 本地化与事实视角
对照 references/translation-quality.md 和原始转录检查:
- 专有名词、缩写是否按首次标注规则处理?
- 有没有英文句式结构、被动句、名词堆砌、倒装句、代词过密等翻译腔?
- 主语和谓语是否清楚?有没有因为省略主语导致说话人、公司、产品或系统混淆?
- 代词、泛指词和前文回指是否已按上下文还原?
- 有成熟中文译法的术语是否没有偷懒保留英文?
- 关键事实、因果关系、技术术语和直接引语是否做过回译抽查?
- 是否对照「真实案例回归表」排查了 10 个典型错译模式?
- 嘉宾金句的中文表达意思有没有跑偏?如有歧义,可在括号内附原话
- 数字、时间线、人名、产品名是否准确?
- 有没有把嘉宾的「可能」「我们在尝试」写成已经发生的事实?
- 有没有把两件不同的事合并成一件?
- 如果来源是官方文档或指南,文章里引用的示例是否来自原文?英文示例是否都有中文对照放在同一代码块内?
区分两类内容:
- 延伸解读:作者从原话推导出的判断、补充背景、类比。允许,但语气上要与嘉宾原话区分开
- 无中生有:原文没有提及、但文章中当作事实陈述的内容。必须删除或改为明确标注是作者推测
如果评估发现问题,列出具体修改清单,进入 Step 7。
Step 7:根据评估重写
重写原则:
如果是结构问题:把文章内容打散,用连续段落重新组织,删掉正文里的标题和列表。
如果是语气问题:重读最难改的段落,把第一句改成一个口语化的事实陈述或场景描述。
如果是 AI 腔问题:找到每一个触发词,用更具体的说法替换,或者把这句话删掉。大多数 AI 腔句子删掉后文章反而更好。
如果是翻译腔问题:回到 references/translation-quality.md,按触发特征逐条修正,不要只替换词语。
重写完成后再做一次 Step 6 评估,直到三层视角都通过为止。
Step 8:发布准备
文章定稿后,在正式发布前完成三项准备工作。
8.1 拟标题
为文章拟 3-5 个备选标题,覆盖不同风格:
| 风格 | 核心角度 |
|---|---|
| 观点型 | 说话人的核心判断,适合有强观点的演讲或访谈 |
| 信息型 | 文章带来的关键事实或结论,适合有具体数据的内容 |
| 反常识型 | 文章里最让人意外的发现,读前和读后判断不同 |
| 场景型 | 用一个具体细节切入,让读者想知道接下来发生了什么 |
| 读者价值型 | 读完这篇文章能带走什么,直接说明 |
好标题不等于博眼球。选题时检查:标题是否准确反映文章核心内容,是否有具体信息量,是否有清晰角度。
警惕「A 变贵了,B 变便宜了」这类对比框架标题。它容易把复杂推理压成口号,让读者以为文章承诺了一个鲜明判断,读完却发现正文不是这么回事。
更好的替代方向:
- 疑问型:直接用行业术语问一个真实存在的问题,例如「AI Coding 到底能不能提升研效?」
- 陈述型:说出文章最核心的一个发现,不加戏剧修饰,例如「AI Coding 提升了什么,没提升什么」
拟好备选标题后,不要自己替用户选择最终标题。先把 3-5 个备选标题展示给用户,并用 AskUserQuestion 让用户选择下一步:
- 选择其中一个标题作为最终标题
- 提供补充方向后重新生成一组标题
- 让 Claude 推荐一个标题但仍需用户确认
如果用户选择某个标题,才把它写入 article.md 第一行:# 标题。
如果用户补充标题方向,例如「更犀利一点」「少一点营销感」「突出人物」「突出方法论」「更适合创业者」,根据补充方向重新生成 3-5 个标题,再次让用户选择或确认。
如果用户让 Claude 推荐标题,先说明推荐理由,再请求用户确认;得到确认前不要覆盖 article.md 第一行。
8.2 章节标题(按需添加)
文章超过 2000 字,且存在 3 个以上主题明显不同的段落群,读者在扫读时可能迷失时,可以加章节标题。如果文章本身叙事流畅、段落衔接自然、不超过 2000 字,不需要加。
格式:在对应段落群的第一段之前,单独一行写加粗短标题,不用 Markdown ## 语法,直接写 **标题**。标题写成完整短句或带动词的短语,长度 5-20 字,参考 wechat-writing-rules.md 的章节标题部分。不要写冷名词式标题,也不要写 AI 式的「探索……」「深入了解……」。
8.3 封面图截取
根据来源类型选择方式,完整操作步骤见 references/cover-art-guide.md。
简要:YouTube 视频优先用 curl -L -o cover.jpg "https://i.ytimg.com/vi/VIDEO_ID/maxresdefault.jpg",不受 SABR 限制;网页文章抓 og:image;本地文件手动截图。
输出文件规范
| 文件 | 内容 | 何时生成 |
|---|---|---|
full_transcript_zh.txt |
纯文本原始转录(备查) | YouTube 视频必做;其他来源按需保存完整原文 |
bilingual-transcript.md |
双语对照逐段转录,每段英文原文 + 中文忠实译文 | 英文 YouTube 视频必做;用户要求忠实翻译时更是不可省略 |
transcript.md |
结构化主题提炼版(带分节,服务于写稿) | 所有来源必做 |
article.md |
最终微信公众号文章,第一行必须是 # 标题 |
所有来源必做 |
<VIDEO_ID>-frame-<MMSS>.jpg |
正文需要可视化段落的原视频截图 | 仅当文章里出现「这张图」「这根箭头」「屏幕上」等 deixis 指示语,或者材料包含架构图、流程图、对比表、UI 截图等光靠文字无法还原的内容时生成。命名用视频 ID + 时间戳,和 article.md 同目录 |
bilingual-transcript.md 和 transcript.md 不可互相替代。前者供用户核查翻译质量,后者是提炼分析后供写稿用的结构化版本。截图文件生成方式见 references/visual-capture.md。
文件名冲突处理:如果当前目录已存在 article.md 且内容与本次任务无关,使用 <slug>-article.md,其中 slug 取视频/文章标题前 4-6 个汉字或英文关键词(小写连字符,如 mcp-future-article.md)。
文章末尾必须注明来源,格式根据内容类型选用:
# YouTube 访谈 / 播客
内容来源,[频道名称]「[视频标题]」,YouTube 链接 [URL],嘉宾为 [嘉宾名称]。
# 网页文章
内容来源,[作者]「[文章标题]」,原文链接 [URL],发布于 [平台/媒体名称]。
# 本地文档
内容来源,[作者 / 机构]「[文档标题]」,[发布日期或版本号]。