基于 FastAPI 和 faster-whisper 的高性能视频语音转文字服务,支持接收视频文件并返回带时间戳的转写结果。适用于 Dify RAG 工作流、内容分析、字幕生成等场景。
- 🚀 高性能: 基于 faster-whisper,比原版 Whisper 快 4-5 倍
- 📹 多格式支持: 支持 mp4, mov, mkv, avi, flv, wmv 等常见视频格式
- 🎯 精确时间戳: 返回带时间戳的转写片段,便于后续处理
- 🌍 自动语言检测: 自动识别视频中的语言
- 🔧 易于集成: RESTful API,轻松集成到现有系统
- 🧹 自动清理: 处理完成后自动清理临时文件
- 📊 API 文档: 自动生成的 Swagger/ReDoc 文档
- 支持多种视频格式(mp4, mov, mkv, avi, flv, wmv)
- 使用 ffmpeg 自动提取音频
- 使用 faster-whisper 进行本地语音转文字
- 返回带时间戳的 JSON 格式结果
- 自动检测语言
- 处理完成后自动清理临时文件
- Python ≥ 3.10
- ffmpeg
- 操作系统: macOS / Linux / Windows (WSL)
注意: 本项目在 macOS (Apple Silicon) 上开发和测试,Linux 和 Windows (WSL) 上也可运行。
# 使用 Homebrew 安装 ffmpeg
brew install ffmpeg验证安装:
ffmpeg -version# 创建虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install -r requirements.txtuvicorn main:app --reload服务将在 http://localhost:8000 启动。
启动服务后,访问以下地址查看自动生成的 API 文档:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
端点: POST /transcribe
请求格式: multipart/form-data
参数:
file: 视频文件(必填)
响应示例:
{
"video_name": "demo.mp4",
"duration": 312.5,
"segments": [
{
"start": 12.3,
"end": 18.7,
"text": "这里是识别出的内容"
},
{
"start": 18.7,
"end": 25.2,
"text": "这是下一段内容"
}
],
"language": "zh",
"language_probability": 0.987
}字段说明:
video_name: 原始视频文件名duration: 视频总时长(秒)segments: 转写片段数组start: 片段开始时间(秒)end: 片段结束时间(秒)text: 转写文本
language: 检测到的语言代码language_probability: 语言检测置信度
curl -X POST "http://localhost:8000/transcribe" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "file=@/path/to/your/video.mp4"import requests
url = "http://localhost:8000/transcribe"
files = {"file": open("your_video.mp4", "rb")}
response = requests.post(url, files=files)
result = response.json()
print(f"视频时长: {result['duration']} 秒")
print(f"检测语言: {result['language']}")
for segment in result['segments']:
print(f"[{segment['start']:.2f}s - {segment['end']:.2f}s] {segment['text']}")在 main.py 中修改转写器初始化参数:
transcriber = VideoTranscriber(
model_size="medium", # 可选: tiny, base, small, medium, large
device="cpu",
compute_type="int8"
)模型大小说明:
tiny: 最快,精度较低base: 较快,精度一般small: 平衡速度和精度(默认)medium: 较慢,精度较高large: 最慢,精度最高
在 main.py 的 extract_audio_from_video 调用中可以修改:
sample_rate: 采样率(默认 16000 Hz)channels: 声道数(默认 1,单声道)
video-transcriber/
├── main.py # FastAPI 入口和路由
├── transcriber.py # faster-whisper 转写逻辑
├── audio_utils.py # ffmpeg 音频提取工具
├── requirements.txt # Python 依赖
├── README.md # 项目文档
└── tmp/ # 临时文件目录(自动创建)
- 首次运行: faster-whisper 会在首次使用时自动下载模型,可能需要一些时间
- 临时文件: 所有临时文件在处理完成后会自动清理
- 文件大小: 大文件处理可能需要较长时间,建议在 Dify 工作流中设置合适的超时时间
- 内存使用: 模型大小影响内存占用,small 模型约占用 500MB-1GB 内存
# 确保已安装 ffmpeg
brew install ffmpeg
# 验证安装
which ffmpeg如果模型下载失败,可以手动下载并指定路径,或检查网络连接。
如果遇到内存问题,可以:
- 使用更小的模型(如
tiny或base) - 增加系统可用内存
欢迎提交 Issue 和 Pull Request!
本项目采用 MIT License 许可证。
- faster-whisper - 高性能 Whisper 实现
- FastAPI - 现代、快速的 Web 框架
- FFmpeg - 强大的音视频处理工具
如有问题或建议,欢迎提交 Issue。
⭐ 如果这个项目对你有帮助,请给个 Star!