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

6.7 KiB
Raw Blame History

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 164kbps CBR针对人声优化
传输方式 ssh cat 管道NAS 不需要挂载)
速度 ~400x realtime1小时视频 ≈ 9秒提取

命令示例:

# 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-whisperPython 包,通过 pip install openai-whisper 安装)
模型 small精度与速度平衡M 系列芯片友好)
硬件 Macmini 本地运行Neural Engine 加速)
速度 ~50x realtime1小时音频 ≈ 40-50秒
内存 ~1.5GBsmall 模型)
费用 完全免费(本地运行,无需 API

安装命令:

pip3 install openai-whisper

调用示例:

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(需有效)

摘要输出格式:

## 摘要

> [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 进度文件(断点续传)

启动命令:

cd ~/.openclaw/temp/xingshu
nohup python3 scripts/nas_whisper_gemini_summarize.py > nas_whisper_summarize_stdout.log 2>&1 &
echo "PID=$!"

查看进度:

tail -f ~/.openclaw/temp/xingshu/logs/nas_whisper_summarize.log

四、Obsidian 笔记模板

笔记文件位于:~/Workspace/nexus/knowledgebase/DevOps & SRE/

---
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. 文件命名:文件名中的空格和特殊字符(_())需要正确处理

八、快捷命令速查

# 查看音频提取进度
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"}]}]}'