Files
nexus/openclaw/xingshu/cloud-learning-audio-pipeline.md

253 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Cloud Learning 音视频处理流水线
> 文档版本2026-04-15
> 维护者星枢xingshu
> 状态:✅ 已验证可运行
---
## 一、整体架构
```
NAS 视频源
[阶段1] FFmpeg 音频提取
│ MP4 → MP3
NAS MP3 文件库
[阶段2] Whisper 转录
│ MP3 → 英文字幕/转写稿
Macmini 本地转写稿
[阶段3] Gemini Flash 摘要
│ 转写稿 → 结构化中文笔记
Obsidian 知识库
```
---
## 二、各阶段详解
### 阶段 1FFmpeg 音频提取
| 项目 | 说明 |
|---|---|
| **输入** | NAS 上的 `.mp4` 文件(`/volume2/work/Public Cloud Learning Sessions/` |
| **输出** | 同目录下的同名 `.mp3` 文件 |
| **工具** | FFmpegMacmini 已安装:`/opt/homebrew/bin/ffmpeg` |
| **转码参数** | `-vn -acodec libmp3lame -ab 64k -ar 22050 -ac 1`64kbps CBR针对人声优化|
| **传输方式** | `ssh cat` 管道NAS 不需要挂载)|
| **速度** | ~400x realtime1小时视频 ≈ 9秒提取|
**命令示例:**
```bash
# NAS → Macmini FFmpeg → 回写 NAS
ssh shenwei@192.168.3.17 "cat '/volume2/work/Public Cloud Learning Sessions/VIDEO.mp4'" \
| /opt/homebrew/bin/ffmpeg -i pipe:0 -vn -acodec libmp3lame -ab 64k -ar 22050 -ac 1 -f mp3 pipe:1 \
| ssh shenwei@192.168.3.17 "cat > '/volume2/work/Public Cloud Learning Sessions/VIDEO.mp3'"
```
**脚本位置:** `~/.openclaw/temp/xingshu/scripts/nas_audio_extract_v3.py`
---
### 阶段 2Whisper 转录
| 项目 | 说明 |
|---|---|
| **输入** | NAS 上的 `.mp3` 文件已由阶段1生成|
| **输出** | 英文字幕/转写稿(纯文本)|
| **工具** | `openai-whisper`Python 包,通过 `pip install openai-whisper` 安装)|
| **模型** | `small`精度与速度平衡M 系列芯片友好)|
| **硬件** | Macmini 本地运行Neural Engine 加速)|
| **速度** | ~50x realtime1小时音频 ≈ 40-50秒|
| **内存** | ~1.5GBsmall 模型)|
| **费用** | 完全免费(本地运行,无需 API|
**安装命令:**
```bash
pip3 install openai-whisper
```
**调用示例:**
```python
import whisper
model = whisper.load_model("small")
result = model.transcribe("audio.mp3", language="en", fp16=False)
print(result["text"]) # 英文字幕/转写稿
```
**转写稿长度参考:** 1小时音频 ≈ 6000-8000 tokens英文
---
### 阶段 3Gemini Flash 摘要
| 项目 | 说明 |
|---|---|
| **输入** | Whisper 转写的英文字幕/转写稿 |
| **输出** | 结构化中文笔记(摘要 + 关键概念 + 相关链接)|
| **工具** | Google Gemini API直接 HTTP 调用,不依赖 summarize CLI|
| **模型** | `gemini-3-flash-preview` |
| **费用** | ~0.075$/百万输入 tokens3000分钟音频 ≈ ~$0.15|
| **API Key** | `AIzaSyASNIlSc-YYP1dCqKCzk59e7MXSVrnHba0`(需有效)|
**摘要输出格式:**
```markdown
## 摘要
> [300-500字中文摘要]
---
## 关键概念
- **[概念名称]**: [一句话解释]
---
## 相关视频
> [!info]+ 交叉引用
> [[相关视频文件名]] — 关联原因
```
---
## 三、全量流水线脚本
**脚本位置:** `~/.openclaw/temp/xingshu/scripts/nas_whisper_gemini_summarize.py`
**核心逻辑:**
1. 扫描 NAS 上已完成的 `.mp3` 文件(跳过 `*.done` 中已有的)
2. `ssh cat` 下载到 Macmini 本地临时目录
3. Whisper `small` 转录
4. Gemini Flash 摘要
5. 更新 Obsidian 对应笔记(替换 `## 摘要``## 相关视频` 之间的内容)
6. 删除本地临时文件
7. 写入 `.done` 进度文件(断点续传)
**启动命令:**
```bash
cd ~/.openclaw/temp/xingshu
nohup python3 scripts/nas_whisper_gemini_summarize.py > nas_whisper_summarize_stdout.log 2>&1 &
echo "PID=$!"
```
**查看进度:**
```bash
tail -f ~/.openclaw/temp/xingshu/logs/nas_whisper_summarize.log
```
---
## 四、Obsidian 笔记模板
笔记文件位于:`~/Workspace/nexus/knowledgebase/DevOps & SRE/`
```markdown
---
title: "视频标题"
type: cloud-learning
source-type: video
category: "DevOps & SRE/01_AWS-Landing-Zone"
tags:
- AWS
- Landing-Zone
date-added: 2026-04-14
video-source: "nas:///volume2/work/Public Cloud Learning Sessions/VIDEO.mp4"
audio-source: "nas:///volume2/work/Public Cloud Learning Sessions/VIDEO.mp3"
status: summarized # raw → summarized
---
# 视频标题
**Source:** NAS `/volume2/work/Public Cloud Learning Sessions/VIDEO.mp4`
**Type:** VIDEO | **Category:** 01_AWS-Landing-Zone
**Status:** ✅ 已完成
---
## 摘要
> [Gemini Flash 生成的中文摘要]
---
## 关键概念
- **[概念名称]**: [一句话解释]
---
## 相关视频
> [!info]+ 交叉引用
> [[相关视频文件名]] — 关联原因
```
---
## 五、API Key 汇总
| 服务 | Key | 用途 | 状态 |
|---|---|---|---|
| Google Gemini | `AIzaSyASNIlSc-YYP1dCqKCzk59e7MXSVrnHba0` | 摘要生成 | ✅ 有效 |
| MiniMax | `sk-cp-H0FwKNry9PnMJm...` | Whisper 转录 | ❌ Whisper端点404token plan不支持模型 |
> ⚠️ MiniMax API Key 目前不可用Whisper 端点 404文本模型 500Whisper 改用本地模型。
---
## 六、费用估算100个视频~3000分钟总时长
| 阶段 | 工具 | 费用 |
|---|---|---|
| 音频提取 | FFmpeg | $0 |
| 语音转录 | Whisper本地 | $0 |
| 摘要生成 | Gemini Flash | ~$0.15 |
| **合计** | | **~$0.15** |
---
## 七、已知限制与注意事项
1. **Gemini API Key 必须有效**:每 24 小时检查一次 key 状态
2. **Whisper 模型选择**`tiny` 最快但精度低,`small` 平衡,`medium`/`large` Macmini 内存不够
3. **音频质量**Whisper 对音质敏感,背景噪音会导致转写质量下降
4. **断点续传**:脚本使用 `.done` 文件记录已完成的文件,重启不会重复处理
5. **文件命名**:文件名中的空格和特殊字符(`_``(``)`)需要正确处理
---
## 八、快捷命令速查
```bash
# 查看音频提取进度
cat ~/.openclaw/temp/xingshu/logs/nas_audio_v3.log | tail -10
# 查看转录摘要进度
tail -f ~/.openclaw/temp/xingshu/logs/nas_whisper_summarize.log
# 查看 NAS 已完成 mp3 数量
ssh shenwei@192.168.3.17 "ls '/volume2/work/Public Cloud Learning Sessions/'*.mp3 2>/dev/null | wc -l"
# 查看已处理摘要数量
cat ~/.openclaw/temp/xingshu/nas_whisper_summarize.done | wc -l
# 手动测试 Whisper
python3 -c "import whisper; m=whisper.load_model('small'); print(m.transcribe('test.mp3')['text'][:100])"
# 手动测试 Gemini
curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent?key=AIzaSyASNIlSc-YYP1dCqKCzk59e7MXSVrnHba0" \
-H 'Content-Type: application/json' \
-d '{"contents":[{"parts":[{"text":"say hi in 3 words"}]}]}'
```