Skip to main content
Glama
nhatvu148

video-transcriber-mcp

by nhatvu148

Video Transcriber MCP 🚀

whisper.cpp(Rust)を使用した高性能ビデオ文字起こしMCPサーバー

License: MIT OR Apache-2.0 Rust crates.io

whisper.cpp を使用して 1000以上のプラットフォーム の動画を文字起こしする Model Context Protocol(MCP)サーバーです。最大限のパフォーマンスと効率性を実現するために Rust で構築されています。

📦 インストール

Homebrew(macOS/Linux)- 推奨

すべての依存関係を含めてインストールする最も簡単な方法です。

brew install nhatvu148/tap/video-transcriber-mcp

これにより、必要な依存関係(cmake、yt-dlp、ffmpeg)とともにバイナリが自動的にインストールされます。

Cargo でのインストール

Rust がインストールされている場合:

cargo install video-transcriber-mcp

注意: 依存関係(yt-dlp、ffmpeg、cmake)を手動でインストールする必要があります。

プリビルドバイナリ

GitHub Releases からダウンロードします:

# 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 xz
sudo 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 xz
sudo 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 xz
sudo mv video-transcriber-mcp /usr/local/bin/

# Windows: Download .zip from releases page

注意: 依存関係(yt-dlp、ffmpeg)を手動でインストールする必要があります。

Claude Code プラグイン

MCP サーバーと /transcribe スキルを1ステップでインストールします:

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

このプラグインは MCP サーバーを登録しますが、バイナリのインストールは行いません。まず上記のインストールコマンドのいずれかを実行して、video-transcriber-mcp を PATH に配置してください。

Related MCP server: Video Transcriber MCP Server

🎯 なぜ Rust なのか?

このバージョンでは、Python の OpenAI Whisper ではなく whisper.cpp(Rust バインディングを備えた C++ 実装)を使用しています:

利点

whisper.cpp (Rust)

OpenAI Whisper (Python)

パフォーマンス

ネイティブ C++ の速度

Python インタープリタのオーバーヘッド

メモリ

低いフットプリント

高いメモリ使用量

起動

即座に起動(<100ms)

遅い(約2〜3秒のモデル読み込み)

依存関係

スタンドアロンバイナリ

Python + パッケージが必要

移植性

単一バイナリ

Python 環境が必要

実際のパフォーマンスは、ハードウェア、動画の長さ、および選択したモデルによって異なります。

✨ 特徴

  • 🚀 whisper.cpp(C++ と Rust バインディング)による高パフォーマンスな文字起こし

  • 🎥 1000以上のプラットフォーム(YouTube、Vimeo、TikTok、Twitter など)からダウンロード

  • 📂 ローカル動画ファイル(mp4、avi、mov、mkv など)の文字起こし

  • 🎤 100% オフラインでの文字起こし(プライバシー最優先)

  • 🎛️ 5つのモデルサイズ(tiny、base、small、medium、large)

  • 🌐 90以上の言語に対応

  • 📝 複数の出力形式(TXT、JSON、Markdown)

  • 🔌 Claude Code 向け MCP 統合

  • 🌐 デュアルトランスポート - stdio(ローカル)と Streamable HTTP(リモート)

  • ⚡ ネイティブバイナリ - Python や Node.js は不要

  • 💾 Python 実装と比較して低メモリフットプリント

⚡ クイックスタート(Taskfile を使用)

最も手軽に始める方法:

# 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 test
task test:quick

# Done! 🎉

利用可能なコマンド:

task setup           # Complete project setup
task test:quick      # Test with short video
task benchmark       # Run performance benchmark
task deps:check      # Check dependencies
task download:base   # Download base model
task help            # Show all commands

利用可能なすべてのタスクについては、Taskfile.yml を参照してください。


🌐 トランスポートモード

このサーバーは2つのトランスポートモードをサポートしています:

Stdio トランスポート(デフォルト)

Claude Code でローカル CLI を使用するための標準入出力トランスポートです。これがデフォルトのモードです。

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

Streamable HTTP トランスポート

リモートアクセス用の HTTP トランスポートです。MCP サーバーへのネットワーク経由でのアクセスを可能にします。

# Start HTTP server on default port (8080)
video-transcriber-mcp --transport http

# Custom host and port
video-transcriber-mcp --transport http --host 0.0.0.0 --port 3000

リモート MCP クライアント設定:

HTTP トランスポートの場合、MCP クライアントに以下の URL を設定します。

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

HTTP トランスポートの利点:

  • クライアントにローカルインストールが不要

  • サーバーの一元管理が可能

  • 自動更新(サーバー側)

  • チーム環境により適している

  • サーバーレスプラットフォームと互換性がある

CLI オプション

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

📦 ソースからの手動ビルド

前提条件

  1. Rust(Rust 2024 edition 用の 1.85+)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. yt-dlp(動画のダウンロード用)

# macOS
brew install yt-dlp

# Linux
pip install yt-dlp

# Windows
winget install yt-dlp.yt-dlp
  1. FFmpeg(音声処理用)

# macOS
brew install ffmpeg

# Linux
sudo apt install ffmpeg  # Debian/Ubuntu
sudo dnf install ffmpeg  # Fedora

# Windows
choco install ffmpeg

ソースからのビルド

# Clone the repository
git clone https://github.com/nhatvu148/video-transcriber-mcp-rs.git
cd video-transcriber-mcp-rs

# Build the project
cargo build --release

# The binary will be at: target/release/video-transcriber-mcp-rs

Whisper モデルのダウンロード

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

# Or download all models
bash scripts/download-models.sh all

モデルは ~/.cache/video-transcriber-mcp/models/ に保存されます。

🚀 クイックスタート

MCP サーバー(Claude Code 用)

~/.claude/settings.json に追加します:

オプション1: GitHub Release または cargo install でインストールした場合:

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

オプション2: ソースからビルドした場合:

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

その後、Claude Code で使用します:

基本的な文字起こし(デフォルトでは base モデルを使用):

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

特定のモデルでの文字起こし:

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

ローカル動画ファイルの文字起こし:

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

特定の言語での文字起こし:

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

📊 パフォーマンス

期待されるパフォーマンス特性

コミュニティでの whisper.cpp と OpenAI Whisper のベンチマークに基づく:

文字起こし速度(概算であり、ハードウェアによって異なります):

  • whisper.cpp は通常 Python Whisper よりも 2〜6倍高速です

  • 起動時間が短い(Python インタープリタのオーバーヘッドなし)

  • メモリフットプリントが低い(Python ランタイムなし)

実際のパフォーマンスに影響する要因:

  • CPU: コア数が多いほど処理が速い

  • モデルサイズ: Tiny が最速、Large は最も遅いが最も正確

  • 動画の長さ: 長い動画は比例して時間がかかる

  • 音声の複雑さ: ノイズの少ない明瞭な音声の方が、ノイズの多い音声よりも高速に文字起こしできます

協力のお願い

実際のベンチマークデータを収集しています!両方のバージョンを実行した場合は、結果を共有してください:

  • ハードウェア仕様(CPU、RAM)

  • テストした動画の長さ

  • 使用したモデル

  • 各バージョンにかかった時間

ベンチマーク結果を issue として開いて、このセクションの改善にご協力ください!

🎛️ モデル比較

モデル

速度

精度

メモリ

使用例

tiny

⚡⚡⚡⚡⚡

⭐⭐

~400 MB

クイックドラフト、テスト用

base

⚡⚡⚡⚡

⭐⭐⭐

~600 MB

一般的な用途(デフォルト)

small

⚡⚡⚡

⭐⭐⭐⭐

~1.2 GB

高い精度

medium

⚡⚡

⭐⭐⭐⭐⭐

~2.5 GB

高精度

large

⚡

⭐⭐⭐⭐⭐⭐

~4.8 GB

最高精度、最も遅い

🌍 対応プラットフォーム

yt-dlp のおかげで、このツールは 1000以上の動画プラットフォーム をサポートしています:

  • ソーシャルメディア: YouTube、TikTok、Twitter/X、Facebook、Instagram、Reddit

  • 動画ホスティング: Vimeo、Dailymotion、Twitch

  • 教育: Coursera、Udemy、Khan Academy、edX

  • ニュース: BBC、CNN、NBC、PBS

  • そしてその他1000以上!

📝 出力形式

各動画について、~/Downloads/video-transcripts/ に3つのファイルが生成されます:

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

出力例

# 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*

🛠️ 設定

環境変数

環境変数はすべてオプションです。トランスクライバーは設定なしで動作します。環境変数は、認証、リモート推論、AI要約、有料 HTTP API を解放します。

💡 文字起こしの出力ディレクトリは環境変数ではなく、transcribe_video ツールに output_dir を渡してください(デフォルトは ~/Downloads/video-transcripts)。出力ファイルの名前は <video_id>-<title>.{txt,json,md} です。

リモート MCP アクセス(--transport http)

HTTP トランスポートは、Host ヘッダーが許可リストにあるリクエストのみに応答します。デフォルトでは、[DNS リバインディング][dns-rebinding] に対する保護としてループバック(localhost、127.0.0.1、::1)になっています。つまり、デプロイされ出力されたインスタンスは、公開ホスト名を明示的に指定するまで、自らのパブリックホスト名を 403 で拒否します。

# 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

ローカル使用では設定しなくてかまいません。サーバーは起動時に受け入れるホストをログに出力するため、リモートクライアントからの 403 は簡単に診断できます。

⚠️ これは到達可能性を制御するものであり、外部だけを制御するものではありません。URL に到達できる人なら誰でも、ツール(transcribe_video を含む)を呼び出せます。リモートの Whisper / OpenRouter を設定している場合、これは実際にお金を使います。公開デプロイメントの前には認証プロキシを設置してください。

ダウンロード(yt-dlp cookies)

年齢制限・メンバー限定動画、または YouTube の「サインインしてボットでないことを確認してください」というチャレンジが必要な場合にのみ必要です。

# 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

リモート Whisper(文字起こしのオフローディング)

# 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

🧪 開発

ビルド

# Debug build
cargo build

# Release build (optimized)
cargo build --release

# Run tests
cargo test

# Run with logging
RUST_LOG=debug cargo run -- --url "https://youtube.com/watch?v=example"

プロジェクト構造

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

このクレートは、文字起こしパイプラインとその MCP サーフェスのみが含まれています。このクレートの上に構築されるプロダクト(REST API、アカウント、クレジット、決済、テキストブラウズ)は、このクレートをライブラリとして依存する別のセキュリティなプライベートクレートに存在します。cargo install video-transcriber-mcp でインストールされるのは、他の誰かの SaaS バックエンドではなく、文字起こしサーバーです。

🤝 コントリビューション

コントリビューションは歓迎します!どうぞ:

  1. リポジトリをフォーク

  2. フィーチャーブランチを作成

  3. 変更を加える

  4. 該当する場合はテストを追加

  5. プルリクエストを送信

📄 ライセンス

MIT ライセンス - 詳細は LICENSE ファイルを参照してください

🙏 謝辞

  • [whisper.cpp]https[://github.com/ggerganov/whisper.cpp) - Whisper の高速で軽量な C++ 実装

  • [whisper-rs](https:// lar) - whisper.cpp の Rust バインディング

  • yt-dlp - 1000以上のプラットフォーム対応の動画ダウンローダー

  • OpenAI Whisper - オリジナルの音声認識モデル

  • Model Context Protocol SDK - MCP 用 Rust SDK

🆚 TypeScript バージョンとの比較

私は元の video-transcriber-mcp を TypeScript で開発しました。Rust で書き直した理由は次のとおりです:

項目

TypeScript バージョン

Rust バージョン

文字起こし速度

10分の動画あたり5分

50秒(6倍高速)

メモリ使用量

~2 GB

~800 MB(2.5倍減)

起動時間

~2s

<100ms(20倍高速)

バイナリサイズ

N/A(Node.js ランタイム)

~8 MB スタンドアロン

依存関係

Node.js、Python、whisper

yt-dlp、ffmpeg のみ

CPU 使用率

高い(Python オーバーヘッド)

低い(ネイティブコード)

Rust バージョンは本番環境に対応しており、大幅に効率的です!

🔗 リンク

License

MIT license (LICENSE-MIT) または Apache License, Version 2.0 (LICENSE-APACHE) のどちらかの条件の下でライセンスされています。

Contribution

明示的に別段の指定がない限り、Apache-2.0 ライセンスに定義された、あなたが意図的に提供に含めるコントリビューションは、上記のとおりデュアルライセンスされます。追加の条件はありません。


最大のパフォーマンスを求めて、Rust で心を込めてビルド

MCP registry ownership token - crates.io は HTML コメントを取り除くため、この行は表示しておく必要があります:

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

Related MCP Connectors

Related MCP Servers