
こんにちは。ACS事業部の越川です。
「会議の録画、もっと活用できないかな」
そんな問いから始まったツール開発の記録です。1時間の会議録画をコマンド一発で文字起こし・キャプチャ抽出・議事録生成まで自動化するスクリプトを作りました。その過程で、7回の試行錯誤と1つの重要な気づきがありました。
きっかけ
社内で「AI議事録の文字起こしをもっと有効活用できないか。記録以上の価値を見出す仕組みが欲しい」という問題提起がありました。
同時期に、Apple Silicon向けに最適化されたMLX Whisper(AppleのMLXフレームワークを用いたWhisper実装)の存在を知りました。通常のWhisperと比較して桁違いに高速な文字起こしが可能だという報告です。
これなら会議の録画から議事録を自動生成するパイプラインが組めるのではないか。やってみることにしました。
作ったもの
シェルスクリプト1本で以下を実行します。
./meeting-analyzer.sh ~/Downloads/meeting.mp4 "定例会議"
- MP4 → 音声抽出(ffmpeg)
- 音声 → 文字起こし(MLX Whisper、Apple Silicon最適化)
- MP4 → シーン変化検出キャプチャ(ffmpeg)
- 文字起こし + キャプチャ → AI分析(議事録・提言・アクションアイテム生成)
段階的に精度とコストが上がる3つのバージョンを用意しました。
| バージョン | AI分析 | 対象 |
|---|---|---|
| v1 | GitHub Copilot CLI | GitHub Copilotが使える環境 |
| v2 | v1の出力 + Gemini Gem(手動) | Geminiが使える環境 |
| v3 | Claude API + VLM | Anthropic APIキーが必要 |
まずv1を試して、精度を上げたければv2(Gemini Gem)、さらに自動化したければv3(外部API)に進む設計です。
実測結果
テスト動画は約1時間の会議録画です。
| 項目 | 結果 |
|---|---|
| マシン | MacBook Pro(Apple M5 / 32GB) |
| 音声抽出 | 1.6秒 |
| 文字起こし | 約3分(993行) |
| キャプチャ抽出 | 数秒(12枚) |
| AI議事録生成 | 約1分30秒 |
| 合計 | 約5分 |
約1時間の会議が数分で議事録になりました(処理時間は環境に依存します)。
7回の試行錯誤
ここからが本題です。「動くもの」を作るのは簡単でした。難しかったのは精度を上げることです。
試行1: 文字起こしのハルシネーション
MLX Whisperの初回実行で、同じフレーズが延々と繰り返されるハルシネーションが発生しました。無音区間でAIが「もっともらしい言葉」を生成し続けてしまう現象です。
対策: --hallucination-silence-threshold 2(2秒以上の無音でハルシネーションを抑制)と --condition-on-previous-text False(前のテキストへの条件付けを無効化)を追加。出力が82KBから63KBに23%削減されました。
試行2: キャプチャの取りすぎ
最初は60秒間隔でスクリーンショットを取得。1時間の会議で63枚。同じスライドが何枚も重複しました。
対策: ffmpegのシーン変化検出(scene > 0.15)に切り替え。画面の15%以上が変化した時だけキャプチャ。48枚に最適化されました。
試行3: 閾値の調整
シーン変化の閾値0.3では8枚しか取れず、スライドの切り替わりを拾いきれませんでした。0.15では48枚で適切。ただし動画の内容によって最適値が変わるため、環境変数で調整可能にしました。
試行4: ローカルVLMの挫折
キャプチャ画像の内容をローカルのVision Language Modelで読み取ろうとしました。しかし、Pythonライブラリの互換性問題が連続し、安定動作に至りませんでした。今後の課題として残しています。
試行5: API送信の壁
1時間分の文字起こし全文をAPIに送信したところ、シェルのエスケープ問題や入力長制限で失敗。文字数制限とトリミング処理を追加して対応しました。
試行6: SRT形式への移行
当初はテキスト形式で出力していたため、タイムスタンプが消失。SRT形式に変更し、「何分何秒に何を言ったか」を保持できるようにしました。
試行7: タイムライン統合
文字起こし(発言)とキャプチャ(画面表示)を時間軸でマージする統合タイムラインを生成。発言とスライドの対応関係が見えるようになりました。
重要な気づき — 自動化しすぎると本質が消える
最も精度が高かった分析は、スクリプトで自動化したものではなく、Geminiに手動で文字起こしを貼り付けたものでした。
なぜか。人間が会議の文脈を知っているからです。
- 「この会議の目的はこうです」
- 「参加者はこういう立場の人たちです」
- 「前回の議論を踏まえた会議です」
この文脈があるかないかで、議事録の解像度が劇的に変わりました。
完全自動化すると、参加者の文脈理解・会議の背景・発言者の意図が剥がれます。残るのは抽象的な要約だけ。情報の種類によっては、属人性が本質そのものである場合があるのです。
会議の議事録は、まさにそれでした。「誰が何の文脈でそう言ったか」が消えると、価値が激減します。
どう使うべきか — AIが作業を担い、人が判断で仕上げる
この気づきから、ツールの位置づけを見直しました。
| 工程 | 担当 | 理由 |
|---|---|---|
| 音声抽出 | AI(自動) | 機械的な変換。人間がやる意味がない |
| 文字起こし | AI(自動) | 速度と量でAIが圧倒的に有利 |
| キャプチャ抽出 | AI(自動) | シーン検出は人間より正確 |
| 議事録の骨格生成 | AI(自動) | 構造化と要約はAIが得意 |
| 文脈の補足 | 人間 | 会議の背景・意図・ニュアンスは参加者にしかわからない |
| 最終判断 | 人間 | 決定事項・アクションアイテムの正確性は人間が担保 |
完全自動化を目指すのではなく、機械的な作業はAIに任せ、文脈の補足と最終判断は人間が担う。この分担が最も精度の高い議事録を生み出します。
3つのバージョンの使い分け
実際に使ってみた所感です。
v1: GitHub Copilot — まず試すなら
GitHub Copilot CLIが文字起こしテキストを分析し、議事録を生成します。1 Premium Requestで完結。追加コストなし。
v2: Gemini Gem — 精度を上げたいなら
v1の出力(文字起こし + キャプチャ画像)をGemini Gemに手動で貼り付けます。人間が会議の文脈を補足しながら対話できるため、v1より精度が高くなります。
ただしGeminiは1回のチャットで画像10枚までの制約があり、キャプチャが多い長時間の会議では手間が増えます。
v3: Claude API — 完全自動化を目指すなら
Anthropic APIキーが必要。タイムスタンプ付きSRT形式の文字起こしと統合タイムラインを生成します。VLM(画像分析)モードも搭載していますが、現時点では実験的です。
比較表
| 観点 | v1 | v2 | v3 |
|---|---|---|---|
| セットアップ | GitHub Copilotのみ | v1 + Gemini | Anthropic APIキー |
| コスト | 1 Premium Request | なし | 従量課金 |
| 精度 | テキストのみ | 画像+文脈補足で最高 | テキスト+タイムライン |
| 画像分析 | 不可 | 手動で投入 | VLMモード(実験的) |
| 自動化度 | 高い | 手動あり | 高い |
どのバージョンを使っても、最終的には人間が文脈を補足する必要がある点は同じです。
スクリプトはGitHubで公開しています。
まとめ
| 観点 | 結果 |
|---|---|
| 速度 | 1時間の会議が数分で議事録に(環境に依存) |
| 精度 | v1(自動のみ)< v3(タイムライン統合)< v2(人間の文脈補足)が最も高い |
| コスト | v1: 1 Premium Request / v2: なし / v3: 従量課金 |
| 学び | 完全自動化は必ずしも最適ではない。属人性が価値そのものである情報がある |
会議の録画は、再生しない限り死蔵されるデータです。このツールで議事録にすることで、初めて活用可能な知識になります。
ただし、AIに任せきりにすると本質が消える。人間の文脈理解という最後の一手が、議事録を「記録」から「価値」に変えます。
お知らせ
私の所属する ACS 事業部では、開発者ポータル Backstage、Azure AI Service などを活用し、Platform Engineering + AI の推進・内製化を支援しています。
www.ap-com.co.jp www.ap-com.co.jp www.ap-com.co.jp
また、GitHub パートナーとしてお客様に GitHub ソリューションの導入支援を行っています。 GitHub Copilot などのトレーニングなども行っておりますので、ご興味を持っていただけましたらぜひお声がけいただけますと幸いです。
一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。