ai_subtitle_tool/
│
├── 📄 核心程序文件
│ ├── main.py # 主程序入口,应用启动
│ ├── config.py # 配置管理,环境变量加载
│ ├── audio_capture.py # 音频捕获模块(Windows WASAPI)
│ ├── transcription_service.py # AI转录服务(支持4种服务)
│ └── subtitle_window.py # PyQt5字幕窗口UI
│
├── 📋 配置文件
│ ├── .env.example # 通用配置模板
│ ├── .env.aliyun.example # 阿里云专用配置模板
│ ├── .env # 实际配置(需自行创建)
│ └── requirements.txt # Python依赖列表
│
├── 🚀 启动和测试
│ ├── run.bat # Windows一键启动脚本
│ └── test_aliyun.py # 阿里云配置测试工具
│
├── 📚 文档
│ ├── README.md # 项目主文档
│ ├── setup_guide.md # 详细安装指南
│ ├── QUICKSTART_ALIYUN.md # 阿里云快速启动指南
│ ├── CHANGELOG_ALIYUN.md # 阿里云集成更新日志
│ ├── UPDATE_SUMMARY.md # 更新总结
│ ├── PROJECT_STRUCTURE.md # 本文件
│ └── docs/
│ └── aliyun_setup.md # 阿里云详细配置文档
│
└── 🔧 其他
└── .gitignore # Git忽略文件配置
功能: 应用程序主入口
- 初始化所有服务
- 创建UI窗口
- 管理应用生命周期
- 协调音频捕获和转录
关键类:
AISubtitleApp: 主应用类TranscriptionWorker: 转录工作线程
功能: 配置管理
- 加载环境变量
- 提供配置访问接口
- 配置验证
配置项:
- AI服务选择
- OpenAI配置
- Azure配置
- 阿里云配置
- 音频设置
- UI设置
功能: 音频捕获
- Windows WASAPI音频捕获
- 音频设备管理
- 音频流处理
- 缓冲区管理
关键类:
AudioCapture: 音频捕获主类
特性:
- 支持立体声混音
- 实时音频流
- 自动设备检测
功能: AI转录服务
- 抽象转录服务接口
- 多种AI服务实现
- 音频格式转换
支持的服务:
OpenAITranscriptionService- OpenAI Whisper APIAzureTranscriptionService- Azure Speech ServiceAliyunTranscriptionService- 阿里云百炼 🆕LocalWhisperService- 本地Whisper模型
工厂函数:
create_transcription_service(): 根据配置创建服务
功能: 字幕窗口UI
- PyQt5浮动窗口
- 现代化界面设计
- 拖拽支持
- 透明度控制
特性:
- 始终置顶
- 无边框设计
- 实时字幕更新
- 控制按钮(开始/停止)
用途: 通用配置模板
- 包含所有服务的配置示例
- 新用户参考模板
用途: 阿里云专用配置模板
- 预配置阿里云参数
- 详细的参数说明
- 推荐配置值
用途: Python依赖管理
PyQt5==5.15.10 # UI框架
pyaudio==0.2.14 # 音频I/O
sounddevice==0.4.6 # 跨平台音频
numpy==1.24.3 # 数值计算
openai==1.12.0 # OpenAI API
azure-cognitiveservices-speech==1.34.1 # Azure API
requests==2.31.0 # HTTP请求(阿里云)
python-dotenv==1.0.0 # 环境变量
pydub==0.25.1 # 音频处理
功能: Windows一键启动
- 检查Python环境
- 检查配置文件
- 自动安装依赖
- 启动应用
功能: 阿里云配置测试
- 验证配置正确性
- 测试API连接
- 诊断常见问题
- 提供修复建议
内容:
- 项目简介
- 功能特性
- 快速开始
- 配置说明
- 故障排除
内容:
- 详细安装步骤
- 环境配置
- API密钥获取
- 常见问题
- 性能优化
内容:
- 5分钟快速配置
- 简化步骤
- 快速故障排除
内容:
- 阿里云详细配置
- 模型选择指南
- 性能优化
- 费用说明
- 高级配置
┌─────────────────┐
│ 系统音频输出 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ AudioCapture │ ← audio_capture.py
│ (WASAPI捕获) │
└────────┬────────┘
│ 音频数据流
▼
┌─────────────────┐
│ 音频缓冲队列 │
└────────┬────────┘
│
▼
┌─────────────────┐
│TranscriptionWorker│ ← main.py
│ (工作线程) │
└────────┬────────┘
│
▼
┌─────────────────┐
│TranscriptionService│ ← transcription_service.py
│ ├─ OpenAI │
│ ├─ Azure │
│ ├─ Aliyun 🆕 │
│ └─ Local │
└────────┬────────┘
│ 识别文本
▼
┌─────────────────┐
│ SubtitleWindow │ ← subtitle_window.py
│ (显示字幕) │
└─────────────────┘
main.py
├─ config.py
├─ audio_capture.py
│ └─ config.py
├─ transcription_service.py
│ └─ config.py
└─ subtitle_window.py
└─ config.py
test_aliyun.py
├─ config.py
└─ transcription_service.py
环境变量 (.env)
↓
Config类 (config.py)
↓
各模块读取配置
├─ AudioCapture
├─ TranscriptionService
└─ SubtitleWindow
| 文件 | 行数 | 功能 |
|---|---|---|
| main.py | ~200 | 主程序逻辑 |
| config.py | ~50 | 配置管理 |
| audio_capture.py | ~150 | 音频捕获 |
| transcription_service.py | ~280 | AI转录 |
| subtitle_window.py | ~200 | UI界面 |
| 总计 | ~880 | 核心代码 |
SubtitleWindow (主窗口)
├─ 控制栏
│ ├─ 标题标签 "🎙️ AI实时字幕"
│ ├─ 状态指示器 "● 待机/录音中"
│ ├─ 开始按钮 "▶ 开始"
│ ├─ 停止按钮 "■ 停止"
│ └─ 关闭按钮 "✕"
└─ 字幕显示区
└─ 字幕标签 (实时更新)
.env (本地配置)
├─ 包含敏感信息(API密钥)
├─ 不提交到Git (.gitignore)
└─ 从模板创建
.env.example (模板)
├─ 不包含真实密钥
├─ 提交到Git
└─ 供用户参考
应用程序
├─ PyQt5 (UI框架)
├─ sounddevice (音频捕获)
│ └─ numpy (数值计算)
├─ requests (HTTP请求)
│ └─ 阿里云API调用
├─ openai (OpenAI API)
├─ azure-cognitiveservices-speech (Azure API)
└─ python-dotenv (环境变量)
1. run.bat 或 python main.py
↓
2. 加载配置 (config.py)
↓
3. 验证配置
↓
4. 初始化服务
├─ AudioCapture
├─ TranscriptionService
└─ TranscriptionWorker
↓
5. 创建UI窗口
↓
6. 显示窗口
↓
7. 等待用户操作
├─ 点击"开始" → 启动捕获和转录
└─ 点击"停止" → 停止服务
- 在
transcription_service.py中创建新类:
class NewAIService(TranscriptionService):
def transcribe(self, audio_data, sample_rate):
# 实现转录逻辑
pass- 在
config.py中添加配置:
NEW_AI_API_KEY = os.getenv('NEW_AI_API_KEY', '')- 更新工厂函数:
elif service_type == 'new_ai':
return NewAIService()修改 subtitle_window.py 中的样式表:
self.setStyleSheet("""
QWidget {
background-color: #your_color;
}
""")- 使用类型提示
- 添加文档字符串
- 遵循PEP 8
- 使用try-except捕获异常
- 记录详细错误信息
- 提供用户友好的错误提示
- 单元测试各模块
- 集成测试完整流程
- 使用
test_aliyun.py作为参考
维护者: AI Subtitle Tool Team
最后更新: 2024-11
版本: v1.1.0