# 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:** ```bash sudo apt update sudo apt install ffmpeg ``` **macOS:** ```bash brew install ffmpeg ``` **Windows:** Lade ffmpeg von https://ffmpeg.org/download.html herunter und füge es zum PATH hinzu. ### Python-Pakete installieren ```bash 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: ```bash 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) ```bash python meeting_summarizer.py meeting.mp3 \ --api-base http://localhost:11434/v1 \ --api-key ollama \ --model llama3.2 \ --language german ``` #### LM Studio (lokal) ```bash 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) ```bash 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 ```bash 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 ```bash python meeting_summarizer.py meeting.mp3 ``` Dies erstellt: - `meeting_transcript.txt` - Vollständiges Transkript - `meeting_summary.txt` - Zusammenfassung ### Mit Optionen ```bash 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:** ```bash # 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: ```python 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'" ```bash 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