Skip to main content
Glama

dialogue-transcriber

会話を文字起こしして、誰が何を言ったかを明らかにします。

CI PyPI License: Apache-2.0 Python

インタビュー、パネルディスカッション、会議の録音、または YouTube の URL を指定すると、すべての行が話者に割り当てられた文字起こしが得られます。さらに、話者クラスターを調べたり、任意のセグメントを再生したり、ラベルを手動で修正したりできる Web UI も付属しています。

レビュー UI: 話者クラスター、波形、タイムライン、検索可能な文字起こし

仕組み

audio  ──►  transcribe  ──►  segment  ──►  extract_clips  ──►  embed  ──►  cluster
              (Whisper)        (sentence-       (ffmpeg)       (TitaNet)    (UMAP +
                               level)                                       KMeans +
                                                                            silhouette)

Whisper が単語レベルのタイムスタンプを生成し、単語は文のセグメントにグループ化されます。各セグメントの音声は NVIDIA NeMo TitaNet で埋め込まれ、その埋め込みは UMAP 投影上でクラスタリングされ、文字起こしは Speaker 1、Speaker 2、… というラベル付きで出力されます。すべての段階はコンテンツハッシュに基づいてキャッシュされるため、再実行や設定の微調整は低コストです。

Related MCP server: youtube-transcriber-mcp

クイックスタート

ffmpeg と ffprobe が PATH に含まれている必要があります (macOS では brew install ffmpeg)。

# No install needed:
uvx --from "dialogue-transcriber[all]" transcriber transcribe interview.mp3

# Or install the tool:
uv tool install "dialogue-transcriber[all]"

transcriber transcribe interview.mp3 --participants 2
transcriber transcribe "https://www.youtube.com/watch?v=..." --backend openai
transcriber serve interview.mp3        # review UI on http://127.0.0.1:8000

デフォルトのバックエンドは faster-whisper をローカルで実行します。--backend openai は代わりに OpenAI Whisper API を使用します (OPENAI_API_KEY が必要で、GPU のないマシンでははるかに高速です)。キーは環境変数としてエクスポートするか、プロジェクト内の .env ファイルに保存できます。CLI は作業ディレクトリ (または最も近い親ディレクトリ) から .env を読み込み、エクスポートされた変数は常にファイルより優先されます。

データはどこに保存されますか?

  • パイプラインキャッシュ: 実行するディレクトリ内の ./.transcriber-cache/ (--work-dir で上書き可能) — チャンク、セグメントごとのクリップ、埋め込み、YouTube のダウンロード、Web UI のジョブ状態。削除しても安全です。再構築されます。

  • 文字起こし: 入力音声の隣 (interview.txt) または --output が指す場所に書き込まれます。--output - は stdout に出力します。

  • モデルの重み (ローカルバックエンド): ~/.cache (Hugging Face / NeMo) に一度だけダウンロードされます。Whisper large-v3 のダウンロードは ~3 GB あるため、最初のローカル実行には時間がかかります。

デフォルトのローカルバックエンドでは、データがマシンの外部に出ることはありません。--backend openai は音声を OpenAI API に送信します。

追加機能の選択

[all] が簡単な方法です。より小さなインストールの場合は:

uv pip install dialogue-transcriber              # core only
uv pip install "dialogue-transcriber[local]"     # + faster-whisper backend
uv pip install "dialogue-transcriber[openai]"    # + OpenAI Whisper API backend
uv pip install "dialogue-transcriber[cluster]"   # + scikit-learn / UMAP
uv pip install "dialogue-transcriber[embed]"     # + NeMo TitaNet speaker embedder
uv pip install "dialogue-transcriber[api]"       # + FastAPI backend (powers the web UI)
uv pip install "dialogue-transcriber[youtube]"   # + yt-dlp downloader
uv pip install "dialogue-transcriber[oip]"       # + MCP server for OIP consumers

CLI

# Full pipeline; writes a speaker-labeled transcript next to the audio
transcriber transcribe path/to/audio.mp3

# Speakers, language, format
transcriber transcribe interview.mp3 --participants 3 --language sv --format vtt

# Machine-readable output on stdout (see "For AI agents" below)
transcriber transcribe interview.mp3 --format json --output -

# Pull audio from YouTube
transcriber download "https://www.youtube.com/watch?v=..."

# Pipeline + web UI
transcriber serve interview.mp3 --participants 3

形式: txt (統合された話者ターン)、vtt、srt、json。--context "names, jargon" を渡すと、Whisper に期待すべき語彙を事前に与えることができます。--output - は文字起こしを stdout に、サマリーを stderr にストリーム出力するため、出力をきれいにパイプできます。

Web UI

transcriber serve は FastAPI バックエンドを実行し、バンドルされた React フロントエンドを配信します。次の機能が利用できます:

  • UMAP 散布図。各ドットは 1 つのセグメントで、クラスターごとに色分けされています。クラスターを投げ縄選択すると一括で名前を変更できます。

  • セグメントごとに 1 つの領域を持つ連続波形 — クリックまたはスクラブで任意の部分を再生できます。

  • ガントチャート形式の話者タイムライン。

  • 全文検索対応の仮想化された文字起こし。

  • インラインで名前を変更できる話者チップ (名前の変更はサーバー側に保存されます)。

  • TXT / VTT / SRT エクスポート。

  • キーボードナビゲーション (↑/↓ でセグメント移動、Space で再生/一時停止、/ で検索)。

複数のジョブを並行して実行できます。サイドバーからさらに追加できます。

serve はバックエンドを自動的に選択します。OPENAI_API_KEY が利用可能な場合 (環境変数または .env) は openai、それ以外の場合は local です。明示的に選択するには --backend を渡します。(レガシーな単一ジョブの Dash UI は transcriber ui として引き続き利用できます。)

AI エージェント向け

このプロジェクトは、人間だけでなくエージェントからも操作できるように設計されています。

Claude Code スキル — このリポジトリは プラグインマーケットプレイス を兼ねています。スキルをインストールすると、Claude Code はオンデマンドで音声の文字起こしと話者分離を行う方法を理解します:

/plugin marketplace add Novia-RDI-Seafaring/transcriber
/plugin install dialogue-transcriber@dialogue-transcriber

構造化出力 — --format json --output - は stdout に安定した形状を出力します:

{
  "speakers": ["Speaker 1", "Speaker 2"],
  "n_segments": 42,
  "duration": 512.3,
  "segments": [
    {"speaker": "Speaker 1", "start": 0.0, "end": 4.2, "text": "..."}
  ]
}

MCP / OIP — このパッケージは Open Ingestion Protocol プロデューサーであるため、文字起こしはコンシューマー側の変更なしに、OIP 対応の任意のコンシューマー (例: Anchor) が取り込むことができます:

transcriber oip install --data-dir ~/transcripts     # register the producer
transcriber oip ingest audio.mp3 --data-dir ~/transcripts
transcriber oip serve                                # MCP server (also: transcriber-mcp)

ツール名前空間: transcribe。リージョン種別: transcript_segment。source_ref.kind: audio-timestamp。

ライブラリの使用

from transcriber.config import ClusterConfig, PipelineConfig, TranscribeConfig
from transcriber.pipeline import run_pipeline
from transcriber.render import render_txt

cfg = PipelineConfig(
    transcribe=TranscribeConfig(backend="local", language="en"),
    cluster=ClusterConfig(participants=2),
)
result = run_pipeline("interview.mp3", config=cfg)
print(render_txt(result.segments))

PipelineResult.segments は、文のテキスト、時間範囲、ディスク上のクリップ、割り当てられた話者を含む SpeakerSegment レコードのリストです。PipelineResult.cluster.projection はプロット用の 2 次元 UMAP です。

バックエンド

処理内容

デフォルト

上書き方法

文字起こし

faster-whisper large-v3

--backend openai

埋め込み

nvidia/speakerverification_en_titanet_large

run_pipeline に embedder= を渡す

クラスタリング

UMAP(2) + KMeans + silhouette

ClusterConfig を渡す

YouTube

yt-dlp

YouTubeDownloader を置き換える

すべてのバックエンドは Protocol です — transcriber/transcribe/base.py と transcriber/embed/base.py を参照してください。テストはインメモリのフェイクを使用するため、スイートの実行に重いモデルは必要ありません。

開発

ガイドラインは CONTRIBUTING.md、リリース履歴は CHANGELOG.md を参照してください。

git clone https://github.com/Novia-RDI-Seafaring/transcriber
cd transcriber
uv venv
uv pip install -e ".[dev,cluster,api,openai,embed,youtube]"
(cd web && pnpm install && pnpm build)   # so `transcriber serve` can serve the UI

pytest                  # core + clustering + api tests
pytest -m "not slow"    # skip heavy/network tests
ruff check src tests

フロントエンドの作業: 別のシェルで transcriber serve … --port 8000 を実行した状態で、cd web && pnpm dev (http://127.0.0.1:5173、/api を :8000 にプロキシ) を実行します。

リリース: GitHub リリースを公開すると .github/workflows/release.yml がトリガーされ、フロントエンドをビルドして wheel にバンドルし、トラステッドパブリッシングで PyPI に公開します。

ライセンス

Apache-2.0 — LICENSE を参照してください。

Related MCP Connectors

Related MCP Servers