会議が終わったあと、「議事録、誰が書きますか?」という空気になった経験はありませんか?
メモを見返し、記憶をたどり、誰が何を言ったかを思い出しながら文章にしていく。会議そのものより、そのあとの作業のほうが重く感じることもあります。
そこで、会議の録音から議事録の下書きまでを、パソコン1台の中で完結させるアプリを作ってみました。今回はその紹介です。
なぜ「このPCの中だけ」にこだわったのか
録音して文字にしてくれるクラウドのサービスは、すでにたくさんあります。とても便利です。ただ、見積の金額、取引先の名前、人事の話など、社外に出したくない会議もありますよね。
「音声を外部のサービスに送ってよいか」を社内で確認するだけで、話が止まってしまうこともあります。
そこで最初に決めたのが、音声も文章も、このPCの外へは一切送らないという条件です。通信が必要なのは、初めて使うときに文字起こし用のモデル(音声を文字にするためのデータ)をダウンロードするときだけです。
使ったのは、すべて無料の道具です
有料のサービスや、API(外部のサービスを呼び出す仕組み)の契約は使っていません。プログラムはPython 3.12で書き、次の部品を組み合わせています。
| 部品 | 役目 |
|---|---|
| ffmpeg | 音声の変換係。マイク録音と、いろいろな形式の音声ファイルを同じ形式に揃える |
| openai-whisper | 文字起こし。OpenAIが公開している、無料で使える音声認識 |
| Flask | ブラウザで操作する画面と、Pythonの処理をつなぐ |
| scikit-learn | 声の特徴が似た発言を同じ人にまとめる(話者分け) |
使い方は4段階だけ
画面は1ページで、上から順に進めるだけです。難しそうに見えますよね。でも、操作はこれだけです。
- 会議の件名・日時・場所・出席者を入れる
- 録音するか、音声ファイルを選ぶ
- 文字起こしをして、話者と文章を直す
- 議事録の下書きを確認して、保存・書き出しする
録音の方法は3通りあります。ブラウザのマイクで録る方法、ffmpegでこのPCのマイクから録る方法、そして、スマホやICレコーダーで録った音声ファイル(mp3、m4aなど)を読み込む方法です。会議の最中にパソコンを開けないときも、あとからファイルで渡せます。
なお、このアプリは自分のPCの中でだけ開く作り(127.0.0.1 ローカルWEBブラウザを利用)にしています。同じ社内ネットワークの別のPCからは開けません。
作ってみて工夫したところ
1. 音声の形式を、最初に1つに揃える
会議の音声は、スマホの録音、Web会議の録画、ICレコーダーなど、形式がばらばらです。入口で全部同じ形式に揃えてしまえば、あとの処理は1種類だけ考えればよくなります。この変換を引き受けるのがffmpegです。
コマンドは1行です。次のコマンドは、どんな音声でも「16kHz・モノラル・16bit」のWAVファイルに変換します。文字起こしに向いた、軽い形式です。
ffmpeg -i 会議.m4a -ar 16000 -ac 1 -c:a pcm_s16le audio.wav
2. Whisperに「日本語の会議です」と教える
文字起こしの中心は、次の数行です。実際のアプリでは、ここにもう少し細かい設定を足していますが、考え方はこの形です。
import whisper
model = whisper.load_model("small")
result = model.transcribe(
"audio.wav",
language="ja",
fp16=False,
initial_prompt="日本語の社内会議です。",
condition_on_previous_text=False,
)
for seg in result["segments"]:
print(round(seg["start"]), seg["text"])
ポイントは3つです。言語を日本語に指定すること、グラフィックボードを使わないPCなのでfp16=Falseにすること、そして「直前の文に引きずられない」設定にすることです。最後の設定は、一度間違えた言葉に、次の文まで引っ張られるのを防ぐためのものです。
3. 話者は、声の特徴で分ける(あくまで目安)
議事録には「誰が言ったか」が欠かせません。このアプリでは、発言ごとに声の高さや音の特徴、音量を数値にして、似た声どうしを同じ人としてまとめています。事前に声を登録する必要はありません。
最初に話した人から「話者1」「話者2」と名前が付くので、画面で本当の名前に直せます。発言ごとに話者を選び直すこともできます。ただし、声が似ている人どうし、同時に話した場面、「はい」のような短い相槌は、外れやすいところです。結果は目安として、保存する前に確認してください。
4. 議事録の下書きは「言い回し」で拾う
ここは正直にお伝えします。外部の文章生成サービスは使っていません。発言の言い回しを見て、決められたルールで振り分けています。
| 欄 | 拾う言い回しの例 |
|---|---|
| 決定事項 | 決定、こととします、了承、見送り |
| 宿題 | お願いします、対応します、までに、担当 |
| 次回 | 次回、来週、来月、日程 |
| 共有・報告 | 報告、共有、課題、リスク、遅れ |
そのため、議論の意味を理解して要約してくれるわけではありません。該当する言い回しが無ければ、その欄には「該当する言い回しはありません」と表示されます。あくまで「決定・宿題・次回が拾える下書き」です。
下書きは画面で自由に直せます。直した内容を、テキスト、HTML、Word(.docx)のどれかで書き出せます。
モデルは3種類から選べます
Whisperには、大きさの違うモデルがあります。このアプリでは、base・small・mediumの3つから選べるようにしました。
| モデル | 特徴 |
|---|---|
| base | 速い。ただし固有の語を取り違えることもある |
| small | 画面の初期値。まずはこれで試す |
| medium | 精度が上がる。ただしCPUだけで処理すると、長い会議では音声の長さの何倍も時間がかかることがある |
私のおすすめは、まずsmallで試して、言葉の取り違えが気になるときだけmediumに上げる使い方です。mediumは時間がかかるので、会議のあとに流しておいて、その間に別の仕事をする、くらいの付き合い方が合っています。
できないことも、先にお伝えします
- 文字起こしの品質は、モデルとマイクの位置・音量に左右されます。話す人の近くにマイクを置くのが基本です
- 話者分けは声の特徴による目安です。声の登録や、重なった声の分離はできません
- 議事録は言い回しの一致で作る下書きです。議論の意味を要約するものではありません
- 文字起こしは、このPCの中で同時に1件だけです
「全部おまかせ」ではなく、「下書きまでを機械が引き受けて、確認と仕上げは人がする」という役割分担です。
使うと、作業の中身が変わります
これまでは、メモと記憶を頼りに、白紙から議事録を書いていました。このアプリを使うと、できあがった下書きを見ながら、話者と言葉の間違いを直す作業に変わります。
どれくらい時間が減るかは、会議の長さ、選ぶモデル、PCの性能で大きく変わります。そのため、ここでは数字を出しません。
まとめ
ffmpegとopenai-whisperを組み合わせると、録音、文字起こし、話者分け、議事録の下書きまでを、パソコン1台の中で行えます。社外に出せない会議でも使えることが、いちばんの強みです。
Excelの入力作業だけでなく、会議のあとの文書づくりも、自動化の対象になります。ご興味あられたお方は、お気軽にご相談ください。業務効率化はCSコンサルティングへ。
ブログ文章作成はClaudeのヘルプを借りています。ご了承ください。
