Skip to main content
Glama
README.md7.37 kB
fork from MCP Video Extraction # MCP Video Extraction plus - 语音识别服务集成修改说明 ## 概述 本次修改将项目的语音识别服务从仅支持 **Whisper(本地模型)** 扩展为支持三种方式: 1. **Whisper** - OpenAI 的本地语音识别模型(原有) 2. **JianYing (CapCut)** - 字节跳动简影/CapCut 的在线语音识别服务 3. **Bcut (B站剪辑)** - 哔哩哔哩剪辑的在线语音识别服务 ## Overview This update expands the project's speech recognition service from supporting only **Whisper (local model)** to supporting three methods: 1. **Whisper** – OpenAI's local speech recognition model (original) 2. **JianYing (CapCut)** – ByteDance's JianYing/CapCut online speech recognition service 3. **Bcut (Bilibili Cut)** – Bilibili's online speech recognition service ## 新增文件 ### 核心 ASR 模块 | 文件 | 说明 | | ------------------------------------------------ | --------------------------------------- | | `src/mcp_video_service/services/asr_data.py` | ASR 数据结构定义(ASRDataSeg、ASRData) | | `src/mcp_video_service/services/status.py` | ASR 任务状态枚举 | | `src/mcp_video_service/services/base_asr.py` | 基础 ASR 抽象类,所有 ASR 实现的父类 | | `src/mcp_video_service/services/jianying_asr.py` | 简影(CapCut)语音识别实现 | | `src/mcp_video_service/services/bcut_asr.py` | B站剪辑(Bcut)语音识别实现 | | `src/mcp_video_service/services/__init__.py` | Services 包初始化文件 | ## 修改的文件 ### 1. `src/mcp_video_service/services/video_service.py` **主要改动:** - 添加 ASR 提供者配置支持(`asr_provider`) - 修改 `__init__` 方法,支持从配置文件读取 ASR 提供者选择 - 新增 `_create_asr_instance()` 方法,根据配置创建对应的 ASR 实例 - 修改 `extract_text()` 方法,支持多种 ASR 提供者 - 如果选择 Whisper,使用本地模型 - 如果选择 JianYing 或 Bcut,调用在线 API - 添加导入语句,支持相对导入和绝对导入兼容 **配置参数:** ```python self.config = { 'asr': { 'provider': 'whisper', # 可选: whisper, jianying, bcut 'use_cache': False, 'need_word_time_stamp': False, }, 'jianying': { 'start_time': 0, 'end_time': 6000, }, # ... 其他配置 } ``` ### 2. `config.yaml` **新增配置项:** ```yaml # ASR(自动语音识别)提供者配置 asr: provider: "whisper" # 可选: whisper, jianying, bcut use_cache: false need_word_time_stamp: false # JianYing (CapCut) 语音识别配置 jianying: start_time: 0 # 音频开始时间(毫秒) end_time: 6000 # 音频结束时间(毫秒) # Bcut (B站剪辑) 语音识别配置 # 暂无特殊配置,使用默认值 ``` ## 使用方式 ### 1. 使用 Whisper(本地模型,默认) ```python from mcp_video_service.services.video_service import VideoService service = VideoService(config_path='config.yaml') # config.yaml 中设置: asr.provider = "whisper" text = await service.extract_text('audio.mp3') ``` ### 2. 使用 JianYing(在线服务) ```python # 修改 config.yaml # asr: # provider: "jianying" # use_cache: false # need_word_time_stamp: false # jianying: # start_time: 0 # end_time: 6000 service = VideoService(config_path='config.yaml') text = await service.extract_text('audio.mp3') ``` ### 3. 使用 Bcut(在线服务) ```python # 修改 config.yaml # asr: # provider: "bcut" # use_cache: true # need_word_time_stamp: false service = VideoService(config_path='config.yaml') text = await service.extract_text('audio.mp3') ``` ### 4. 通过环境变量配置 ```bash # 使用 JianYing export ASR_PROVIDER=jianying export ASR_USE_CACHE=false export JIANYING_START_TIME=0 export JIANYING_END_TIME=6000 # 使用 Bcut export ASR_PROVIDER=bcut export ASR_USE_CACHE=true ``` ## 架构设计 ### 类继承关系 ``` BaseASR (抽象基类) ├── JianYingASR ├── BcutASR └── VideoService (使用 Whisper 时直接调用 whisper.load_model) ``` ### BaseASR 的主要特性 - **统一接口**:所有 ASR 实现都继承自 `BaseASR` - **缓存支持**:通过 CRC32 校验和生成缓存键 - **速率限制**:内置速率限制机制,防止 API 过载 - **进度回调**:支持异步进度回调函数 - **错误处理**:统一的错误处理和日志记录 ## 数据结构 ### ASRDataSeg(分段数据) ```python @dataclass class ASRDataSeg: text: str # 分段文本 start_time: float # 开始时间(毫秒) end_time: float # 结束时间(毫秒) ``` ### ASRData(完整数据) ```python @dataclass class ASRData: text: str # 完整文本 segments: List[ASRDataSeg] # 分段列表 ``` ## 状态管理 ASR 任务的状态通过 `ASRStatus` 枚举管理: | 状态 | 进度 | 说明 | | --------------- | ---- | ---------- | | UPLOADING | 20 | 上传中 | | SUBMITTING | 40 | 提交中 | | QUERYING_RESULT | 60 | 查询结果中 | | CREATING_TASK | 40 | 创建任务中 | | TRANSCRIBING | 60 | 转录中 | | COMPLETED | 100 | 已完成 | ## 导入兼容性 所有新增的 ASR 模块都支持**相对导入**和**绝对导入**的双重兼容: ```python # 相对导入(在包内使用) from .asr_data import ASRDataSeg from .base_asr import BaseASR # 绝对导入(直接加载模块时使用) from asr_data import ASRDataSeg from base_asr import BaseASR ``` 这确保了模块在不同的导入场景下都能正常工作。 ## 依赖项 ### 新增依赖 - `requests` - 用于 HTTP 请求(JianYing 和 Bcut API) ### 现有依赖 - `yt-dlp` - 视频下载 - `whisper` - 本地语音识别(仅在使用 Whisper 时需要) - `pyyaml` - 配置文件解析 ## 环境变量支持 | 环境变量 | 说明 | 默认值 | | --------------------- | --------------------- | ------- | | `ASR_PROVIDER` | ASR 提供者 | whisper | | `ASR_USE_CACHE` | 是否使用缓存 | false | | `ASR_WORD_TIME_STAMP` | 是否需要词级时间戳 | false | | `JIANYING_START_TIME` | JianYing 音频开始时间 | 0 | | `JIANYING_END_TIME` | JianYing 音频结束时间 | 6000 | | `WHISPER_MODEL` | Whisper 模型大小 | base | | `WHISPER_LANGUAGE` | Whisper 语言 | auto | ## 向后兼容性 本次修改完全向后兼容: - 默认 ASR 提供者为 `whisper`,保持原有行为 - 原有的 `extract_text()` 接口保持不变 - 所有新增功能都是可选的 ## 测试验证 所有新增模块已通过以下验证: - ✓ Python 语法检查 - ✓ 模块导入测试 - ✓ 类继承关系验证 - ✓ 配置文件解析测试 ## 后续扩展 该架构支持轻松添加新的 ASR 提供者: 1. 创建新类继承 `BaseASR` 2. 实现 `_run()` 和 `_make_segments()` 方法 3. 在 `VideoService._create_asr_instance()` 中添加条件分支 4. 在 `config.yaml` 中添加相应配置项 ## 许可证 保持原项目许可证不变。

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/takereshui/mcp-video-extraction-plus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server