Ollamaで音声認識・議事録を完全ローカルで実現する方法

🎙️ 2026年版 ローカルAI完全活用

Ollamaで音声認識・議事録
完全ローカルで実現する方法

Whisper × Ollama の最強コンビで、会議音声を自動で議事録に変換。
クラウド不要・無料・プライバシー完全保護のAIパイプラインを構築しよう

🎙️ 音声認識 📝 議事録自動生成 🔒 完全ローカル 🐋 Docker対応 🆓 完全無料 🇯🇵 日本語対応
01

🏗️ 全体アーキテクチャを理解する

OllamaとWhisperを組み合わせた「完全ローカルAI議事録」の仕組みを把握しよう

🎯

なぜOllama単体では音声認識ができないのか?

Ollamaはテキスト生成(LLM)に特化したツールです。音声認識(音声→テキスト変換)は OpenAI Whisper が担当します。この2つを連携させることで、「音声入力 → 文字起こし → AI要約 → 議事録」という完全自動パイプラインが完成します。データはすべて自分のマシン上で処理されるため、機密会議の内容もクラウドに送る必要がありません。

🔄 音声→議事録 完全パイプライン図

🎙️ 音声ファイル MP3 / WAV / M4A 入力 WHISPER 音声認識エンジン faster-whisper whisper.cpp テキスト 📄 文字起こし タイムスタンプ付き 投入 OLLAMA AIテキスト処理 Llama3 / Qwen2.5 Gemma3 など 出力 📋 議事録 要点整理済み ① 入力 ② 音声→テキスト変換 ③ 生テキスト ④ 要約・整形 ⑤ 完成
🔒

完全ローカル処理

音声データが外部サーバーに送られない。機密会議も安心

🆓

完全無料

APIコスト一切なし。回数制限なく使い放題

🇯🇵

日本語に強い

Whisper large-v3は日本語認識精度が非常に高い

GPU加速対応

NVIDIA GPU があれば数分の音声を数十秒で処理

02

🎙️ 音声認識エンジン Whisper とは

OpenAIが公開したオープンソースの高精度音声認識モデル。ローカル実装を選ぼう

🧠

Whisperはなぜ「最強」なのか?

Whisperは2022年にOpenAIが公開した音声認識モデルで、99言語以上に対応し、日本語の認識精度も非常に高いのが特徴です。クラウド版(OpenAI API)と同じモデルをローカルで動かせるため、月額費用ゼロで業務利用できます。さらに最新の large-v3 モデルは、雑音環境でも高い精度を誇ります。

🏆 最も使いやすい

faster-whisper

開発元:SYSTRAN / Python製

オリジナルWhisperをCTranslate2で高速化したPython実装。同じ精度でメモリ使用量を最大4倍削減。日本語の精度が高く、タイムスタンプも取得できる。初心者に最もおすすめ。

📦 インストール pip install faster-whisper
⚡ GPU対応 CUDA / CPU 両対応
🎯 おすすめ用途 バッチ処理・スクリプト連携
Python CUDA対応 高速 省メモリ
🚀 超高速

whisper.cpp

開発元:ggerganov / C++製

WhisperをC++で再実装した超軽量版。GPUなしでもCPUだけで高速に動作する。Mac(Apple Silicon)では特に高速。GGUFモデル形式を使用し、Ollamaとも同系統の技術。

📦 インストール ソースからビルド(make)
⚡ GPU対応 CUDA / Metal(Mac)
🎯 おすすめ用途 Mac / GPU非搭載マシン
C++ CPU最適化 Mac対応 軽量
🐋 Docker完結

Whisper Docker版

開発元:onerahmet / Docker Hub

WhisperをDockerコンテナとして動かすイメージ。REST APIとして音声ファイルをHTTPでポストするだけで文字起こし結果が返ってくる。Open WebUIとの連携が最もスムーズ。

📦 イメージ onerahmet/openai-whisper-asr-webservice
🎯 おすすめ用途 Open WebUI STT連携
Docker REST API OpenAI互換
⚠ 注意

Whisperのoriginal実装(pip install openai-whisper)は動作しますが、速度・メモリ効率の面でfaster-whisperに劣ります。新規構築では特別な理由がない限り faster-whisper を選択してください。

03

⚙️ faster-whisper のセットアップ

Python環境でのインストールと、Docker版Whisperの起動手順を解説

🛠️

2つのインストール方法

ローカルPython環境にインストールする方法と、Dockerコンテナとして起動する方法があります。Open WebUIとマイク入力を連携させたい場合はDocker版(REST API方式)が便利です。バッチ処理やスクリプトから呼び出したい場合はPythonライブラリ方式を選びましょう。

🐍 方法① Python ライブラリとしてインストール

1

🐍 Python 仮想環境を作成する(推奨)

システムのPythonを汚染しないよう、venvで隔離した環境を作成します。Python 3.9以上が必要です。

2

📦 faster-whisperをインストール

GPU(CUDA)を使う場合は ctranslate2[cuda] もインストールします。CPUのみの場合は不要。

3

✅ 動作確認

初回実行時はモデルが自動ダウンロードされます(large-v3は約3GB)。ダウンロードは最初の1回のみです。

bash # 仮想環境の作成と有効化
python3 -m venv ~/whisper-env
source ~/whisper-env/bin/activate

# faster-whisper のインストール
pip install faster-whisper

# GPU使用時(CUDA環境がある場合のみ)
pip install faster-whisper torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu121

🐋 方法② Docker で Whisper API サーバーを起動

Open WebUIのSTT(音声入力)機能と連携するには、WhisperをOpenAI互換のREST APIサーバーとして動かす方法が最も手軽です。

bash(CPU版) # CPU版 Whisper APIサーバーを起動
docker run -d \
  –name whisper-api \
  -p 9000:9000 \
  -e ASR_MODEL=large-v3 \
  -e ASR_ENGINE=faster_whisper \
  -e ASR_MODEL_PATH=/root/.cache/whisper \
  -v whisper-models:/root/.cache/whisper \
  onerahmet/openai-whisper-asr-webservice:latest
bash(GPU版・NVIDIA GPU搭載時) # GPU版(NVIDIA GPUが必要)
docker run -d \
  –name whisper-api \
  –gpus all \
  -p 9000:9000 \
  -e ASR_MODEL=large-v3 \
  -e ASR_ENGINE=faster_whisper \
  -v whisper-models:/root/.cache/whisper \
  onerahmet/openai-whisper-asr-webservice:latest-gpu
💡

利用可能なモデルを env で切り替える

ASR_MODEL に設定できる値は tiny / base / small / medium / large-v3 です。CPUで使う場合はメモリ節約のため smallmedium も選択肢になります(後述の比較表を参照)。

bash(動作確認) # コンテナが起動しているか確認
docker logs whisper-api

# テスト:curlでAPIを叩いて文字起こし
curl -X POST http://localhost:9000/asr \
  -F “audio_file=@meeting.mp3” \
  -F “language=ja” \
  -F “output=json”
✅ 対策済み確認

APIレスポンスに "text": "..." フィールドが含まれていれば起動成功です。ポート9000でWhisper APIが待ち受け状態になっています。Open WebUIとの連携設定は第6章で行います。

04

📄 音声ファイルから文字起こし実践

Pythonスクリプトとコマンドラインで、実際に会議音声を文字起こしする手順

🎬

対応フォーマットは幅広い

faster-whisperはMP3、WAV、M4A、FLAC、MP4(動画から音声抽出)など主要な音声・動画形式に対応しています。Zoom録画のMP4ファイルを直接指定することも可能です。ffmpegがインストールされていれば、より多くのフォーマットをサポートできます。

🐍 Pythonスクリプトで文字起こし(タイムスタンプ付き)

Python from faster_whisper import WhisperModel

# モデルのロード
# device: “cuda” (GPU) または “cpu”
# compute_type: GPU→”float16″, CPU→”int8″
model = WhisperModel(“large-v3”, device=“cpu”, compute_type=“int8”)

# 文字起こし実行
segments, info = model.transcribe(
  “meeting.mp3”,
  language=“ja”,                # 日本語を指定
  beam_size=5,                  # 精度向上
  vad_filter=True,             # 無音部分をスキップ
  vad_parameters=dict(min_silence_duration_ms=500)
)

# 結果をファイルに保存
with open(“transcript.txt”, “w”, encoding=“utf-8”) as f:
  for segment in segments:
    timestamp = f”[{segment.start:.1f}s → {segment.end:.1f}s]”
    f.write(f”{timestamp} {segment.text}\n”)
    print(f”{timestamp} {segment.text}”)

print(f”\n✅ 文字起こし完了!言語: {info.language}, 確信度: {info.language_probability:.2f}”)

vad_filter=True がポイント

VAD(Voice Activity Detection)フィルターを有効にすると、無音区間や雑音部分を自動でスキップし、処理速度と精度が大幅に向上します。会議録音には必ず有効にしましょう。

🗣️ 話者分離(誰が話しているか識別)

複数人の会議では、誰の発言かを識別する話者ダイアライゼーションが便利です。pyannote.audioライブラリを組み合わせることで実現できます。

bash(インストール) # pyannote.audio のインストール(Hugging Faceのトークンが必要)
pip install pyannote.audio

# 注意: Hugging Faceにて
# pyannote/speaker-diarization-3.1 の利用規約に同意し
# トークンを取得してください(無料)
Python(話者分離 + 文字起こし) from pyannote.audio import Pipeline
from faster_whisper import WhisperModel

# 話者分離パイプライン
diarization = Pipeline.from_pretrained(
  “pyannote/speaker-diarization-3.1”,
  use_auth_token=“YOUR_HF_TOKEN”
)

# 話者ラベルを取得
dia_result = diarization(“meeting.wav”)

# Whisperで文字起こし
wmodel = WhisperModel(“large-v3”, device=“cpu”, compute_type=“int8”)
segments, _ = wmodel.transcribe(“meeting.wav”, language=“ja”)

# 話者と発言を対応付けて出力
for segment in segments:
  # 発言時刻に対応する話者を検索
  speaker = “不明”
  for turn, _, spk in dia_result.itertracks(yield_label=True):
    if turn.start <= segment.start <= turn.end:
      speaker = spk; break
  print(f”[{speaker}] {segment.text}”)
⚠ 注意

話者分離はWhisperとは別のモデル(pyannote)を使うため、Hugging Faceのアカウントとアクセストークンが必要です。トークン取得は huggingface.co での無料登録で行えます。また話者分離の精度は録音品質に大きく依存するため、マイクの質と録音環境を整えることが重要です。

05

🤖 Ollamaで AI議事録を自動生成

Whisperで起こしたテキストをOllamaに投入して、構造化された議事録を作成する

✍️

文字起こし → 議事録への変換

生の文字起こしテキストはそのままでは読みにくいことがほとんどです。Ollamaの日本語対応LLMに要点整理・議題ごとの整理・アクションアイテム抽出を依頼することで、すぐに使える議事録フォーマットに変換できます。

🤖 Ollama API で議事録を生成

Python(Ollama API呼び出し) import requests
import json

# 文字起こし結果を読み込む
with open(“transcript.txt”, “r”, encoding=“utf-8”) as f:
  transcript = f.read()

# 議事録生成プロンプト
prompt = f”””以下は会議の音声から文字起こしされたテキストです。
このテキストを読んで、以下の形式で議事録を作成してください。

## 議事録フォーマット
### 会議概要
(会議の目的・背景を1〜2文で)

### 主な議題と内容
(議題ごとに箇条書き)

### 決定事項
(会議で決まったこと)

### アクションアイテム
(誰が何をいつまでに行うか)

### 次回の予定
(次回会議の情報があれば)

— 文字起こし —
{transcript}
“””


# Ollama API を呼び出す(ストリーミングなし)
response = requests.post(
  “http://localhost:11434/api/generate”,
  json={
    “model”: “qwen2.5:14b”,  # 日本語に強いモデル
    “prompt”: prompt,
    “stream”: False,
    “options”: {“temperature”: 0.3}  # 低めの温度で安定した出力
  }
)

minutes = response.json()[“response”]

# 議事録をファイルに保存
with open(“minutes.md”, “w”, encoding=“utf-8”) as f:
  f.write(minutes)

print(“✅ 議事録を minutes.md に保存しました”)
print(minutes)

🧩 議事録生成に向いているOllamaモデル比較

📊 日本語議事録生成モデル比較

モデル名 日本語品質 処理速度 VRAM目安 おすすめ度
qwen2.5:14b
95
70
10GB以上 🏆 最推奨(日本語)
qwen2.5:7b
88
85
6GB以上 ⭐ バランス型
llama3.1:8b
75
88
6GB以上 🔵 汎用に可
gemma3:12b
85
75
8GB以上 🟢 安定性高い
mistral-nemo:12b
72
78
8GB以上 🟡 英語寄り

※ スコアは日本語議事録生成用途での主観評価です。202年時点の情報に基づきます。

🎯

日本語議事録には qwen2.5 シリーズが最適

Alibaba Cloud の Qwen2.5 は日本語テキストの処理・要約において非常に高い品質を発揮します。VRAM が 6GB 程度であれば qwen2.5:7b、10GB 以上であれば qwen2.5:14b を選ぶと良いでしょう。モデルのダウンロードは ollama pull qwen2.5:14b で実行できます。

06

🌐 Open WebUI で音声入力を設定

Open WebUIのマイクボタンでリアルタイム音声入力を使えるように設定する手順

🎤

Open WebUIのマイクボタンを活用

Open WebUIにはチャット入力欄にマイクボタンが付いており、ローカルWhisper APIを接続することで音声でOllamaと会話できます。先にDocker版Whisperサーバー(9000番ポート)を起動しておく必要があります。

1

🔐 Open WebUI に管理者としてログイン

ブラウザで http://localhost:3000 を開き、管理者アカウントでログインします。

2

⚙️ 管理者パネルを開く

右上のユーザーアイコンをクリック → 「管理者パネル(Admin Panel)」 を選択します。

3

🔊 音声(Audio)設定を開く

左メニューの 「設定 → 音声(Audio)」 をクリックします。

4

🎙️ STT エンジンを設定

「Speech-to-Text Engine」OpenAI に設定し、APIベースURLに http://whisper-api:9000/v1(Dockerネットワーク)または http://localhost:9000/v1 を入力します。API Keyは任意の文字列(例:whisper)を入力してください。

5

✅ 保存してマイクボタンをテスト

設定を保存後、チャット画面に戻りマイクボタン(🎤)をクリック。話しかけてテキストが入力欄に表示されれば設定完了です。

🚨 重要

Open WebUIとWhisper Dockerコンテナが同一のDockerネットワーク(例:ollama-net)に属している場合、URLは http://whisper-api:9000/v1(コンテナ名)で指定します。別々に docker run している場合や接続できない場合は http://host.docker.internal:9000/v1 または http://localhost:9000/v1 を試してください。

🐋 docker-compose で一括管理する(推奨)

Open WebUI・Ollama・Whisperをdocker-compose.ymlでまとめて管理すると、ネットワーク設定が自動で整い便利です。

docker-compose.yml version: ‘3.8’
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    volumes:
      – ollama:/root/.ollama
    networks: [ai-net]
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports: [“3000:8080”]
    environment:
      – OLLAMA_BASE_URL=http://ollama:11434
    volumes:
      – open-webui:/app/backend/data
    networks: [ai-net]
    restart: unless-stopped

  whisper-api:
    image: onerahmet/openai-whisper-asr-webservice:latest
    container_name: whisper-api
    environment:
      – ASR_MODEL=large-v3
      – ASR_ENGINE=faster_whisper
    volumes:
      – whisper-models:/root/.cache/whisper
    networks: [ai-net]
    restart: unless-stopped

networks:
  ai-net: {}

volumes:
  ollama: {}
  open-webui: {}
  whisper-models: {}
bash(起動コマンド) # 全サービスを一括起動
docker compose up -d

# ログ確認
docker compose logs -f whisper-api

# 停止
docker compose down
✅ 対策済み確認

このdocker-compose構成では、Open WebUIのSTT設定で http://whisper-api:9000/v1 を指定すれば自動的に接続できます。サービス名がそのままホスト名になるため、IPアドレスの心配が不要です。

07

⚡ シェルスクリプトで全自動化

音声ファイルを放り込むだけで議事録Markdownが生成されるパイプラインを作る

🤖

ワンコマンドで議事録まで自動生成

WhisperとOllama APIを組み合わせたPythonスクリプトを用意しておくと、「python minutes.py meeting.mp3」の1コマンドだけで文字起こし → 要約 → Markdown議事録保存まで全自動で完了します。

Python(minutes.py 全自動議事録生成スクリプト) #!/usr/bin/env python3
“””音声ファイル → 議事録Markdown 全自動生成スクリプト”””
import sys, requests, json
from pathlib import Path
from datetime import datetime
from faster_whisper import WhisperModel

OLLAMA_URL = “http://localhost:11434/api/generate”
OLLAMA_MODEL = “qwen2.5:14b”
WHISPER_MODEL = “large-v3”

def transcribe(audio_path: str) -> str:
  print(“🎙️ 文字起こし中…”)
  model = WhisperModel(WHISPER_MODEL, device=“cpu”, compute_type=“int8”)
  segments, _ = model.transcribe(
    audio_path, language=“ja”, vad_filter=True, beam_size=5
  )
  return “\n”.join(f”[{s.start:.0f}s] {s.text}” for s in segments)

def generate_minutes(transcript: str) -> str:
  print(“📝 Ollamaで議事録生成中…”)
  prompt = f”””以下の会議文字起こしから議事録を作成してください。
Markdown形式で出力してください。

## 会議概要 ## 主な議題 ## 決定事項 ## アクションアイテム

文字起こし:\n{transcript}\n”””

  res = requests.post(OLLAMA_URL, json={
    “model”: OLLAMA_MODEL, “prompt”: prompt,
    “stream”: False, “options”: {“temperature”: 0.3}
  })
  return res.json()[“response”]

def main():
  if len(sys.argv) < 2:
    print(“使用法: python minutes.py <音声ファイル>”); sys.exit(1)
  
  audio = sys.argv[1]
  transcript = transcribe(audio)
  minutes = generate_minutes(transcript)
  
  # ファイル保存
  ts = datetime.now().strftime(“%Y%m%d_%H%M”)
  out = Path(f”minutes_{ts}.md”)
  out.write_text(minutes, encoding=“utf-8”)
  print(f”\n✅ 議事録を {out} に保存しました!”)

if __name__ == “__main__”:
  main()
bash(実行例) # 実行権限を付与して実行
python minutes.py 202-05-30_meeting.mp3

# 出力例
🎙️ 文字起こし中…
📝 Ollamaで議事録生成中…
✅ 議事録を minutes_20260530_1430.md に保存しました!
08

📊 Whisperモデル比較 & 選び方

用途・マシンスペックに合わせた最適なWhisperモデルを選ぼう

⚙️ Whisperモデル スペック比較表

モデル 日本語精度 処理速度 メモリ 推奨環境 用途
tiny
45
98
~1GB RAM 超低スペックPC テスト・英語のみ
base
60
92
~1.5GB RAM 低スペックPC 簡易テスト
small
72
85
~2GB RAM 4〜8GB RAM PC カジュアル用途
medium
82
70
~5GB RAM 8〜16GB RAM 業務利用・日本語
large-v3 ⭐
97
50
~10GB RAM 16GB RAM以上 議事録・精度重視
large-v3-turbo
94
75
~6GB RAM 8〜12GB RAM 精度・速度バランス

※ RAMはシステム全体の目安。GPUを使う場合はVRAMが主な制限になります。

💻 16GB RAM以上のPC

  • large-v3(最高精度)
  • → 議事録・重要会議に最適

🖥️ 8〜16GB RAM PC

  • large-v3-turbo
  • → 精度と速度のバランス

📱 4〜8GB RAM の低スペック

  • medium(日本語OK)
  • → カジュアルな録音に

🍎 Mac(Apple Silicon)

  • large-v3 + Metal加速
  • → whisper.cppも高速動作
09

🔧 トラブルシューティング

よくあるエラーと解決方法を一覧で確認しよう

ERROR 1

CUDA out of memory

GPUメモリ不足エラー

GPUのVRAMが不足している場合に発生します。

✅ 解決法 device=”cpu”, compute_type=”int8″ に変更するか、smallやmediumモデルを使用
ERROR 2

文字化け・認識不良

日本語が正しく認識されない

自動言語検出が英語になってしまう場合に起きます。

✅ 解決法 必ずlanguage=”ja”を明示指定する。自動検出は使わない
ERROR 3

Open WebUI がSTTに接続できない

マイクボタンが機能しない

WhisperコンテナとOpen WebUIのネットワーク設定のミス。

✅ 解決法 同一docker networkか確認。URLをhost.docker.internal:9000に変更
ERROR 4

処理が非常に遅い

文字起こしに数十分かかる

CPUのみで large-v3 を動かしていると非常に時間がかかります。

✅ 解決法 compute_type=”int8″にする。またはmediumモデルに変更。GPU使用を検討

CPUでもそこそこ速く動かすコツ

CPUモードで使う場合、compute_type="int8" の指定が最も重要です。また num_workers=4 オプションを追加するとマルチコア活用で高速化できます。1時間の会議録音でも、mediumモデルなら10〜15分程度で処理可能です。

⚠ 注意

Whisperのfaster-whisper は Python 3.9以上が必要です。また、Ubuntuなどの環境では ffmpeg のインストール(sudo apt install ffmpeg)が必要な場合があります。MP3ファイルが読み込めないエラーの場合はffmpegの有無を確認してください。

10

🎉 まとめ・活用シーン一覧

Whisper × Ollama パイプラインが活躍するシーンを整理して総まとめ

🗺️ 構成パターン一覧

パターン① ファイルバッチ処理(議事録自動生成) 音声ファイル MP3/WAV/MP4 faster-whisper Python直接呼出 Ollama API qwen2.5:14b 議事録.md Markdown保存 パターン② Open WebUI リアルタイム音声チャット マイク入力 ブラウザ Whisper Docker REST API :9000 Open WebUI テキスト変換・表示 Ollamaモデル AI回答生成 パターン③ curl ワンライナー(テスト・簡易利用) 音声ファイル curl → Whisper API テキスト出力

🎯 シーン別 おすすめ設定一覧

🏢 社内会議の議事録

  • Whisper: large-v3
  • LLM: qwen2.5:14b
  • 方式: バッチPythonスクリプト
  • 精度最優先の設定

🎙️ リアルタイム音声チャット

  • Whisper: Docker版
  • LLM: gemma3:12b
  • 方式: Open WebUI STT
  • 低レイテンシ重視

📱 低スペックPC・ノートPC

  • Whisper: medium / small
  • LLM: qwen2.5:7b
  • compute_type: int8
  • 省メモリ設定

🍎 Mac(Apple Silicon)

  • Whisper: large-v3
  • device: mps(Metal)
  • LLM: llama3.1 / qwen2.5
  • Metal加速で高速動作
✅ 対策済み確認

この記事で構築したパイプラインにより、以下がすべて実現できます:
音声ファイル(MP3/WAV/MP4)→ 日本語テキスト文字起こし(faster-whisper large-v3)
文字起こし → AI整形議事録(Ollama qwen2.5:14b)
Open WebUI でマイクによるリアルタイム音声入力(Whisper Docker API連携)
全処理がローカルで完結(インターネット不要・機密情報安全)

コメント