MCP Video Extraction Plus

MCP Video Extraction Plus

Enables video text extraction using multiple speech recognition providers including local Whisper, JianYing/CapCut, and Bilibili Cut services. Supports video downloading, audio extraction, and automatic speech-to-text transcription with configurable providers.

Category
访问服务器

README

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
  • 添加导入语句,支持相对导入和绝对导入兼容

配置参数:

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

新增配置项:

# 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(本地模型,默认)

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(在线服务)

# 修改 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(在线服务)

# 修改 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. 通过环境变量配置

# 使用 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(分段数据)

@dataclass
class ASRDataSeg:
    text: str          # 分段文本
    start_time: float  # 开始时间(毫秒)
    end_time: float    # 结束时间(毫秒)

ASRData(完整数据)

@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 模块都支持相对导入绝对导入的双重兼容:

# 相对导入(在包内使用)
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 中添加相应配置项

许可证

保持原项目许可证不变。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选