SilkFlow 是一个专为微信语音转换设计的高性能音频处理服务。采用 Bun 运行时和 Hono 框架构建,提供极致的转换速度和最小的资源占用。
适用场景:
- 📱 微信语音转文字系统
- 📦 语音消息归档
- 🎵 音频格式标准化
- ☁️ 云端音频处理平台
- 🚀 高性能: 基于 Bun 运行时,比 Node.js 快数倍
- 🎯 轻量级: 使用 Hono 框架,极小的内存占用
- 📦 开箱即用: 内置 SILK 解码器和 FFmpeg
- 🎵 多格式支持: 自动识别并转换 SILK、AMR 及其他音频格式
- 🔄 批量处理: 支持单文件和批量转换
- 📊 任务追踪: 实时查询转换任务状态
- 🛡️ 错误处理: 完善的错误捕获和提示
- 🔍 智能检测: 自动检测音频格式并选择最佳转换方案
- ☁️ 云存储集成: 自动上传至 MinIO,无需本地存储
- 🔒 安全认证: Token 认证保护 API 接口
- 🐳 Docker 支持: 一键部署到 Linux 服务器
- Bun >= 1.0.0
- Windows 系统(使用 .exe 工具)或 Linux 系统(使用 FFmpeg)
- Docker 20.10+
- Docker Compose 2.0+
- Linux 服务器(推荐 Ubuntu 20.04+)
cd silkflow
bun install创建 .env 文件:
PORT=3005
API_ACCESS_TOKEN=your_secret_token
MINIO_ACCESS_KEY=your_access_key
MINIO_SECRET_KEY=your_secret_key
MINIO_BUCKET_NAME=wechat
MINIO_URL=https://minio-api.wyts.tech# 开发模式(热重载)
bun run dev
# 生产模式
bun startgit clone <your-repo> /opt/silkflow
cd /opt/silkflowcp .env.production .env
nano .env.production # 编辑配置chmod +x deploy.sh
./deploy.sh --build详细部署文档请查看 DEPLOYMENT.md
服务启动后访问:
- 首页: http://localhost:3005
- 健康检查: http://localhost:3005/api/health
- API 文档: http://localhost:3005/api/docs
POST /api/convert/wechat-to-mp3
Authorization: Bearer your_token
Content-Type: application/json
{
"url": "http://example.com/audio.silk",
"quality": "128k",
"filename": "my_audio.mp3"
}响应:
{
"success": true,
"taskId": "task_xxx",
"filename": "audio.mp3",
"minioUrl": "https://minio-api.wyts.tech/wechat/silk-mp3/2025-10-22/audio.mp3",
"fileSize": 21165,
"duration": 305
}POST /api/convert/batch
Authorization: Bearer your_token
Content-Type: application/json
{
"urls": [
"http://example.com/audio1.silk",
"http://example.com/audio2.silk"
],
"options": {
"quality": "192k"
}
}GET /api/status/:taskId
Authorization: Bearer your_tokenPOST /api/voice-to-text
Authorization: Bearer your_token
Content-Type: application/json
{
"url": "https://minio-api.wyts.tech/wechat/silk-mp3/audio.mp3",
"format": "mp3"
}响应:
{
"success": true,
"data": {
"text": "识别出的文字内容",
"duration": 1319
},
"timestamp": "2025-10-23T..."
}POST /api/convert/wechat-to-mp3
Authorization: Bearer your_token
Content-Type: application/json
{
"url": "http://example.com/audio.silk",
"convertToText": true
}响应:
{
"success": true,
"taskId": "task_xxx",
"filename": "audio.mp3",
"minioUrl": "https://minio-api.wyts.tech/wechat/silk-mp3/...",
"fileSize": 21165,
"duration": 366,
"transcription": {
"text": "识别出的文字内容",
"duration": 1319
},
"timestamp": "2025-10-23T..."
}SILK 文件 → 下载 → 格式检测 → SILK 解码 → PCM → FFmpeg 转换 → MP3 → 上传 MinIO
音频文件 → 下载 → 格式检测 → FFmpeg 直接转换 → MP3 → 上传 MinIO
支持的格式:
- ✅ SILK V3 - 标准 SILK 格式(
#!SILK_V3开头) - ✅ 微信 SILK - 微信特殊格式(
0x02开头,自动添加头部) - ✅ AMR-NB/WB - AMR 窄带/宽带格式
- ✅ 其他格式 - FFmpeg 支持的任意音频格式(自动检测)
详细步骤:
- 下载: 从 URL 下载音频文件
- 检测: 智能检测文件格式(SILK、AMR 或其他)
- 转换:
- SILK → 使用
silk_v3_decoder解码为 PCM → FFmpeg 转 MP3 - 其他 → FFmpeg 直接转换为 MP3
- SILK → 使用
- 上传: 上传 MP3 到 MinIO 对象存储
- 清理: 删除所有临时文件(包括 MP3)
注意:转换后的 MP3 文件会自动上传到 MinIO,本地不保留。如果上传失败,会保留本地文件。
# 使用部署脚本
./deploy.sh --build
# 或使用 docker-compose
docker-compose --env-file .env.production up -d --build# 查看日志
./deploy.sh --logs
# 重启服务
./deploy.sh --restart
# 停止服务
./deploy.sh --stop
# 查看状态
./deploy.sh --statusserver {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3005;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 超时设置
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}完整部署文档:DEPLOYMENT.md
# 方式一
openssl rand -hex 32
# 方式二
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"# Header 方式(推荐)
Authorization: Bearer your_token_here
# URL 参数方式
?access_token=your_token_heresilkflow/
├── src/
│ ├── index.ts # 主入口
│ ├── middleware/ # 中间件
│ │ └── auth.ts # 认证中间件
│ ├── routes/ # 路由
│ │ ├── health.ts # 健康检查
│ │ ├── convert.ts # 转换接口
│ │ ├── status.ts # 状态查询
│ │ └── docs.ts # API 文档
│ └── services/ # 服务层
│ ├── converter.ts # 转换服务
│ ├── minio.ts # MinIO 服务
│ └── taskManager.ts # 任务管理
├── bin/ # 工具
│ ├── ffmpeg.exe # FFmpeg 编码器
│ └── silk_v3_decoder.exe # SILK 解码器
├── e2e/
│ └── silk.http # API 测试用例
├── Dockerfile # Docker 镜像配置
├── docker-compose.yml # Docker Compose 配置
├── deploy.sh # 部署脚本
├── DEPLOYMENT.md # 部署文档
├── package.json
└── README.md
使用 VSCode REST Client 插件,打开 e2e/silk.http 直接测试所有接口。
- ✅ 使用 Bun 原生 API 进行文件操作
- ✅ 并发批量转换
- ✅ 自动清理临时文件
- ✅ 任务状态缓存管理
- ✅ Docker 多阶段构建,减小镜像体积
# 安装依赖
bun install
# 开发模式(热重载)
bun run dev
# 构建
bun run build欢迎提交 Issue 和 Pull Request!
MIT License
Made with ❤️ using Bun and Hono
如果这个项目对你有帮助,欢迎 Star ⭐