mcpField
R
rostrum

rostrum

ローカル
github.com/girishkvsメディア・デザイン02 週間前に更新

rostrum について

rostrumは、講演者やイベントチーム向けに録画を確認して整えるローカルのコマンドラインツールです。撮り直し、繰り返し、無音などの候補を検出して編集動画をレンダリング・検証し、標準では事前確認を求めます。

主な機能

  1. 01撮り直し、繰り返し、無音区間の検出
  2. 02HTML画面で編集候補を確認・調整
  3. 03ffmpegによるフレーム精度のレンダリング
  4. 04音声、映像、デコード、同期の検証
  5. 05分割した講演やイベントフォルダーの処理
  6. 06MCPサーバー経由でのジョブ操作

活用シーン

  1. 01一度撮りの講演から撮り直し部分を除去
  2. 02複数ファイルの録画で編集箇所を確認・調整
  3. 03イベント全体の録画を整理
  4. 04エージェントに編集候補を用意させて人が確認

MCP 対応

`rostrum mcp`でstdio経由のMCPサーバーを起動します。エージェントはコマンドを利用でき、時間のかかる処理はポーリング可能なジョブとして扱われます。記載された手順ではレンダリング前の確認が必要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"girishkvs-rostrum": {
"command": "uvx",
"args": [
"rostrum"
]
}
}
}
起動コマンドuvx rostrum

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypirostrum0.1.0

ツール

11

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
pathsarrayはい
engineanyいいえ
project_dirstringはい

詳細

rostrum

1 本の動画からイベント全体まで、手作業でもエージェント経由でも、トークの録画をきれいに編集できます。 rostrum は言い直し、撮り直し、繰り返し、無音部分を見つけ、理由とともにすべてのカットを表示してから、ffmpeg でレンダリングし、結果をチェックします。すべての処理はお使いのマシン上で実行されます。

rostrum による短いデモトークの編集:init でカットを検出し、レビュー画面で 1 つ調整した後、インポート、レンダリング、検証を行います

58 秒の合成デモトークです。ターミナルには、実際の出力を主な行に絞って表示しています。

トークを一度に録画すると、文やスライド、クリックをやり直すことになります。こうした箇所を手作業で編集するには何時間もかかり、つなぎ目を 1 つ間違えるだけで動画が台無しになります。rostrum は各カットの根拠とともに候補を提示します。候補を承認または調整すると、フレーム単位で正確につなぎ合わせ、すべてのつなぎ目で同期を検証します。

クイックスタート

uv tool install rostrum
rostrum init talk.mp4

pipx install rostrum でもインストールできます。 ffmpeg も必要です(winget install Gyan.FFmpeg、brew install ffmpeg、apt install ffmpeg)。

init を実行すると、最初の処理がすべて行われます。

  1. ファイルを調査し、デフォルト設定を含む rostrum.json を書き出します。
  2. ローカルの音声認識エンジンで文字起こしします(初回実行時に、約 480 MB のモデルをダウンロードします)。
  3. カットを検出します:発話による合図(「redo」「stop」「restart」)、撮り直し、繰り返し、長い間、冒頭と末尾の無音部分、聞き取れない、または文字起こしされていないため、再生して確認する必要がある発話。
  4. review.html を書き出します。各つなぎ目を再生し、残す/カットを切り替え、端点を微調整できます。

確認する前にカットされることはありません。

  • rostrum plan を実行すると、すべてのカットと予想される長さが一覧表示されます。
  • カットをレビューするまで、render は実行されません。レビューは rostrum decide を使うか、ページから保存して、そのファイルをインポートしてください。--yes を指定すると、この確認を省略できます。
  • ページから <talk>-decisions.json が保存されます。これをインポートしても、新しい決定が取り消されることはありません。各カットについて、新しいほうの決定が優先されます。
  • 元のファイルは変更されず、出力ファイルが上書きされることもありません。
rostrum plan                       # every cut, its reason, and the expected output length
rostrum decide <cut-id> keep       # or: cut, with --start/--end to move its edges
rostrum decide --import talk-decisions.json   # apply what you saved from review.html
rostrum render                     # frame-accurate render into <talk>.rostrum/renders/render-N/
rostrum verify --mode full         # checks the newest render: frames, audio, decode, A/V sync at every join
rostrum map 23:30 --from render-1  # a time in the edited video -> the source time

引数なしで rostrum を実行するとプロジェクトの状態が表示され、rostrum doctor を実行するとセットアップがチェックされます。

期待できること

以下の数値は、CPU のみ(8 コア、small.en)で処理した、60 分のワンテイクのトークから得られたものです。

  • 速度:
    • 初回の処理:約 11 分。
    • レンダリング:約 4 分。
    • 完全な検証:約 1.5 分。
  • 精度: 話者による最終編集版と比較すると、auto とマークされたカットで削除時間の 69% をカバーし、削除した部分の 95% は適切に削除されていました。候補を追加するとカバー率は 90% に上がりました。残りの差はレビューで解消できます。そのため、レビューがデフォルトで有効になっています。

録画するときのコツ

  • つまずいたら 「redo」(または「stop」「restart」)と言い、1 秒ほど間を置いてから、文の最初からやり直してください。
  • スライドやクリックをやり直しても問題ありません。失敗した操作とやり直しは、ほかの撮り直しと同じように扱われます。
  • 録画を続けてください。ファイルを分ける数が少ないほどレビューが簡単になりますが、複数のファイルにも対応しています。

1 つのトーク、複数のファイル、またはイベント全体

rostrum init talk-part1.mp4 talk-part2.mp4   # one talk recorded in parts: one timeline, one output
rostrum init talks/                          # one talk per file; *-part1/*-part2 files are grouped

ファイル名の末尾が -part1、-part2 などの場合(_ またはスペースでも可。変更するには init.partPattern を設定します)、それらのファイルは 1 つのトークとして結合されます。それ以外のファイルは、それぞれ別のトークとして扱われます。

パートは 1 つのタイムラインとして解析されるため、あるファイルの終わりで始まり、次のファイルで再び発話された「やり直し」も検出されます。イベント全体で設定ブロック(エンジン、合図の語句、レンダリング設定、ラウドネス目標、命名規則)が共有されます。各トークでは、その設定を個別に上書きできます。

すべてを設定する

設定は各レイヤーの通常の JSON で記述され、後のレイヤーが優先されます。

  1. 組み込みのデフォルト値;
  2. ~/.rostrum/config.json のデフォルト値;
  3. イベントまたはトークのファイルである rostrum.json;
  4. コマンドラインフラグ。

すべてのしきい値、単語リスト、エンジン、レンダリングオプションがキーになっており、公開されているスキーマによってエディターでの自動補完が利用できます。rostrum config を実行すると、すべてのキーの有効な値と、その設定元が表示されます。examples/rostrum.example.json を参照してください。

{
  "$schema": "https://raw.githubusercontent.com/girishkvs/rostrum/main/src/rostrum/schema/rostrum.schema.json",
  "defaults": {
    "cues":   { "words": ["redo", "stop", "restart"] },
    "pauses": { "maxSec": 2.0, "keepSec": 0.5 },
    "render": { "crf": 18, "name": "{speaker}-{title}" }
  },
  "talks": [
    { "id": "keynote", "speaker": "Jane Doe", "title": "Keynote", "sources": ["part1.mp4", "part2.mp4"] }
  ]
}

各検出器にはレベルがあります。

  • auto:カットがあらかじめ選択された状態で表示されます。
  • propose:維持があらかじめ選択された状態で表示されます。
  • off:実行されません。
検出器検出内容デフォルト
発話キュー「redo」、「stop」、「restart」など。再開した箇所まで戻ってカットしますauto
言い直しすぐ後に再び発話された文。「別の単語で言い直した」場合は提案のみ一致の確度が高い場合は auto、それ以外は propose
繰り返し「now, now」や、途中から言い直したフレーズpropose
無音maxSec を超える無音。両側に keepSec ずつ残してトリミングしますauto
冒頭・末尾開始時と終了時の無音auto
発話外の会話「これ録音されてる?」のような傍話propose
不明瞭な発話不明瞭な発話、幻覚による発話、または文字起こしされていない発話propose
フィラー「um」、「uh」off

デッキを用いたスライド対応チェックは、バージョン 0.2 での導入を予定しています。

音声エンジン

エンジン用途
faster-whisperデフォルトです。CPU または GPU 上でローカルに動作します。
commandwhisper.cpp やベンダーの CLI など、単語 JSON、SRT、VTT を出力する任意のプログラムを使用します。
importすでに用意されている文字起こしデータを使用します。

command エンジンと import エンジンは、追加設定なしで動作します。サードパーティー製のエンジンは、rostrum.engines エントリーポイントを通じて、rostrum.engines.SpeechEngine のサブクラスを指定して登録できます。rostrum は Engine(settings, tools, report) としてインスタンスを作成します。音声ワーカーの数は CPU とメモリに合わせて自動調整されます(speech.workers: "auto")。上書きするには数値を設定してください。

デフォルトは英語です。 small.en モデルと、発話キュー、フィラー、発話外の会話に関する単語リストが使用されます。別の言語を使うには、speech.model に small などの多言語モデルを指定し、speech.language を設定して、単語リストを置き換えてください。

エージェントから使用する

mcp 以外のすべてのコマンドは --json を受け取ります。rostrum mcp は stdio 経由で MCP サーバーを実行します。時間のかかる処理はジョブとして実行され、エージェントがポーリングします。

ワンステップでインストール(MCP サーバーとエージェントスキル):

ホストインストール
Claude Code/plugin marketplace add girishkvs/rostrum、続いて /plugin install rostrum@rostrum
Copilot CLIcopilot plugin install girishkvs/rostrum
Gemini CLIgemini extensions install https://github.com/girishkvs/rostrum
Claude Desktop最新リリースから rostrum-<version>.mcpb を開きます
Cursorrostrum を Cursor に追加

または、サーバーを手動で追加します。 uvx は PyPI パッケージを実行するため、ほかにインストールするものはありません。

ホストサーバーの追加
Copilot CLI/mcp add を実行し、名前に rostrum、コマンドに uvx、引数に rostrum mcp を指定します
Claude Codeclaude mcp add rostrum -- uvx rostrum mcp
VS CodeMCP: Add Server、続いて Command (stdio) を選び、uvx rostrum mcp を指定します
Codex CLI~/.codex/config.toml に [mcp_servers.rostrum] を追加し、command = "uvx" と args = ["rostrum", "mcp"] を設定します
Gemini CLI、Cursor~/.gemini/settings.json または ~/.cursor/mcp.json に "mcpServers": { "rostrum": { "command": "uvx", "args": ["rostrum", "mcp"] } } を設定します

初回起動時に rostrum の依存関係がダウンロードされるため、ホストがサーバーの起動を待つ時間を超えることがあります。最初に一度 uvx rostrum doctor を実行してください。

次のように依頼します:「talk.mp4 を整理して、判断に迷う箇所があれば教えてください。」 skills/rostrum/SKILL.md には、エージェントが従うルールが記載されています。

  • レンダリング前にカット箇所を表示すること。
  • 判断に迷う箇所について確認すること。
  • 指示があったら、レビュー画面から保存した内容をインポートすること(import_decisions)。
  • 指示があってからレンダリングすること(その後、エージェントは confirmed を渡します)。

mcp-pacemaker を使うと、サーバーをホストし、セッション間も起動状態に保てます。~/.mcp-pacemaker/servers.json に次のエントリーを追加すると、pacemaker はファイルの保存時に再読み込みします。

{ "rostrum": { "command": "uvx", "args": ["rostrum", "mcp"] } }

verify が確認する内容

  • 長さ: 出力の長さが、保持する時間と1フレーム以内の誤差で一致していること。
  • 映像: フレームが一定の間隔で連続していること。
  • 音声: パケットが途切れたり重複したりせず、連続していること。
  • デコード: エラーなく完全なデコードが完了すること。
  • 接合部: すべての接合部でタイムスタンプが連続していること。
  • 音声/映像のずれ: 接合部でソースと比較して測定します。fast モードではサンプルを取得し、full モードではすべての接合部で測定します。

要件

  • Python 3.11 以降、および ffmpeg/ffprobe 6.1 以降(CI では 6.1 と 9.0 を実行)。PATH にない場合は、ROSTRUM_FFMPEG/ROSTRUM_FFPROBE、または rostrum.json の defaults.tools.ffmpeg/defaults.tools.ffprobe を設定してください。
  • Windows、macOS、Linux。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。