back
loading skill details...
支持图片、PDF 作为配套材料
---
name: ppt-speech-fusion
slug: ppt-speech-fusion
displayName: AI演讲稿融合
description: 会议录音转写 + 材料融合演讲复原稿 PDF,支持 PPT / 图片 / PDF 作为配套材料。语音转文字 / 音频转文字 / 录音转写 / 会议纪要 / 逐字稿 / 文字稿 / 对话转写 / 汇报稿 / PPT配音 / 演讲复原稿 / 录音转PPT / 音频PPT融合 / 图片转讲稿。说「整理会议录音」「录音转文字」「语音识别」「PPT演讲稿」即可触发;先问有无配套材料,无材料也可立即转写输出会议纪要 Word 或纯文本 txt,有材料则生成逐页对齐演讲复原稿 PDF。基于 OpenAI Whisper 中文转写引擎,输出格式可选 PDF / Word / txt。
version: 2.2.0
author: ethan
---
# ⚠️ 触发即响应,不要去找文件
以下任一触发词,skill 激活后 **第一句话就是问材料**,禁止先去桌面搜索、禁止自行推断路径:
| 触发词 |
|--------|
| 整理会议录音 / 会议录音整理 |
| 录音转文字 / 录音转演讲稿 / 语音转文字 / 音频转文字 |
| 语音识别 / 转写录音 / 转写音频 |
| PPT演讲稿 / 演讲复原稿 / 汇报稿 / PPT配音 |
| 会议纪要 / 逐字稿 / 文字稿 / 对话转写 |
| 录音转PPT / 音频PPT融合 / 图片转讲稿 |
| 帮我整理录音 / Whisper转写 |
---
# 材料类型判断
收到材料文件后,按扩展名自动识别类型:
| 类型 | 扩展名 | 页面提取方式 |
|------|--------|-------------|
| PPT | .pptx | python-pptx 提取文字 + LibreOffice/PyMuPDF 截图 |
| PDF | .pdf | PyMuPDF 逐页截图 + 文字提取 |
| 图片 | .png/.jpg/.jpeg/.gif/.bmp/.webp/.tiff | Pillow 直接读取,每张图 = 一页 |
多图片按文件名自然排序(01/02/03…)作为页码顺序。
---
# 流程总览(图)
```mermaid
flowchart TD
S["触发:整理会议录音 / 录音转文字 / PPT演讲稿 …"] --> Q{"有配套材料?<br/>PPT / 图片 / PDF"}
Q -- "无材料" --> T1["Whisper 中文转写<br/>梳理脉络·提炼要点"]
Q -- "有材料" --> T2["转写 + 提取材料页面<br/>自动识别 PPT / 图片 / PDF"]
T1 --> F1{"选格式"}
T2 --> F2{"选格式"}
F1 -- "A. Word 纪要" --> O1["结构化会议纪要 Word<br/>议题 / 结论 / 待办"]
F1 -- "B. txt 文本" --> O2["纯转写文本 txt"]
F2 -- "A. 复原稿 PDF" --> O3["演讲复原稿 PDF<br/>上半页叙述·下半页材料页面"]
F2 -- "B. Word 纪要" --> O1
F2 -- "C. txt 文本" --> O2
O1 --> C["自动自检:页数对齐 / 页面清晰 / 主题匹配"]
O2 --> C
O3 --> C
C --> D["输出文件 + 路径"]
```
---
# 工作流(极简三步)
## 第一步:先问材料
触发后**立即**询问,不干别的:
> 有没有配套材料(PPT / 图片 / PDF)?没有的话我直接转写整理,有的话请上传到对话框。
## 第二步:收文件,开干
**无材料**:直接对录音做完整中文转写(Whisper medium),梳理对话脉络、提炼要点。
**有材料**:用户上传后,自动识别类型(PPT/图片/PDF),转写录音 + 提取材料页面文字和截图。
## 第三步:选格式,输出
转写完成后:
**无材料:**
> 转写完成。要输出什么格式?
> A. 结构化会议纪要 Word(议题/结论/待办)
> B. 纯转写文本 txt
> 默认选 A。
**有材料:**
> 转写完成。要输出什么格式?
> A. 演讲复原稿 PDF(上半页叙述,下半页材料页面)
> B. 纯文字会议纪要 Word
> C. 纯转写文本 txt
> 默认选 A。
---
# 进度反馈
| 阶段 | 提示语 |
|------|--------|
| 触发后 | 「有没有配套材料(PPT/图片/PDF)?没有我直接转写,有的话传上来。」 |
| 转写中 | 「正在转写,预计 X 分钟...」 |
| 转写完 | 「转写完成,选格式:A/B/C」 |
| 生成完 | 自检结果 + 文件路径 |
---
# 模式详细说明
## 模式 A:演讲复原稿 PDF(需材料)
- 每页上半部分演讲叙述,下半部分材料页面(PPT 幻灯片 / PDF 页面 / 图片)
- 页数严格对齐材料页数(多图按自然排序)
- 自动自检
## 模式 B:会议纪要 Word
- 会议主题、参会人
- 按议题分段,含讨论要点 + 结论
- 末尾待办清单
## 模式 C:纯转写文本 txt
- 完整转写,带说话人标记
---
# 自检
- 转写文本非空、通顺
- 模式 A 额外:PDF 页数 = 材料页数、页面清晰、主题匹配
- 有问题直接修复
---
# 异常处理
| 情况 | 处理 |
|------|------|
| 音频格式不支持 | 提示转为 m4a/mp3/wav |
| 转写质量差 | 告知用户,建议更清晰录音 |
| 材料超 50 页 | 提醒耗时,确认后继续 |
| 只有材料没录音 | 提示需要录音 |
| 不支持的图片格式 | 提示转为 png/jpg |
---
# 技术执行
## 环境检查(每次执行前先跑,禁止跳过)
**第一步:检查依赖,缺啥装啥。**
```bash
# 逐个检查,只装缺失的
for pkg in openai-whisper python-pptx Pillow reportlab PyMuPDF python-docx; do
pip show "$pkg" > /dev/null 2>&1 || pip install "$pkg" 2>&1
done
```
**第二步:检查 ffmpeg(音频预处理用,非必需但有最好)。**
```bash
which ffmpeg > /dev/null 2>&1 && echo "ffmpeg: OK" || echo "ffmpeg: 未安装,大文件转写可能较慢"
```
**第三步:检查 LibreOffice(PPT 截图优先方案,非必需)。**
```bash
which soffice > /dev/null 2>&1 && echo "LibreOffice: OK(优先截图方案)" || echo "LibreOffice: 未安装,将使用 python-pptx 降级方案"
```
> 检查完成后汇报结果再进入工作流。不重复安装已有的包。
## 音频转写
```python
import whisper
model = whisper.load_model("medium")
result = model.transcribe("录音文件", language="zh")
```
大文件预处理:`ffmpeg -i 录音.m4a -ac 1 -ar 16000 录音_16k.wav`
## 材料页面提取(仅模式 A)
按文件类型自动选择方案:
**PPT (.pptx)**:优先 LibreOffice — `soffice --headless --convert-to pdf 文件.pptx` → PyMuPDF 逐页截图;备选 python-pptx + Pillow 手工渲染。
**PDF (.pdf)**:PyMuPDF 逐页截图 + 文字提取。
**图片 (.png/.jpg/...)**:Pillow 直接读取,按文件名自然排序作为页码顺序。多张图片直接作为多页材料使用。
## PDF 生成(仅模式 A)
ReportLab / fpdf2,A4,叙述在上,材料页面在下
## Word 生成(模式 B)
python-docx,标题分级 + 表格待办
---
# 各平台获取方式
## WorkBuddy
对话中说「整理会议录音」「录音转文字」「AI演讲稿融合」即可自动触发。
首次安装:在 WorkBuddy 技能管理 → 通过 URL 导入,填入 `https://github.com/fulei223344-lang/ppt-speech-fusion`;或直接搜「AI演讲稿融合」「会议录音转写」即可找到并一键安装。
## Codex / Cursor / Claude Code / Copilot / Cline / Windsurf
复制本 SKILL.md 全文到项目根目录对应配置文件(`.codex.md` / `.cursor/rules/` / `CLAUDE.md` / `.github/copilot-instructions.md` / `.clinerules` / `.windsurfrules`)。
---
GitHub: github.com/fulei223344-lang/ppt-speech-fusion
SkillHub: skillId=137251----
name: ppt-speech-fusion
slug: ppt-speech-fusion
displayName: PPTæ¼è®²ç¨¿
description: ä¼è®®å½é³è½¬å + PPT èåæ¼è®²å¤å稿 PDFãæ¯æè¯é³è½¬æå / é³é¢è½¬æå / å½é³è½¬å / ä¼è®®çºªè¦ / éå稿 / æå稿 / 对è¯è½¬å / æ±æ¥ç¨¿ / PPTé
é³ / æ¼è®²å¤å稿 / å½é³è½¬PPT / é³é¢PPTèåãè¯´ãæ´çä¼è®®å½é³ããå½é³è½¬æåããè¯é³è¯å«ããPPTæ¼è®²ç¨¿ãå³å¯è§¦åï¼å
鮿æ PPTï¼æ PPT ä¹å¯ç«å³è½¬åè¾åºä¼è®®çºªè¦ Word æçº¯ææ¬ txtï¼æ PPT åçæé页坹齿¼è®²å¤å稿 PDFãåºäº OpenAI Whisper ä¸æè½¬å弿ï¼è¾åºæ ¼å¼å¯é PDF / Word / txtã
version: 2.1.3
author: ethan
---
# â ï¸ è§¦åå³ååºï¼ä¸è¦å»æ¾æä»¶
以ä¸ä»»ä¸è§¦åè¯ï¼skill æ¿æ´»å **第ä¸å¥è¯å°±æ¯é® PPT**ï¼ç¦æ¢å
廿¡é¢æç´¢ãç¦æ¢èªè¡æ¨æè·¯å¾ï¼
| 触åè¯ |
|--------|
| æ´çä¼è®®å½é³ / ä¼è®®å½é³æ´ç |
| å½é³è½¬æå / å½é³è½¬æ¼è®²ç¨¿ / è¯é³è½¬æå / é³é¢è½¬æå |
| è¯é³è¯å« / 转åå½é³ / 转åé³é¢ |
| PPTæ¼è®²ç¨¿ / æ¼è®²å¤å稿 / æ±æ¥ç¨¿ / PPTé
é³ |
| ä¼è®®çºªè¦ / éå稿 / æå稿 / 对è¯è½¬å |
| å½é³è½¬PPT / é³é¢PPTèå |
| å¸®ææ´çå½é³ / Whisper转å |
---
# æµç¨æ»è§ï¼å¾ï¼
```mermaid
flowchart TD
S["触åï¼æ´çä¼è®®å½é³ / å½é³è½¬æå / PPTæ¼è®²ç¨¿ â¦"] --> Q{"æé
å¥ PPTï¼"}
Q -- "æ PPT" --> T1["Whisper ä¸æè½¬å<br/>梳çèç»Â·æç¼è¦ç¹"]
Q -- "æ PPT" --> T2["转å + æå PPT<br/>页颿å / å¹»ç¯çæªå¾"]
T1 --> F1{"éæ ¼å¼"}
T2 --> F2{"éæ ¼å¼"}
F1 -- "A. Word 纪è¦" --> O1["ç»æåä¼è®®çºªè¦ Word<br/>è®®é¢ / ç»è®º / å¾
å"]
F1 -- "B. txt ææ¬" --> O2["çº¯è½¬åææ¬ txt"]
F2 -- "A. å¤å稿 PDF" --> O3["æ¼è®²å¤å稿 PDF<br/>ä¸å页å述·ä¸å页幻ç¯ç"]
F2 -- "B. Word 纪è¦" --> O1
F2 -- "C. txt ææ¬" --> O2
O1 --> C["èªå¨èªæ£ï¼é¡µæ°å¯¹é½ / å¹»ç¯çæ¸
æ° / 主é¢å¹é
"]
O2 --> C
O3 --> C
C --> D["è¾åºæä»¶ + è·¯å¾"]
```
---
# 工使µï¼æç®ä¸æ¥ï¼
## ç¬¬ä¸æ¥ï¼å
é® PPT
触åå**ç«å³**询é®ï¼ä¸å¹²å«çï¼
> ææ²¡æé
å¥ PPTï¼æ²¡æçè¯æç´æ¥è½¬åæ´çï¼æçè¯è¯·ä¸ä¼ å°å¯¹è¯æ¡ã
## ç¬¬äºæ¥ï¼æ¶æä»¶ï¼å¼å¹²
**æ PPT**ï¼ç´æ¥å¯¹å½é³å宿´ä¸æè½¬åï¼Whisper mediumï¼ï¼æ¢³ç对è¯èç»ãæç¼è¦ç¹ã
**æ PPT**ï¼ç¨æ·ä¸ä¼ PPT åï¼è½¬åå½é³ + æå PPT 页颿ååå¹»ç¯çæªå¾ã
## ç¬¬ä¸æ¥ï¼éæ ¼å¼ï¼è¾åº
转å宿åï¼
**æ PPTï¼**
> 转å宿ãè¦è¾åºä»ä¹æ ¼å¼ï¼
> A. ç»æåä¼è®®çºªè¦ Wordï¼è®®é¢/ç»è®º/å¾
åï¼
> B. çº¯è½¬åææ¬ txt
> é»è®¤é Aã
**æ PPTï¼**
> 转å宿ãè¦è¾åºä»ä¹æ ¼å¼ï¼
> A. æ¼è®²å¤å稿 PDFï¼ä¸å页åè¿°ï¼ä¸å页幻ç¯çï¼
> B. 纯æåä¼è®®çºªè¦ Word
> C. çº¯è½¬åææ¬ txt
> é»è®¤é Aã
---
# è¿åº¦åé¦
| é¶æ®µ | æç¤ºè¯ |
|------|--------|
| 触åå | ãææ²¡æé
å¥ PPTï¼æ²¡ææç´æ¥è½¬åï¼æçè¯ä¼ 䏿¥ãã |
| 转åä¸ | ãæ£å¨è½¬åï¼é¢è®¡ X åé...ã |
| 转åå® | ã转å宿ï¼éæ ¼å¼ï¼A/B/Cã |
| çæå® | èªæ£ç»æ + æä»¶è·¯å¾ |
---
# 模å¼è¯¦ç»è¯´æ
## æ¨¡å¼ Aï¼æ¼è®²å¤å稿 PDFï¼é PPTï¼
- æ¯é¡µä¸åé¨åæ¼è®²åè¿°ï¼ä¸åé¨å PPT å¹»ç¯çæªå¾
- 页æ°ä¸¥æ ¼å¯¹é½ PPT
- èªå¨èªæ£
## æ¨¡å¼ Bï¼ä¼è®®çºªè¦ Word
- ä¼è®®ä¸»é¢ãåä¼äºº
- æè®®é¢å段ï¼å«è®¨è®ºè¦ç¹ + ç»è®º
- æ«å°¾å¾
忏
å
## æ¨¡å¼ Cï¼çº¯è½¬åææ¬ txt
- 宿´è½¬åï¼å¸¦è¯´è¯äººæ è®°
---
# èªæ£
- è½¬åææ¬é空ãé顺
- æ¨¡å¼ A é¢å¤ï¼PDF é¡µæ° = PPT 页æ°ãå¹»ç¯çæ¸
æ°ã主é¢å¹é
- æé®é¢ç´æ¥ä¿®å¤
---
# å¼å¸¸å¤ç
| æ
åµ | å¤ç |
|------|------|
| é³é¢æ ¼å¼ä¸æ¯æ | æç¤ºè½¬ä¸º m4a/mp3/wav |
| 转åè´¨éå·® | åç¥ç¨æ·ï¼å»ºè®®æ´æ¸
æ°å½é³ |
| PPT è¶
50 页 | æéèæ¶ï¼ç¡®è®¤åç»§ç» |
| åªæ PPT 没å½é³ | æç¤ºéè¦å½é³ |
---
# ææ¯æ§è¡
## ç¯å¢æ£æ¥ï¼æ¯æ¬¡æ§è¡åå
è·ï¼ç¦æ¢è·³è¿ï¼
**ç¬¬ä¸æ¥ï¼æ£æ¥ä¾èµï¼ç¼ºå¥è£
å¥ã**
```bash
# éä¸ªæ£æ¥ï¼åªè£
缺失ç
for pkg in openai-whisper python-pptx Pillow reportlab PyMuPDF python-docx; do
pip show "$pkg" > /dev/null 2>&1 || pip install "$pkg" 2>&1
done
```
**ç¬¬äºæ¥ï¼æ£æ¥ ffmpegï¼é³é¢é¢å¤çç¨ï¼éå¿
é使æå¥½ï¼ã**
```bash
which ffmpeg > /dev/null 2>&1 && echo "ffmpeg: OK" || echo "ffmpeg: æªå®è£
ï¼å¤§æä»¶è½¬åå¯è½è¾æ
¢"
```
**ç¬¬ä¸æ¥ï¼æ£æ¥ LibreOfficeï¼PPT æªå¾ä¼å
æ¹æ¡ï¼éå¿
éï¼ã**
```bash
which soffice > /dev/null 2>&1 && echo "LibreOffice: OKï¼ä¼å
æªå¾æ¹æ¡ï¼" || echo "LibreOffice: æªå®è£
ï¼å°ä½¿ç¨ python-pptx éçº§æ¹æ¡"
```
> æ£æ¥å®æåæ±æ¥ç»æåè¿å
¥å·¥ä½æµãä¸éå¤å®è£
å·²æçå
ã
## é³é¢è½¬å
```python
import whisper
model = whisper.load_model("medium")
result = model.transcribe("å½é³æä»¶", language="zh")
```
大æä»¶é¢å¤çï¼`ffmpeg -i å½é³.m4a -ac 1 -ar 16000 å½é³_16k.wav`
## PPT æªå¾ï¼ä»
æ¨¡å¼ Aï¼
ä¼å
LibreOfficeï¼`soffice --headless --convert-to pdf æä»¶.pptx` â PyMuPDF é页æªå¾
å¤é python-pptx + Pillow æå·¥æ¸²æ
## PDF çæï¼ä»
æ¨¡å¼ Aï¼
ReportLab / fpdf2ï¼A4ï¼åè¿°å¨ä¸ï¼æªå¾å¨ä¸
## Word çæï¼æ¨¡å¼ Bï¼
python-docxï¼æ é¢å级 + è¡¨æ ¼å¾
å
---
# åå¹³å°è·åæ¹å¼
## WorkBuddy
对è¯ä¸è¯´ãæ´çä¼è®®å½é³ããå½é³è½¬æåããPPTæ¼è®²ç¨¿ãå³å¯èªå¨è§¦åã
馿¬¡å®è£
ï¼å¨ WorkBuddy æè½ç®¡ç â éè¿ URL 导å
¥ï¼å¡«å
¥ `https://github.com/fulei223344-lang/ppt-speech-fusion`ï¼æç´æ¥æãPPTæ¼è®²ç¨¿ããä¼è®®å½é³è½¬åãå³å¯æ¾å°å¹¶ä¸é®å®è£
ã
## Codex / Cursor / Claude Code / Copilot / Cline / Windsurf
å¤å¶æ¬ SKILL.md å
¨æå°é¡¹ç®æ ¹ç®å½å¯¹åºé
ç½®æä»¶ï¼`.codex.md` / `.cursor/rules/` / `CLAUDE.md` / `.github/copilot-instructions.md` / `.clinerules` / `.windsurfrules`ï¼ã
---
GitHub: github.com/fulei223344-lang/ppt-speech-fusion
SkillHub: skillId=137251
don't have the plugin yet? install it then click "run inline in claude" again.