- 多格式支持: MP3、WAV、AAC 音频格式
- 智能输出: 支持纯文本和SRT字幕格式
- 高精度转写: 基于OpenAI Whisper大型模型
- 实时进度: 转写进度实时显示
- 自动下载: 模型文件自动下载和管理
- 队列识别: 批量处理多个音频文件,支持文件夹导入 🆕
- 图形界面: 直观的Windows Forms界面
- 拖拽操作: 简单易用的文件选择
- 格式预览: 智能文件格式建议
- 进度显示: 实时处理进度条
- 队列管理: 专用的批量处理管理窗口 🆕
- RESTful API: 标准HTTP接口
- 多端支持: 支持各种编程语言调用
- 状态监控: 服务状态实时查询
- 错误处理: 完善的错误信息返回
- 环境变量: 支持OWHISPER_HOST、OWHISPER_PORT配置
- 任务队列: 支持多任务串行处理和管理 🆕
- 新增: "队列识别" - 打开批量处理管理器
- 新增: "模型管理" - 打开模型管理界面 🆕
- 保留: "检查更新" - 检查软件更新
- 移除: "下载更新" - 简化更新流程
- 批量添加: 支持多选文件或整个文件夹导入
- 智能队列: 自动排队处理,避免资源冲突
- 实时监控: 显示每个任务的处理状态和进度
- 自动保存: 转录完成后自动保存到指定文件夹
- 智能分类: 按日期自动创建子文件夹组织输出文件
- 状态管理: 支持暂停、恢复、取消和移除任务
- WAV: 无损音频格式(推荐)
- MP3: 常见的压缩音频格式
- FLAC: 无损压缩音频格式
- OGG: 开源音频格式
- M4A: Apple 音频格式
- WMA: Windows Media Audio
- AAC: 高级音频编码
我的文档/OWhisper转录结果/
├── 2024-01-15/ # 按日期自动分类
│ ├── 会议录音.txt
│ ├── 课程讲座.txt
│ └── 采访记录.txt
├── 2024-01-16/
│ ├── 电话会议.txt
│ └── 培训视频.txt
└── ...
📖 详细使用说明: 查看
docs/队列识别功能说明.md
了解完整的使用方法和功能介绍。
- 可视化管理: 提供直观的模型管理界面
- 手动下载: 支持手动选择和下载不同模型版本
- 文件导入: 支持导入本地模型文件(.bin、.gguf格式)
- 状态监控: 实时显示当前模型状态和文件信息
- 完整性验证: 自动验证模型文件的SHA256校验和
- 多模型支持: 支持Large V3 Turbo、Large V3、Medium、Small等版本
模型版本 | 文件大小 | 推荐用途 | 特点 |
---|---|---|---|
Large V3 Turbo 🌟 | 809MB | 日常使用 | 速度最快,推荐使用 |
Large V3 | 1.5GB | 高精度需求 | 最高精度版本 |
Medium | 769MB | 平衡使用 | 性能和精度的良好平衡 |
Small | 244MB | 资源受限 | 轻量级版本 |
- 状态检查: 检查当前模型文件是否有效
- 删除模型: 安全删除当前模型文件
- 刷新状态: 重新检查模型状态信息
- 打开文件夹: 直接访问模型存储目录
- 下载进度: 实时显示下载进度和速度
- 取消下载: 支持随时取消正在进行的下载
📖 详细使用说明: 查看
docs/模型管理功能说明.md
了解完整的模型管理功能介绍。
- 操作系统: Windows 10/11 (x64)
- 运行时: .NET Framework 4.8
- 内存: 建议 4GB+ RAM
- 存储: 2GB+ 可用空间 (用于模型文件)
- 网络: 首次运行需要网络连接下载模型
1. 下载安装
# 克隆项目
git clone https://github.com/ModerRAS/OWhisper.NET.git
cd OWhisper.NET
# 编译项目
dotnet build OWhisper.NET.sln
2. 启动应用
8000 a># 图形界面模式
OWhisper.NET.exe
# 调试模式 (显示窗口)
OWhisper.NET.exe --debug
# API服务模式
OWhisper.NET.exe --api-only
# Windows PowerShell
$env:OWHISPER_HOST = "0.0.0.0" # 监听地址 (默认: 0.0.0.0)
$env:OWHISPER_PORT = "11899" # 监听端口 (默认: 11899)
# Windows CMD
set OWHISPER_HOST=0.0.0.0
set OWHISPER_PORT=11899
# Linux/macOS
export OWHISPER_HOST=0.0.0.0
export OWHISPER_PORT=11899
- 选择音频文件 - 点击"选择文件"按钮
- 设置输出位置 - 点击"另存为"选择保存位置和格式
- 开始转写 - 点击"开始处理"按钮
- 等待完成 - 查看进度条,完成后自动保存
- 基础URL:
http://localhost:11899
- 内容类型:
application/json
(响应),multipart/form-data
(文件上传) - 环境变量配置: 支持
OWHISPER_HOST
和OWHISPER_PORT
接口 | 方法 | 说明 | 类型 |
---|---|---|---|
/api/model/status |
GET | 获取模型状态 | 状态查询 |
/api/transcribe |
POST | 提交转录任务 | 任务提交 |
/api/tasks |
GET | 获取所有任务列表 | 任务管理 |
/api/tasks/{taskId} |
GET | 获取指定任务详情 | 任务查询 |
/api/tasks/{taskId}/cancel |
POST | 取消指定任务 | 任务控制 |
/api/tasks/{taskId}/progress |
GET | SSE实时进度监听 | 实时通信 |
/api/queue/progress |
GET | SSE队列状态监听 | 实时通信 |
- ✅ 串行处理 - 多个任务按顺序执行,避免资源冲突
- ✅ 队列管理 - 自动管理任务优先级和执行顺序
- ✅ 状态追踪 - 实时跟踪任务状态变化
- ✅ 任务取消 - 支持取消排队中的任务
- ✅ 实时进度 - 通过SSE推送转录进度
- ✅ 状态更新 - 实时接收任务状态变化
- ✅ 队列监控 - 监听整个队列的状态
- ✅ 心跳检测 - 保持连接活跃状态
GET /api/model/status
响应示例:
{
"status": "success",
"data": {
"exists": true,
"valid": true,
"size": 1550000000,
"path": "Models/ggml-large-v3-turbo.bin"
}
}
POST /api/transcribe
Content-Type: multipart/form-data
file: [音频文件]
响应示例:
{
"status": "success",
"data": {
"taskId": "abc123def456",
"queuePosition": 1
}
}
GET /api/tasks/{taskId}
响应示例:
{
"status": "success",
"data": {
"id": "abc123def456",
"fileName": "audio.mp3",
"status": "Completed",
"progress": 100.0,
"queuePosition": 0,
"createdAt": "2024-01-01T10:00:00Z",
"startedAt": "2024-01-01T10:01:00Z",
"completedAt": "2024-01-01T10:05:00Z",
"result": {
"text": "转录的文本内容",
"srtContent": "1\n00:00:00,000 --> 00:00:05,000\n转录的文本内容\n",
"processingTime": 240.5
},
"errorMessage": null
}
}
GET /api/tasks/{taskId}/progress
Accept: text/event-stream
SSE事件流示例:
event: progress
data: {"taskId":"abc123","status":"Queued","progress":0,"queuePosition":2,"message":"队列中等待,位置: 2"}
event: progress
data: {"taskId":"abc123","status":"Processing","progress":25.5,"queuePosition":0,"message":"正在处理... (25.5%)"}
event: progress
data: {"taskId":"abc123","status":"Completed","progress":100,"result":{"text":"转录结果","srtContent":"...","processingTime":180.2}}
event: heartbeat
data: {"timestamp":"2024-01-01T10:05:00Z"}
graph TD
A[提交任务] --> B[Queued 排队中]
B --> C[Processing 处理中]
C --> D[Completed 已完成]
C --> E[Failed 失败]
B --> F[Cancelled 已取消]
B -.-> G[可以取消]
C -.-> H[无法取消]
D -.-> I[获取结果]
E -.-> J[查看错误]
状态 | 说明 | 可操作 |
---|---|---|
Queued |
任务已提交,等待处理 | ✅ 可取消 |
Processing |
正在转录处理中 | ❌ 无法取消 |
Completed |
转录完成 | ✅ 获取结果 |
Failed |
处理失败 | ✅ 查看错误 |
Cancelled |
已被取消 | ❌ 无法恢复 |
为了更好地组织代码示例,我们将所有编程语言的客户端代码统一到了专门的文档目录中。
语言 | 文件 | 类型 | 说明 |
---|---|---|---|
Python | docs/examples/python/python_client.py |
完整版 ⭐ | 功能丰富的Python客户端,包含服务等待、状态检测、自动保存 |
Node.js | docs/examples/nodejs/nodejs_client.js |
完整版 ⭐ | 功能丰富的JavaScript客户端,包含完整项目结构 |
C# | docs/examples/csharp_client.cs |
标准版 | .NET Framework/Core客户端示例 |
C# SSE | docs/examples/csharp_client_with_sse.cs |
高级版 ⭐ | 支持任务队列和SSE实时进度的C#客户端 |
Java | docs/examples/java_client.java |
标准版 | 使用OkHttp库的Java客户端 |
PHP | docs/examples/php_client.php |
标准版 | 使用cURL的PHP客户端 |
Go | docs/examples/go_client.go |
标准版 | 原生HTTP客户端的Go示例 |
PowerShell | docs/examples/powershell/ |
测试脚本 | 配置测试和环境变量验证脚本 |
- ✅ 服务等待 - 自动等待OWhisper.NET服务启动
- ✅ 状态检测 - 检查服务和模型状态
- ✅ 进度显示 - 详细的处理进度信息
- ✅ 结果保存 - 自动保存TXT、SRT、JSON格式
- ✅ 文件检测 - 自动查找音频文件
- ✅ 项目结构 - 包含完整的依赖文件和配置
- ✅ 任务队列 - 支持多任务串行处理
- ✅ 实时进度 - 通过SSE获取实时处理进度
- ✅ 状态监听 - 实时监听任务状态变化
- ✅ 任务管理 - 支持任务取消和状态查询
- ✅ 队列监控 - 监听整个任务队列状态
- ✅ 心跳检测 - 自动维护SSE连接
- ✅ 环境变量配置 - 支持
OWHISPER_HOST
和OWHISPER_PORT
环境变量 - ✅ 默认值回退 - 未设置环境变量时自动使用默认配置
- ✅ 多种音频格式 - 自动检测MP3、WAV、AAC格式
- ✅ 错误处理 - 完善的异常处理机制
- ✅ 超时配置 - 适合长音频处理的超时设置
- 查看完整示例 - 访问
docs/examples/
目录 - 选择客户端类型:
- 完整版 (Python/Node.js) - 功能丰富,适合生产环境
- 标准版 - 代码简洁,适合快速集成
- 安装依赖 - 按照各语言的说明安装必要的第三方库
- 配置环境 - 设置环境变量或直接修改代码中的服务地址
- 运行示例 - 使用你的音频文件测试转写功能
查看 docs/examples/README.md
获取:
- 完整的目录结构说明
- 详细的安装和使用说明
- 环境变量配置方法
- 错误处理和故障排除
- API响应格式说明
# 监听地址 (默认: 0.0.0.0)
OWHISPER_HOST=0.0.0.0
# API服务端口 (默认: 11899)
OWHISPER_PORT=11899
# 模型下载代理 (可选)
HTTP_PROXY=http://proxy.example.com:8080
HTTPS_PROXY=http://proxy.example.com:8080
创建 appsettings.json
文件:
{
"Whisper": {
"ModelName": "ggml-large-v3-turbo.bin",
"ModelType": "LargeV3Turbo",
"ThreadCount": 16,
"Language": "auto"
},
"Api": {
"Host": "0.0.0.0",
"Port": 11899,
"AllowedOrigins": ["*"],
"MaxFileSize": 524288000
},
"Logging": {
"Level": "Information",
"FilePath": "Logs/log-.txt"
}
}
错误: 模型下载失败: 网络连接超时
解决方案:
- 检查网络连接
- 配置代理服务器
- 手动下载模型文件到
Models
目录
错误: 端口 11899 已被占用
解决方案:
- 使用环境变量修改端口:
$env:OWHISPER_PORT="12000"
- 终止占用端口的进程
- 使用
netstat -an | findstr 11899
查看端口占用
错误: 不支持的音频格式
解决方案:
- 使用支持的格式: MP3, WAV, AAC
- 使用 FFmpeg 转换音频格式
错误: 处理大文件时内存不足
解决方案:
- 增加系统内存
- 分割大音频文件
- 关闭其他占用内存的程序
查看日志文件位置: Logs/log-{date}.txt
# 查看最新日志
Get-Content "Logs\log-*.txt" -Tail 50
# 搜索错误信息
Select-String -Path "Logs\*.txt" -Pattern "ERROR|FATAL"
音频时长 | 推荐配置 | 预估处理时间 |
---|---|---|
< 10分钟 | 4GB RAM | 1-3分钟 |
10-60分钟 | 8GB RAM | 3-15分钟 |
> 1小时 | 16GB RAM | 15-60分钟 |
- 使用SSD硬盘: 提高模型加载速度
- 充足内存: 避免虚拟内存交换
- 多核CPU: 利用多线程处理
- 网络稳定: 确保模型下载不中断
欢迎提交 Issue 和 Pull Request!
# 克隆项目
git clone https://github.com/ModerRAS/OWhisper.NET.git
# 安装依赖
dotnet restore
# 运行测试
dotnet test
# 编译发布版本
dotnet publish -c Release
- 使用 C# 编码规范
- 添加适当的注释和文档
- 确保测试通过
- 遵循现有的架构模式
本项目采用 MIT 许可证 - 查看 LICENSE.txt 文件了解详情。
- Whisper.net - 核心语音识别库
- OpenAI Whisper - 原始模型
- NAudio - 音频处理库