Markdown 免费口播视频生成技能 (md2video-audio)
- 作用:将本地Markdown 文件自动转化为包含画面与免费语音的 MP4 视频。
1. 全局核心铁律 (Core Rules)
必须严格遵守以下原则,任何情况下不得违背:
- 原则一:不改原稿,依次按步骤串行,从原稿到排版与优化稿到展示稿到口播稿,前项生成后项,最终输出视频。
- 原则二:严禁擅自安装删除依赖、删除文件、调用脚本及交互输入,不确定时必须向用户确认。
2. 串行工作流 (Core Workflow)
- 本任务为严格的串行工作流,共分为以下几个阶段。你必须按顺序推进,在当前阶段未完成或未通过校验前,严禁跳跃到后续阶段。
1. 环境依赖检查与安装
对应子文件references/enviroment.md
2. 生成优化稿
- 不改原文件。
- 操作对象:保存成
new-原名前缀-时间戳的新md文件 - 原稿原文内容文字和逻辑不动,只做必要分段分块、增加彩色、前后增加自然引导过渡语。对应子文件
references/newscript.md
3. 生成展示稿
- 操作对象:保存成
show-原名前缀-时间戳的新md文件。 - 将上个步骤得到的md文件
new-原名前缀-时间戳拆分为逻辑自然的展示稿,要求:- Markdown 文件最顶部加上几行配置。这里暂停询问用户要用哪种Marp风格展示,以及是否加入
allowHtml: true,如果选默认风格见``references/showscript.md`。 - 将HTML标签尽可能都转换为markdown形式表示,如
<img>转换为![]()而里面参数不变 - 根据语义逻辑、md段落结构,用
---分隔每页 PPT。
- Markdown 文件最顶部加上几行配置。这里暂停询问用户要用哪种Marp风格展示,以及是否加入
- 检查展示稿每页是否符合内容分页规则(如下3条):
- 判断单页内容是否超出页面安全容量(为marp单页高度的85%):展示稿每页内容按不同样式统计行数,结合顶部YAML Front Matter里的style得到不同样式每行内容所占高度,动态估算。如果超过安全容量边界内,则拆分为几个逻辑小单元各占1页(保证每页内容都不超页面安全容量且布局排版好看情况下,数量应尽可能少)
- 判断单块内容所占高度是否超350px:可拆分的(如表格、代码块)将其内部按接近于350px且逻辑自然拆分成多个块。
- 当代码一行过长时按逻辑自然插入换行
- 检查通过则进入下一阶段,否则根据要求修改不通过地方,直到检查通过。若修改3次仍不通过,则提示用户手动修改后再继续。
4. 生成口播稿
- 操作对象:保存成
speaking-原名前缀-时间戳的新md文件 - 根据展示稿,生成逻辑自然的口播稿:
- 口播稿最开头第一行先加上两个
---,换行再写第一页的口播。 - 去掉除分隔符外的乱七八糟的表情图标等仅供展示的念出来不自然的字符。
- 口播稿最开头第一行先加上两个
- 检查口播稿和展示稿的
---页分隔符数量必须保持一致:正则表达式执行grep -E '^---[[:space:]]*$' your_file.md | wc -l。若数量对不上,修改口播稿,每页内容对齐展示稿,一般是在口播稿最开头加入。检查通过则进入下一阶段,否则根据要求修改不通过地方,直到检查通过。若修改3次仍不通过,则提示用户手动修改后再继续。
5. 用Python 脚本一键打包成视频
- 用上述阶段中生成的2个中间结果md文件,分别是口播稿和展示稿作为输入,调用执行本skill目录下名为
ai-2md2marp2av.py,python ai-2md2marp2av.py 展示稿.md 口播稿.md。注意脚本中有交互输入,必须让用户手动输入。 - 脚本逻辑为用 Marp 生成的高颜值 PPT 图片后,把图片和 Edge-TTS 生成的语音按对应页数拼起来即可。
6. 降级方案
- 若生成视频失败,则调用降级方案:执行本skill目录下名为
md2marp2av.py脚本。若仍失败则执行本skill目录下名为md2video.py脚本
微信扫一扫