Files
meeting-notes/README.md
2025-11-04 20:59:06 +01:00

7.4 KiB

Meeting Audio Summarizer

Dieses Python-Programm transkribiert Audio-Dateien von Meetings mit Whisper (lokal) und erstellt automatisch eine Zusammenfassung mit einem LLM über eine OpenAI-kompatible API.

Features

  • 🎤 Lokale Transkription mit OpenAI Whisper (keine Cloud erforderlich)
  • 🤖 Flexible LLM-Integration über OpenAI-kompatible APIs
  • 📝 Strukturierte Zusammenfassungen mit Hauptthemen, Entscheidungen und Action Items
  • 🔄 Provider-unabhängig - funktioniert mit OpenAI, Anthropic, Ollama, LM Studio, etc.
  • 💾 Automatisches Speichern von Transkript und Zusammenfassung

Installation

Voraussetzungen

  • Python 3.8 oder höher
  • ffmpeg (für Audio-Verarbeitung)

ffmpeg Installation

Ubuntu/Debian:

sudo apt update
sudo apt install ffmpeg

macOS:

brew install ffmpeg

Windows: Lade ffmpeg von https://ffmpeg.org/download.html herunter und füge es zum PATH hinzu.

Python-Pakete installieren

pip install -r requirements.txt

Whisper benötigt beim ersten Start einige Zeit zum Herunterladen der Modelle.

Konfiguration

API-Key setzen

Setze deinen API-Key als Umgebungsvariable:

export OPENAI_API_KEY="dein-api-key"

Oder übergebe ihn direkt beim Aufruf mit --api-key.

Alternative LLM-Provider

Das Programm funktioniert mit jedem OpenAI-kompatiblen Endpunkt:

Ollama (lokal)

python meeting_summarizer.py meeting.mp3 \
  --api-base http://localhost:11434/v1 \
  --api-key ollama \
  --model llama3.2 \
  --language german

LM Studio (lokal)

python meeting_summarizer.py meeting.mp3 \
  --api-base http://localhost:1234/v1 \
  --api-key lm-studio \
  --model local-model \
  --language english

Anthropic Claude (via OpenAI-Kompatibilitätslayer)

python meeting_summarizer.py meeting.mp3 \
  --api-base https://api.anthropic.com/v1 \
  --api-key $ANTHROPIC_API_KEY \
  --model claude-3-5-sonnet-20241022 \
  --language german

OpenRouter

python meeting_summarizer.py meeting.mp3 \
  --api-base https://openrouter.ai/api/v1 \
  --api-key $OPENROUTER_API_KEY \
  --model anthropic/claude-3.5-sonnet \
  --language spanish

Verwendung

Basis-Verwendung

python meeting_summarizer.py meeting.mp3

Dies erstellt:

  • meeting_transcript.txt - Vollständiges Transkript
  • meeting_summary.txt - Zusammenfassung

Mit Optionen

python meeting_summarizer.py meeting.wav \
  --whisper-model medium \
  --model gpt-4 \
  --language german \
  --output-dir ./summaries \
  --api-base https://api.openai.com/v1

Alle Optionen

Optionen:
  audio_file              Pfad zur Audio-Datei (mp3, wav, m4a, etc.)
  
  --whisper-model MODEL   Whisper-Modellgröße (default: base)
                         Optionen: tiny, base, small, medium, large
                         
  --api-base URL         Base URL für OpenAI-kompatible API
                         (default: https://api.openai.com/v1)
                         
  --api-key KEY          API-Key (nutzt OPENAI_API_KEY wenn nicht angegeben)
  
  --model MODEL          LLM-Modellname (default: gpt-4)
  
  --language LANG        Sprache für die Zusammenfassung (default: english)
                         Beispiele: english, german, spanish, french, turkish
                         
  --output-dir DIR       Ausgabeverzeichnis für Transkript und Zusammenfassung
                         (default: gleiches Verzeichnis wie Audio-Datei)
                         
  --no-transcript        Vollständiges Transkript nicht speichern

Whisper-Modelle

Die Wahl des Whisper-Modells beeinflusst Geschwindigkeit und Genauigkeit:

Modell Parameter Geschwindigkeit Genauigkeit Empfehlung
tiny 39M Sehr schnell Niedrig Schnelle Tests
base 74M Schnell Gut Standard
small 244M Mittel Sehr gut Gute Balance
medium 769M Langsam Ausgezeichnet Hohe Qualität
large 1550M Sehr langsam Beste Produktionsumgebung

Empfehlung für Meetings: base oder small für gute Balance zwischen Geschwindigkeit und Qualität.

Unterstützte Audio-Formate

Alle Formate, die von ffmpeg unterstützt werden:

  • MP3
  • WAV
  • M4A
  • FLAC
  • OGG
  • WMA
  • AAC

Sprach-Handling

Das Programm unterscheidet zwischen zwei Spracheinstellungen:

Transkription (Input)

  • Whisper erkennt die Sprache automatisch - du musst nichts einstellen
  • Die Audio-Datei kann in jeder Sprache sein (Deutsch, Englisch, Spanisch, etc.)
  • Whisper transkribiert das Audio in der Originalsprache

Zusammenfassung (Output)

  • Der --language Parameter steuert die Ausgabesprache der Zusammenfassung
  • Du kannst z.B. ein deutsches Meeting transkribieren und eine englische Zusammenfassung erhalten
  • Alle Prompts an das LLM sind auf Englisch, aber das LLM antwortet in der gewünschten Sprache

Beispiel:

# Deutsches Meeting → Deutsche Zusammenfassung
python meeting_summarizer.py german-meeting.mp3 --language german

# Deutsches Meeting → Englische Zusammenfassung
python meeting_summarizer.py german-meeting.mp3 --language english

# Türkisches Meeting → Türkische Zusammenfassung
python meeting_summarizer.py turkish-meeting.mp3 --language turkish

Programmatische Verwendung

Du kannst das Programm auch als Modul verwenden:

from meeting_summarizer import MeetingSummarizer

# Initialisiere den Summarizer
summarizer = MeetingSummarizer(
    whisper_model="base",
    api_base_url="http://localhost:11434/v1",
    api_key="ollama",
    model_name="llama3.2",
    output_language="german"
)

# Verarbeite ein Meeting
transcript, summary = summarizer.process_meeting(
    audio_path="meeting.mp3",
    output_dir="./output",
    save_transcript=True
)

print(summary)

Performance-Tipps

Für schnellere Transkription:

  • Nutze kleinere Whisper-Modelle (tiny oder base)
  • Nutze GPU-Beschleunigung (CUDA) falls verfügbar
  • Whisper installiert automatisch die passende Version für deine Hardware

Für bessere Qualität:

  • Nutze größere Whisper-Modelle (medium oder large)
  • Stelle sicher, dass die Audio-Qualität gut ist
  • Whisper erkennt die Sprache des Audios automatisch
  • Mit --language bestimmst du die Sprache der Zusammenfassung, nicht der Transkription

Tipps für embedded Systems

Da du mit embedded Systems arbeitest, hier einige Hinweise für ressourcenbeschränkte Umgebungen:

  • Raspberry Pi: Nutze tiny oder base Modell
  • Echtzeit-Verarbeitung: Whisper ist nicht für Echtzeit optimiert, verarbeite Aufnahmen nachträglich
  • Speicher: base benötigt ~140MB RAM, large ~3GB
  • Alternative: Nutze Whisper.cpp für C++-Integration in embedded Systems

Troubleshooting

"No module named 'whisper'"

pip install openai-whisper

"ffmpeg not found"

Installiere ffmpeg (siehe Installationsanleitung oben)

"API key not provided"

Setze die Umgebungsvariable oder übergebe --api-key

Langsame Transkription

Nutze ein kleineres Modell oder aktiviere GPU-Beschleunigung

Lizenz

Frei verwendbar für private und kommerzielle Zwecke.

Hinweise

  • Whisper läuft komplett lokal - keine Audio-Daten werden gesendet
  • Nur der transkribierte Text wird an das LLM gesendet
  • Achte auf Datenschutz bei sensiblen Meeting-Inhalten
  • Die Qualität der Zusammenfassung hängt vom gewählten LLM ab