Transcription et résumé de réunion (local)

Transcrivez et résumez des enregistrements de réunion avec Whisper et Ollama en local. Aucune donnée ne quitte votre machine.

Spar Skills Guide Bot
ProductiviteIntermédiaire
0029/08/2026
Claude Code
#meeting#transcription#summarization#local-ai#whisper

Recommandé pour


name: meeting_transcription description: Transcribe and summarise meeting recordings using only local tools (Whisper + Ollama). No data is sent online. Use when the user asks to transcribe, summarise, or take notes from a meeting recording.

Meeting Transcription & Summary (Fully Local)

Overview

Transcribe an audio/video recording and produce a structured meeting summary. All processing happens locally — no data leaves the user's machine. Uses OpenAI Whisper (local inference) for transcription and Ollama (local LLM) for summarisation.

Input

ARGUMENTS may be:

  • A file path to an audio/video file (e.g., .m4a, .mp3, .wav, .mp4, .mov, .webm)
  • A directory path containing multiple recordings
  • The word transcript followed by a path to an existing .txt transcript (skips transcription, goes straight to summary)

If no argument is provided, ask the user for the file path.

Prerequisites Check

Before doing anything, verify the local toolchain is installed. Run these checks:

which whisper || echo "MISSING: whisper"
which ollama || echo "MISSING: ollama"
which ffmpeg || echo "MISSING: ffmpeg"
ollama list 2>/dev/null | head -5

If any tool is missing, guide the user through installation using ONLY these local install commands:

# FFmpeg (required by Whisper for audio decoding)
brew install ffmpeg

# Whisper (local speech-to-text — runs entirely on-device)
pip3 install openai-whisper

# Ollama (local LLM — runs entirely on-device)
# Download from https://ollama.ai or:
brew install ollama

# Pull a summarisation model (one-time download, then runs offline)
ollama pull mistral

IMPORTANT: Tell the user that:

  • openai-whisper is a LOCAL model that runs on their Mac — despite the "openai" name, it does NOT use any API or send data online
  • ollama runs models entirely on-device after the initial model download
  • ffmpeg is a local audio processing tool
  • After installation, the entire pipeline works offline

Do NOT proceed until all tools are confirmed installed.

Step 1: Transcribe

Run Whisper locally on the audio file. Choose the model size based on the user's preference for speed vs accuracy:

| Model | Size | Speed | Quality | |-------|------|-------|---------| | tiny | 75 MB | Fastest | Basic | | base | 140 MB | Fast | Decent | | small | 460 MB | Moderate | Good | | medium | 1.5 GB | Slow | Very good | | large | 3 GB | Slowest | Best |

Default to small unless the user specifies otherwise. Auto-detect language unless specified.

whisper "<audio_file>" --model small --output_format txt --output_dir "<output_dir>"

Where <output_dir> is the same directory as the audio file.

After transcription:

  1. Read the output .txt file
  2. Report the transcript length and detected language to the user
  3. Save the raw transcript as <filename>_transcript.txt

If the user provided a pre-existing transcript (via transcript <path>), skip this step and read the file directly.

Step 2: Summarise with Ollama

For transcripts under ~3000 words, pipe directly to Ollama:

cat "<transcript_file>" | ollama run mistral "<prompt>"

For transcripts over ~3000 words, use the REST API to set a larger context window (the --num-ctx flag does not exist in current Ollama CLI):

import json, urllib.request

with open("<transcript_file>") as f:
    transcript = f.read()

prompt = "<instruction>\n\nTRANSCRIPT:\n" + transcript

payload = json.dumps({
    "model": "mistral",
    "prompt": prompt,
    "stream": False,
    "options": {"num_ctx": 8192}   # use 16384 for very long transcripts (>7000 words)
}).encode()

req = urllib.request.Request(
    "http://localhost:11434/api/generate",
    data=payload,
    headers={"Content-Type": "application/json"}
)
with urllib.request.urlopen(req, timeout=600) as resp:
    data = json.loads(resp.read())
    print(data["response"])

For very long transcripts (>7000 words), use the chunking strategy in the section below instead of increasing num_ctx further, as model quality degrades at extreme context lengths.

Use this prompt structure:

You are a meeting summarisation expert. Analyse this meeting transcript and produce a structured summary with the following sections:

## Meeting Summary

### Key Discussion Points
- [Bullet points of main topics discussed]

### Decisions Made
- [Specific decisions that were agreed upon]

### Action Items
- [ ] [Action item] — [Responsible person if mentioned] — [Deadline if mentioned]

### Open Questions
- [Unresolved issues or topics deferred to future discussion]

### Notable Quotes or Positions
- [Any significant statements, disagreements, or positions taken]

Be concise. Only include information explicitly present in the transcript. Do not infer or add information that was not discussed.

TRANSCRIPT:

Step 3: Save Output

Save the summary as <filename>_summary.md in the same directory as the audio file.

Then delete the original audio file:

rm "<audio_file>"

The final output structure:

meeting_recording_transcript.txt ← raw transcript (saved in audio folder)
meeting_recording_summary.md     ← structured summary

Note: the original audio file is deleted after successful transcription and summarisation to save disk space. Skip deletion if the user provided a pre-existing transcript (no audio file was consumed).

Step 4: Review

After saving, display the summary to the user and ask:

  • Whether they want to adjust the level of detail
  • Whether any sections need expansion
  • Whether they want to re-run with a different Ollama model (e.g., llama3 for higher quality)

Handling Long Transcripts

If the transcript exceeds ~3000 words (roughly the context window of smaller models):

  1. Split into chunks of ~2500 words at natural paragraph breaks
  2. Summarise each chunk separately
  3. Run a final consolidation pass combining the chunk summaries
# Consolidation prompt
cat chunk_summaries.txt | ollama run mistral "Consolidate these partial meeting summaries into a single coherent summary following the same structure (Key Discussion Points, Decisions, Action Items, Open Questions):"

Privacy Guarantees

Remind the user at the start of every run:

  • Whisper runs locally — audio never leaves the machine
  • Ollama runs locally — transcript text never leaves the machine
  • No API keys, no cloud services, no network requests during processing
  • The only network activity is the one-time model downloads during installation

Troubleshooting

  • Whisper out of memory: Use a smaller model (--model tiny or --model base)
  • Ollama not responding: Run ollama serve in a separate terminal first
  • Unsupported audio format: Convert with ffmpeg -i input.xyz output.wav first
  • Transcript too long for Ollama: Use the chunking strategy above, or try ollama pull llama3 which has a larger context window
Skills similaires