Video Transcriber

io.github.nhatvu148由 GitHub 账号 nhatvu148 发布v0.10.6更新于 Oct 24, 2026

Transcribe videos from 1000+ platforms or local files offline, and search across every transcript

概览

AI 生成的概览

一个本地 MCP 服务器,可从 1000 多个平台下载视频或读取本地文件,用 whisper.cpp 离线转写,并可搜索已保存的转写文本。

可以做什么
转写来自网址(YouTube、Vimeo、TikTok 等 yt-dlp 支持的站点)或本地视频文件的视频,可选择模型大小和语言,并把 TXT、JSON、Markdown 三种转写结果写入输出目录。
适用场景
当你希望助手把讲座、会议、课程或社交视频转成文字,又不愿把音频发送到云端服务,并想保留可搜索的转写档案时使用。
运行要求
以本地二进制运行(Homebrew、cargo install 或预编译版本),支持 macOS、Linux、Windows;需要 yt-dlp 和 ffmpeg,从源码构建还需 cmake 与 libclang,并需下载 whisper 模型。可选:OPENROUTER_API_KEY 用于语义转写搜索,YT_DLP_COOKIES 或 YT_DLP_COOKIES_FROM_BROWSER 用于年龄限制或需登录的视频,REMOTE_WHISPER_URL 用于远程转写,MCP_ALLOWED_HOSTS 用于 HTTP 传输。
安装前请注意
转写本身离线,但下载网址会通过 yt-dlp 访问第三方平台。YT_DLP_COOKIES 指向含登录会话的浏览器 cookie 文件,应妥善保密。HTTP 传输只控制可达性而非授权:任何能访问该网址的人都能调用工具,配置远程 Whisper 或 OpenRouter 时 transcribe_video 会产生真实费用,公开部署前应加认证代理。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Video Transcriber,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Video Transcriber MCP 🚀

High-performance video transcription MCP server using whisper.cpp (Rust)

[License: MIT OR Apache-2.0] [Rust] [crates.io]

A Model Context Protocol (MCP) server that transcribes videos from 1000+ platforms using whisper.cpp. Built with Rust for maximum performance and efficiency.

📦 Installation

Homebrew (macOS/Linux) - Recommended

The easiest way to install with all dependencies:

bash
brew install nhatvu148/tap/video-transcriber-mcp

This automatically installs the binary along with required dependencies (cmake, yt-dlp, ffmpeg).

Cargo Install

If you have Rust installed:

bash
cargo install video-transcriber-mcp

Note: You'll need to manually install dependencies: yt-dlp, ffmpeg, cmake

Pre-built Binaries

Download from GitHub Releases:

bash
# macOS (Intel)curl -L https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest/download/video-transcriber-mcp-x86_64-apple-darwin.tar.gz | tar xzsudo mv video-transcriber-mcp /usr/local/bin/
# macOS (Apple Silicon)curl -L https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest/download/video-transcriber-mcp-aarch64-apple-darwin.tar.gz | tar xzsudo mv video-transcriber-mcp /usr/local/bin/
# Linux (x86_64) — no ARM64 Linux build, see issue #13; use `cargo install`curl -L https://github.com/nhatvu148/video-transcriber-mcp-rs/releases/latest/download/video-transcriber-mcp-x86_64-unknown-linux-gnu.tar.gz | tar xzsudo mv video-transcriber-mcp /usr/local/bin/
# Windows: Download .zip from releases page

Note: You'll need to manually install dependencies: yt-dlp, ffmpeg

Claude Code plugin

Installs the MCP server and a /transcribe skill in one step:

bash
/plugin marketplace add nhatvu148/video-transcriber-mcp-rs/plugin install video-transcriber@nhatvu148-tools

The plugin registers the MCP server for you, but it does not install the binary — run one of the install commands above first, so video-transcriber-mcp is on your PATH.

🎯 Why Rust?

This version uses whisper.cpp (C++ implementation with Rust bindings) instead of Python's OpenAI Whisper:

Advantagewhisper.cpp (Rust)OpenAI Whisper (Python)
PerformanceNative C++ speedPython interpreter overhead
MemoryLower footprintHigher memory usage
StartupInstant (<100ms)Slow (~2-3s model loading)
DependenciesStandalone binaryRequires Python + packages
PortabilitySingle binaryPython environment needed

Real-world performance depends on your hardware, video length, and chosen model.

✨ Features

  • 🚀 High performance transcription using whisper.cpp (C++ with Rust bindings)
  • 🎥 Download from 1000+ platforms (YouTube, Vimeo, TikTok, Twitter, etc.)
  • 📂 Transcribe local video files (mp4, avi, mov, mkv, etc.)
  • 🎤 100% offline transcription (privacy-first)
  • 🎛️ 5 model sizes (tiny, base, small, medium, large)
  • 🌐 90+ languages supported
  • 📝 Multiple output formats (TXT, JSON, Markdown)
  • 🔌 MCP integration for Claude Code
  • 🌐 Dual transport - stdio (local) and Streamable HTTP (remote)
  • ⚡ Native binary - no Python or Node.js required
  • 💾 Low memory footprint compared to Python implementations

⚡ Quick Start (Using Taskfile)

The fastest way to get started:

bash
# 1. Install Task (if not already installed)brew install go-task/tap/go-task
# 2. Complete setup (build + download model)task setup
# 3. Run a quick testtask test:quick
# Done! 🎉

Available Commands:

bash
task setup           # Complete project setuptask test:quick      # Test with short videotask benchmark       # Run performance benchmarktask deps:check      # Check dependenciestask download:base   # Download base modeltask help            # Show all commands

See Taskfile.yml for all available tasks.


🌐 Transport Modes

The server supports two transport modes:

Stdio Transport (Default)

Standard I/O transport for local CLI usage with Claude Code. This is the default mode.

bash
video-transcriber-mcp# or explicitly:video-transcriber-mcp --transport stdio

Streamable HTTP Transport

HTTP transport for remote access. Allows the MCP server to be accessed over the network.

bash
# Start HTTP server on default port (8080)video-transcriber-mcp --transport http
# Custom host and portvideo-transcriber-mcp --transport http --host 0.0.0.0 --port 3000

Remote MCP Client Configuration:

For HTTP transport, configure your MCP client with the URL:

json
{  "mcpServers": {    "video-transcriber-mcp": {      "url": "http://localhost:8080/mcp"    }  }}

Benefits of HTTP Transport:

  • No local installation required for clients
  • Centralized server deployment
  • Automatic updates (server-side)
  • Better for team environments
  • Compatible with serverless platforms

CLI Options

bash
video-transcriber-mcp --help
Options:  -t, --transport <TRANSPORT>  Transport mode [default: stdio] [possible values: stdio, http]      --host <HOST>            Host address for HTTP transport [default: 127.0.0.1]  -p, --port <PORT>            Port for HTTP transport [default: 8080]  -h, --help                   Print help  -V, --version                Print version

📦 Manual Build from Source

Prerequisites

  1. Rust (1.85+ for Rust 2024 edition)
bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. yt-dlp (for downloading videos)
bash
# macOSbrew install yt-dlp
# Linuxpip install yt-dlp
# Windowswinget install yt-dlp.yt-dlp
  1. FFmpeg (for audio processing)
bash
# macOSbrew install ffmpeg
# Linuxsudo apt install ffmpeg  # Debian/Ubuntusudo dnf install ffmpeg  # Fedora
# Windowschoco install ffmpeg
  1. clang/libclang (whisper-rs-sys uses bindgen to build whisper.cpp, which needs libclang at build time)
bash
# macOS: bundled with Xcode Command Line Tools
# Linuxsudo apt install libclang-dev  # Debian/Ubuntusudo dnf install clang-devel   # Fedora
# Windows: install LLVM (https://releases.llvm.org) and set LIBCLANG_PATH

Build from Source

bash
# Clone the repositorygit clone https://github.com/nhatvu148/video-transcriber-mcp-rs.gitcd video-transcriber-mcp-rs
# Build the projectcargo build --release
# The binary will be at: target/release/video-transcriber-mcp-rs

Download Whisper Models

bash
# Download base model (recommended for testing)bash scripts/download-models.sh base
# Or download all modelsbash scripts/download-models.sh all

Models are stored in ~/.cache/video-transcriber-mcp/models/

🚀 Quick Start

MCP Server (for Claude Code)

Add to ~/.claude/settings.json:

Option 1: If installed via GitHub Release or cargo install:

json
{  "mcpServers": {    "video-transcriber-mcp": {      "command": "video-transcriber-mcp",      "args": [],      "env": {        "RUST_LOG": "info"      }    }  }}

Option 2: If built from source:

json
{  "mcpServers": {    "video-transcriber-mcp": {      "command": "/absolute/path/to/video-transcriber-mcp-rs/target/release/video-transcriber-mcp",      "args": [],      "env": {        "RUST_LOG": "info"      }    }  }}

Then use in Claude Code:

Basic transcription (uses base model by default):

Please transcribe this YouTube video: https://www.youtube.com/watch?v=VIDEO_ID

Transcribe with specific model:

Transcribe this video using the large model for best accuracy:https://www.youtube.com/watch?v=VIDEO_ID

Transcribe local video file:

Transcribe this local video file: /Users/myname/Videos/meeting.mp4

Transcribe in specific language:

Transcribe this Spanish video: https://www.youtube.com/watch?v=VIDEO_ID(language: es, model: medium)

📊 Performance

Expected Performance Characteristics

Based on whisper.cpp vs OpenAI Whisper benchmarks from the community:

Transcription Speed (approximate, varies by hardware):

  • whisper.cpp is typically 2-6x faster than Python Whisper
  • Faster startup time (no Python interpreter overhead)
  • Lower memory footprint (no Python runtime)

Real-world factors that affect performance:

  • CPU: More cores = faster processing
  • Model size: Tiny is fastest, Large is slowest but most accurate
  • Video length: Longer videos take proportionally more time
  • Audio complexity: Clear speech transcribes faster than noisy audio

Want to help?

We're collecting real benchmark data! If you run both versions, please share your results:

  • Hardware specs (CPU, RAM)
  • Video length tested
  • Model used
  • Time taken for each version

Open an issue with your benchmark results to help improve this section!

🎛️ Model Comparison

ModelSpeedAccuracyMemoryUse Case
tiny⚡⚡⚡⚡⚡⭐⭐~400 MBQuick drafts, testing
base⚡⚡⚡⚡⭐⭐⭐~600 MBGeneral use (default)
small⚡⚡⚡⭐⭐⭐⭐~1.2 GBBetter accuracy
medium⚡⚡⭐⭐⭐⭐⭐~2.5 GBHigh accuracy
large⚡⭐⭐⭐⭐⭐⭐~4.8 GBBest accuracy, slowest

🌍 Supported Platforms

Thanks to yt-dlp, this tool supports 1000+ video platforms including:

  • Social Media: YouTube, TikTok, Twitter/X, Facebook, Instagram, Reddit
  • Video Hosting: Vimeo, Dailymotion, Twitch
  • Educational: Coursera, Udemy, Khan Academy, edX
  • News: BBC, CNN, NBC, PBS
  • And 1000+ more!

📝 Output Format

For each video, three files are generated in ~/Downloads/video-transcripts/:

video-id-title.txt   # Plain text transcriptvideo-id-title.json  # JSON with metadata and timestampsvideo-id-title.md    # Markdown with video info

Example Output

markdown
# How to Build Fast Software
**Video:** https://www.youtube.com/watch?v=example**Platform:** YouTube**Channel:** Tech Channel**Duration:** 600s
---
## Transcript
The key to building fast software is understanding...
---
*Transcribed using whisper.cpp (Rust) - Model: base*

🔧 Configuration

Environment Variables

All environment variables are optional. The transcriber works with none of them set; they unlock authentication, remote inference, AI summaries, and the paid HTTP API.

💡 The transcript output directory is not an env var — pass output_dir to the transcribe_video tool (defaults to ~/Downloads/video-transcripts). Output files are named <video_id>-<title>.{txt,json,md}.

Remote MCP access (--transport http)

The HTTP transport only answers requests whose Host header is on an allowlist. It defaults to loopback (localhost, 127.0.0.1, ::1) as protection against [DNS rebinding][dns-rebinding], which means a deployed instance rejects its own public hostname with 403 until you name it:

bash
# Comma-separated. Added on top of the loopback defaults, so local# development and health checks keep working.export MCP_ALLOWED_HOSTS=mcp.example.com,mcp.example.com:8080
# On Fly:fly secrets set MCP_ALLOWED_HOSTS=your-app.fly.dev

Leave it unset for local use — the server logs which hosts it accepts at startup, so a 403 from a remote client is easy to diagnose.

⚠️ This controls reachability, not authorization. Anyone who can reach the URL can call the tools, including transcribe_video, which spends real money when remote Whisper / OpenRouter are configured. Put an authenticating proxy in front of a public deployment.

Downloading (yt-dlp cookies)

Needed only for age-restricted / members-only videos or YouTube's "Sign in to confirm you're not a bot" challenge.

bash
# Option 1 (preferred on headless / Linux): a Netscape-format cookies file.# Export it however you like — e.g. a QR-login flow — then point at it.export YT_DLP_COOKIES=/path/to/cookies.txt
# Option 2: read cookies straight from a logged-in local browser.# One of: chrome, brave, edge, firefox, safari, chromium, opera, vivaldi.# Ignored when YT_DLP_COOKIES is set.export YT_DLP_COOKIES_FROM_BROWSER=chrome
Remote Whisper (offload transcription)
bash
# POST audio to a remote HTTP worker (e.g. a serverless GPU) instead of# running whisper-rs locally. Endpoint must accept multipart {audio, model,# language} and return JSON {transcript, segments[], language, duration_s}.export REMOTE_WHISPER_URL=https://your-worker.example.com/transcribe

🧪 Development

Build

bash
# Debug buildcargo build
# Release build (optimized)cargo build --release
# Run testscargo test
# Run with loggingRUST_LOG=debug cargo run -- --url "https://youtube.com/watch?v=example"

Project Structure

src/├── main.rs           # CLI + transport selection (stdio / streamable HTTP)├── lib.rs            # public API for embedders├── mcp/              # MCP server: tool definitions and handlers├── transcriber/      # the pipeline: yt-dlp → ffmpeg → whisper.cpp├── embeddings.rs     # passage embeddings, used by `search_transcripts`└── utils/            # paths

This crate is only the transcription pipeline and its MCP surface. The product built on top of it — REST API, accounts, credits, payments, AI summaries and diagrams — lives in a separate private crate that depends on this one as a library, so cargo install video-transcriber-mcp gets you a transcription server rather than somebody else's SaaS backend.

🤝 Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

🙏 Acknowledgments

🆚 Comparison with TypeScript Version

I built the original video-transcriber-mcp in TypeScript. Here's why I rewrote it in Rust:

AspectTypeScript VersionRust Version
Transcription Speed5 min for 10-min video50s (6x faster)
Memory Usage~2 GB~800 MB (2.5x less)
Startup Time~2s<100ms (20x faster)
Binary SizeN/A (Node.js runtime)~8 MB standalone
DependenciesNode.js, Python, whisperJust yt-dlp, ffmpeg
CPU UsageHigh (Python overhead)Lower (native code)

The Rust version is production-ready and significantly more efficient!

🔗 Links

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


Built with ❤️ in Rust for maximum performance

MCP registry ownership token — crates.io strips HTML comments, so this line has to stay visible:

mcp-name: io.github.nhatvu148/video-transcriber-mcp

来源:README.md,提交 eca03fd

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.10.6最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分