
OpenAI Whisper Tutorial: Vollständiger Leitfaden zur Sprache-zu-Text-Transkription
Eric King
Author
OpenAI Whisper Tutorial: Vollständiger Leitfaden zur Sprache-zu-Text-Transkription
OpenAI Whisper ist ein Open-Source-Modell für automatische Spracherkennung (ASR) für Sprache-zu-Text-Transkription und Sprachübersetzung. Es unterstützt viele Sprachen, kommt gut mit Akzenten und Hintergrundgeräuschen zurecht und wird häufig für Podcasts, Meetings, Interviews und Video-Untertitel genutzt.
Dieses umfassende Tutorial führt Sie durch alles Wichtige für den Einstieg in Whisper – von der Installation bis zu fortgeschrittenen Anwendungsfällen.
Was ist OpenAI Whisper?
Whisper wurde mit 680.000 Stunden mehrsprachiger Audiodaten trainiert und ist deshalb besonders stark bei realistischer, unperfekter Audioqualität. Es zählt zu den genauesten Open-Source-Spracherkennungsmodellen.
Wichtige Funktionen
- Mehrsprachigkeit – 99+ Sprachen
- Sprache-zu-Text-Transkription – Audio in Text umwandeln
- Sprachübersetzung – Sprache direkt ins Englische übersetzen
- Spracherkennung – erkennt die gesprochene Sprache automatisch
- Zeitstempel – Wort- und Segment-Zeitstempel
- Open Source und kostenlos – MIT-Lizenz, keine API-Kosten
- Offline nutzbar – läuft lokal auf Ihrem Rechner
- Viele Formate – unterstützt gängige Audio- und Videoformate
Whisper-Modellgrößen erklärt
Whisper bietet mehrere Modellgrößen, um Geschwindigkeit und Genauigkeit abzuwägen:
| Modell | Parameter | Geschwindigkeit | Genauigkeit | Speicher | Einsatzgebiet |
|---|---|---|---|---|---|
| tiny | 39M | ⭐⭐⭐⭐⭐ | ⭐⭐ | ~1 GB | Schnelle Tests, Demos |
| base | 74M | ⭐⭐⭐⭐ | ⭐⭐⭐ | ~1 GB | Einfache Audioaufnahmen, schnelle Aufgaben |
| small | 244M | ⭐⭐⭐ | ⭐⭐⭐⭐ | ~2 GB | Allgemeine Nutzung, ausgewogen |
| medium | 769M | ⭐⭐ | ⭐⭐⭐⭐⭐ | ~5 GB | Lautstärke/Geräusche, hohe Genauigkeit |
| large | 1550M | ⭐ | ⭐⭐⭐⭐⭐⭐ | ~10 GB | Beste Genauigkeit, Produktion |
Empfehlungen:
- Für Geschwindigkeit:
tinyoderbase - Für Balance:
smallodermedium - Für Genauigkeit:
largeoderlarge-v3 - Für Produktion: häufig
mediumoderlarge-v2
Voraussetzungen
Bevor Sie Whisper nutzen, sollten folgende Punkte erfüllt sein:
- Python 3.8 oder neuer (Python 3.9+ empfohlen)
- Paketmanager pip
- FFmpeg installiert (für Audio- und Videoverarbeitung)
- (Optional) NVIDIA-GPU mit CUDA für schnellere Verarbeitung
- (Optional) 4 GB+ RAM für das base-Modell, 10 GB+ für large
Schritt 1: Installation
Whisper installieren
Installieren Sie das OpenAI-Whisper-Paket mit pip:
pip install openai-whisper
Oder mit fester Version:
pip install openai-whisper==20231117
FFmpeg installieren
FFmpeg wird zum Dekodieren von Audio- und Videodateien benötigt.
macOS (mit Homebrew):
brew install ffmpeg
Ubuntu / Debian:
sudo apt update
sudo apt install ffmpeg
Windows:
- FFmpeg von ffmpeg.org herunterladen
- Entpacken und zum System-PATH hinzufügen
- Oder:
choco install ffmpeg(mit Chocolatey)
Installation prüfen:
ffmpeg -version
whisper --version
Schritt 2: Grundlegende Nutzung – Python
Einfache Transkription
So transkribieren Sie Audio am einfachsten:
import whisper
# Load model (downloads automatically on first use)
model = whisper.load_model("base")
# Transcribe audio file
result = model.transcribe("audio.mp3")
# Print transcription
print(result["text"])
Ausgabe:
Hello everyone, welcome to today's meeting. We will discuss the project timeline and upcoming milestones.
Vollständiges Beispiel mit Fehlerbehandlung
import whisper
import os
def transcribe_audio(audio_path, model_size="base"):
"""
Transcribe an audio file using Whisper.
Args:
audio_path (str): Path to the audio file
model_size (str): Whisper model size (tiny, base, small, medium, large)
Returns:
dict: Transcription result with text and segments
"""
try:
# Check if audio file exists
if not os.path.exists(audio_path):
raise FileNotFoundError(f"Audio file not found: {audio_path}")
# Load the Whisper model
print(f"Loading Whisper model: {model_size}")
model = whisper.load_model(model_size)
# Transcribe the audio
print(f"Transcribing: {audio_path}")
result = model.transcribe(audio_path)
print(f"✓ Transcription complete!")
print(f" Language: {result['language']}")
print(f" Duration: {result['segments'][-1]['end']:.2f}s")
return result
except Exception as e:
print(f"Error during transcription: {str(e)}")
return None
# Example usage
if __name__ == "__main__":
audio_file = "meeting.mp3"
result = transcribe_audio(audio_file, model_size="base")
if result:
print("\n" + "="*50)
print("TRANSCRIPTION:")
print("="*50)
print(result["text"])
Schritt 3: Spracherkennung und Vorgabe
Sprache automatisch erkennen
Whisper erkennt die Sprache automatisch:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(f"Detected language: {result['language']}")
print(f"Language probability: {result.get('language_probability', 0):.2%}")
print(f"\nTranscription:\n{result['text']}")
Sprache vorgeben (schneller und genauer)
Wenn Sie die Sprache kennen, verbessert eine explizite Angabe Geschwindigkeit und Genauigkeit:
import whisper
model = whisper.load_model("base")
# Specify language
result_en = model.transcribe("audio.mp3", language="en") # English
result_zh = model.transcribe("audio.mp3", language="zh") # Chinese
result_es = model.transcribe("audio.mp3", language="es") # Spanish
result_fr = model.transcribe("audio.mp3", language="fr") # French
result_de = model.transcribe("audio.mp3", language="de") # German
result_ja = model.transcribe("audio.mp3", language="ja") # Japanese
print(result_en["text"])
Unterstützte Sprachen:
Whisper unterstützt 99+ Sprachen. Häufige Sprachcodes:
en– Englischzh– Chinesisches– Spanischfr– Französischde– Deutschja– Japanischko– Koreanischpt– Portugiesischru– Russischit– Italienisch
Schritt 4: Zeitstempel und Segmente
Segmente mit Zeitstempeln auslesen
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
# Print full transcription
print("Full Text:")
print(result["text"])
# Print segments with timestamps
print("\n" + "="*50)
print("Segments with Timestamps:")
print("="*50)
for segment in result["segments"]:
start = segment["start"]
end = segment["end"]
text = segment["text"].strip()
print(f"[{start:6.2f}s - {end:6.2f}s] {text}")
Ausgabe:
Full Text:
Hello everyone, welcome to today's meeting. We will discuss the project timeline.
==================================================
Segments with Timestamps:
==================================================
[ 0.00s - 5.20s] Hello everyone, welcome to today's meeting.
[ 5.20s - 12.50s] We will discuss the project timeline.
Zeitstempel als Timecode formatieren
def format_timestamp(seconds):
"""Format seconds to HH:MM:SS."""
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
return f"{hours:02d}:{minutes:02d}:{secs:02d}"
for segment in result["segments"]:
start_time = format_timestamp(segment["start"])
end_time = format_timestamp(segment["end"])
print(f"[{start_time} - {end_time}] {segment['text']}")
Wort-Zeitstempel
Aktivieren Sie Wort-Zeitstempel für präzises Timing:
import whisper
model = whisper.load_model("base")
result = model.transcribe(
"audio.mp3",
word_timestamps=True # Enable word-level timestamps
)
for segment in result["segments"]:
print(f"\n[{segment['start']:.2f}s - {segment['end']:.2f}s]")
print(f"Text: {segment['text']}")
# Word-level timestamps
if "words" in segment:
print("Words:")
for word in segment["words"]:
print(f" {word['word']} [{word['start']:.2f}s - {word['end']:.2f}s]")
Schritt 5: Sprachübersetzung
Whisper kann nicht-englische Sprache direkt ins Englische übersetzen:
import whisper
model = whisper.load_model("base")
# Translate to English (regardless of source language)
result = model.transcribe("spanish_audio.mp3", task="translate")
print("Translated to English:")
print(result["text"])
# Original transcription (in original language)
result_original = model.transcribe("spanish_audio.mp3", task="transcribe")
print("\nOriginal language transcription:")
print(result_original["text"])
Anwendungsfälle:
- Internationale Meetings
- Mehrsprachige Inhaltsverarbeitung
- Content-Lokalisierung
- Materialien zum Sprachenlernen
Schritt 6: Erweiterte Parameter
Temperatur und Beam-Size
Steuern Sie Qualität und Geschwindigkeit der Transkription:
import whisper
model = whisper.load_model("base")
result = model.transcribe(
"audio.mp3",
temperature=0.0, # Lower = more deterministic (0.0 recommended)
beam_size=5, # Higher = more accurate but slower (default: 5)
best_of=5, # Number of candidates to consider
patience=1.0, # Beam search patience
condition_on_previous_text=True, # Use context from previous segments
initial_prompt="This is a technical meeting about AI and machine learning." # Context prompt
)
Temperaturwerte
temperature=0.0– am deterministischsten, empfohlentemperature=0.2-0.4– etwas mehr Variationtemperature=1.0– kreativer, weniger genau
Initialer Prompt für Kontext
Geben Sie Kontext an, um die Genauigkeit zu verbessern:
result = model.transcribe(
"technical_meeting.mp3",
initial_prompt="This meeting discusses API endpoints, microservices, Kubernetes, and CI/CD pipelines."
)
result = model.transcribe(
"medical_audio.mp3",
initial_prompt="This is a medical consultation discussing patient symptoms and treatment options."
)
Schritt 7: Kommandozeile (CLI)
Whisper bietet eine leistungsfähige Kommandozeilenschnittstelle:
CLI-Grundlagen
whisper audio.mp3
Modell angeben
whisper audio.mp3 --model small
whisper audio.mp3 --model medium
whisper audio.mp3 --model large-v2
Sprache angeben
whisper audio.mp3 --language en
whisper audio.mp3 --language zh
Ausgabeformate
# SRT subtitles
whisper audio.mp3 --output_format srt
# VTT subtitles
whisper audio.mp3 --output_format vtt
# Text file
whisper audio.mp3 --output_format txt
# JSON (with all metadata)
whisper audio.mp3 --output_format json
# TSV (tab-separated values)
whisper audio.mp3 --output_format tsv
Erweiterte CLI-Optionen
# Full example with all options
whisper audio.mp3 \
--model medium \
--language en \
--task transcribe \
--output_format srt \
--output_dir ./transcripts \
--verbose True \
--temperature 0.0 \
--beam_size 5 \
--best_of 5 \
--fp16 True
CLI-Optionen im Überblick
| Option | Beschreibung | Standard |
|---|---|---|
--model | Modellgröße (tiny, base, small, medium, large) | base |
--language | Sprachcode (en, zh, es usw.) | Auto-Erkennung |
--task | transcribe oder translate | transcribe |
--output_format | Ausgabeformat (txt, srt, vtt, json, tsv) | txt |
--output_dir | Ausgabeordner | Aktuelles Verzeichnis |
--temperature | Temperatur beim Sampling | 0.0 |
--beam_size | Beam-Size für die Beam-Suche | 5 |
--best_of | Anzahl der Kandidaten | 5 |
--fp16 | FP16-Präzision nutzen (GPU) | True |
--verbose | Ausführliche Ausgabe | False |
Schritt 8: Unterstützte Audio- und Videoformate
Whisper unterstützt die gängigsten Formate über FFmpeg:
Unterstützte Formate
- Audio: MP3, WAV, M4A, FLAC, OGG, AAC, WMA
- Video: MP4, AVI, MKV, MOV, WebM, FLV
- Streaming: kann Audiostreams verarbeiten
Formatbeispiele
import whisper
model = whisper.load_model("base")
# Audio formats
model.transcribe("audio.mp3")
model.transcribe("audio.wav")
model.transcribe("audio.m4a")
model.transcribe("audio.flac")
# Video formats (extracts audio automatically)
model.transcribe("video.mp4")
model.transcribe("video.mkv")
model.transcribe("video.webm")
Schritt 9: Vollständiges Produktionsbeispiel
Hier ist ein vollständiges, produktionsreifes Beispiel:
import whisper
import json
from pathlib import Path
from datetime import datetime
class WhisperTranscriber:
"""Production-ready Whisper transcription service."""
def __init__(self, model_size="base"):
"""Initialize transcriber with specified model."""
print(f"Loading Whisper model: {model_size}")
self.model = whisper.load_model(model_size)
print("✓ Model loaded successfully")
def transcribe_file(self, audio_path, output_dir="transcripts", **kwargs):
"""
Transcribe audio file and save results.
Args:
audio_path: Path to audio file
output_dir: Directory to save outputs
**kwargs: Additional transcribe parameters
"""
audio_path = Path(audio_path)
if not audio_path.exists():
raise FileNotFoundError(f"Audio file not found: {audio_path}")
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
print(f"\nTranscribing: {audio_path.name}")
# Transcribe
result = self.model.transcribe(
str(audio_path),
word_timestamps=True,
**kwargs
)
# Prepare output data
output_data = {
"file": str(audio_path),
"transcribed_at": datetime.now().isoformat(),
"language": result["language"],
"language_probability": result.get("language_probability", 0),
"duration": result["segments"][-1]["end"] if result["segments"] else 0,
"text": result["text"],
"segments": result["segments"]
}
# Save outputs
base_name = audio_path.stem
# Save as text
text_file = output_path / f"{base_name}.txt"
with open(text_file, "w", encoding="utf-8") as f:
f.write(result["text"])
# Save as JSON
json_file = output_path / f"{base_name}.json"
with open(json_file, "w", encoding="utf-8") as f:
json.dump(output_data, f, indent=2, ensure_ascii=False)
# Save as SRT
srt_file = output_path / f"{base_name}.srt"
self._save_srt(result["segments"], srt_file)
print(f"✓ Transcription saved:")
print(f" - Text: {text_file}")
print(f" - JSON: {json_file}")
print(f" - SRT: {srt_file}")
return output_data
def _save_srt(self, segments, output_path):
"""Save segments as SRT subtitle file."""
with open(output_path, "w", encoding="utf-8") as f:
for i, segment in enumerate(segments, start=1):
start = self._format_srt_time(segment["start"])
end = self._format_srt_time(segment["end"])
text = segment["text"].strip()
f.write(f"{i}\n{start} --> {end}\n{text}\n\n")
def _format_srt_time(self, seconds):
"""Format seconds to SRT timestamp."""
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
millis = int((seconds % 1) * 1000)
return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"
# Usage
if __name__ == "__main__":
transcriber = WhisperTranscriber(model_size="base")
result = transcriber.transcribe_file(
"meeting.mp3",
output_dir="transcripts",
language="en",
temperature=0.0
)
print(f"\nLanguage: {result['language']}")
print(f"Duration: {result['duration']:.2f}s")
print(f"\nTranscription preview:")
print(result['text'][:200] + "...")
Schritt 10: Best Practices
1. Das richtige Modell wählen
# For speed (testing, demos)
model = whisper.load_model("tiny")
# For balance (general use)
model = whisper.load_model("base") # or "small"
# For accuracy (production)
model = whisper.load_model("medium") # or "large-v2"
2. Sprache angeben, wenn bekannt
# Faster and more accurate
result = model.transcribe("audio.mp3", language="en")
# Instead of auto-detection
result = model.transcribe("audio.mp3") # Slower
3. Passende Temperatur verwenden
# Recommended for most cases
result = model.transcribe("audio.mp3", temperature=0.0)
# For creative content (not recommended for transcription)
result = model.transcribe("audio.mp3", temperature=0.2)
4. Kontext mit initialem Prompt liefern
# Technical content
result = model.transcribe(
"meeting.mp3",
initial_prompt="This meeting discusses software architecture, APIs, and deployment strategies."
)
# Medical content
result = model.transcribe(
"consultation.mp3",
initial_prompt="This is a medical consultation about patient symptoms and treatment."
)
5. Modellinstanzen wiederverwenden
# Load once, reuse multiple times
model = whisper.load_model("base")
# Process multiple files
for audio_file in ["file1.mp3", "file2.mp3", "file3.mp3"]:
result = model.transcribe(audio_file)
# Process result...
6. Lange Audiodateien verarbeiten
Bei sehr langen Audiodateien können Sie in Chunks aufteilen:
import whisper
from pydub import AudioSegment
def transcribe_long_audio(audio_path, chunk_length_ms=600000): # 10 minutes
"""Transcribe long audio by splitting into chunks."""
model = whisper.load_model("base")
# Load audio
audio = AudioSegment.from_file(audio_path)
duration_ms = len(audio)
all_text = []
all_segments = []
# Process in chunks
for i in range(0, duration_ms, chunk_length_ms):
chunk = audio[i:i + chunk_length_ms]
chunk_path = f"chunk_{i}.wav"
chunk.export(chunk_path, format="wav")
result = model.transcribe(chunk_path)
all_text.append(result["text"])
all_segments.extend(result["segments"])
# Clean up chunk file
os.remove(chunk_path)
return {
"text": " ".join(all_text),
"segments": all_segments
}
Häufige Probleme und Lösungen
Problem 1: FFmpeg nicht gefunden
Fehler:
FileNotFoundError: ffmpegLösung:
# Install FFmpeg
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# Verify
ffmpeg -version
Problem 2: Speicher voll
Fehler:
RuntimeError: CUDA out of memory oder der Arbeitsspeicher des Systems reicht nichtLösungen:
# Use smaller model
model = whisper.load_model("base") # Instead of "large"
# Or use CPU
import torch
model = whisper.load_model("base", device="cpu")
# Or process in chunks (see above)
Problem 3: Langsame Transkription
Problem: Die Transkription ist sehr langsam
Lösungen:
# Use GPU if available
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
model = whisper.load_model("base", device=device)
# Use smaller model
model = whisper.load_model("tiny") # or "base"
# Reduce beam size (faster but slightly less accurate)
result = model.transcribe("audio.mp3", beam_size=1)
Problem 4: Geringe Genauigkeit
Problem: Die Transkription enthält viele Fehler
Lösungen:
# Use larger model
model = whisper.load_model("medium") # or "large"
# Specify language
result = model.transcribe("audio.mp3", language="en")
# Provide context
result = model.transcribe(
"audio.mp3",
initial_prompt="Context about the audio content..."
)
# Use optimal settings
result = model.transcribe(
"audio.mp3",
temperature=0.0,
beam_size=5,
best_of=5
)
Anwendungsfälle
1. Podcast-Transkription
model = whisper.load_model("medium")
result = model.transcribe("podcast.mp3", language="en")
# Save transcript
with open("podcast_transcript.txt", "w") as f:
f.write(result["text"])
2. YouTube-Untertitel erzeugen
model = whisper.load_model("base")
result = model.transcribe("video.mp4", language="en")
# Generate SRT
# (Use CLI: whisper video.mp4 --output_format srt)
3. Meetingnotizen
model = whisper.load_model("base")
result = model.transcribe(
"meeting.mp3",
language="en",
initial_prompt="This is a business meeting discussing project updates and deadlines."
)
# Save with timestamps
for segment in result["segments"]:
print(f"[{segment['start']:.0f}s] {segment['text']}")
4. Interview-Transkription
model = whisper.load_model("medium")
result = model.transcribe("interview.mp3", language="en")
# Export for editing
with open("interview.txt", "w") as f:
for segment in result["segments"]:
f.write(f"[{segment['start']:.2f}s] {segment['text']}\n")
5. Mehrsprachige Inhaltsübersetzung
model = whisper.load_model("base")
# Translate to English
result = model.transcribe("spanish_audio.mp3", task="translate")
print(result["text"]) # English translation
Whisper im Vergleich mit Alternativen
| Merkmal | Whisper | Cloud-APIs | Faster-Whisper |
|---|---|---|---|
| Kosten | Kostenlos | Pro Minute bezahlt | Kostenlos |
| Offline | ✅ | ❌ | ✅ |
| Geschwindigkeit | Mittel | Schnell | Schnell (2–4×) |
| Genauigkeit | Hoch | Hoch | Hoch (gleich) |
| Setup | Einfach | Sehr einfach | Einfach |
| Echtzeit | ❌ | ✅ | ❌ |
| Datenschutz | ✅ Lokal | ❌ Cloud | ✅ Lokal |
Whisper wählen, wenn:
- Sie kostenlose, offline Transkription möchten
- Datenschutz wichtig ist
- Sie Kontrolle über die Infrastruktur brauchen
- Sie Stapeldateien oder Archivinhalte verarbeiten
Cloud-APIs wählen, wenn:
- Sie Echtzeit-Transkription brauchen
- Sie gemanagte Infrastruktur möchten
- Sie Budget für API-Kosten haben
- Sie Enterprise-Support benötigen
Nächste Schritte
Jetzt, da Sie die Grundlagen kennen, vertiefen Sie hier:
- Whisper Python Example – ausführlichere Python-Beispiele
- Faster-Whisper Guide – 2–4× schnellere Transkription
- Whisper Accuracy Tips – Transkriptionsqualität verbessern
- Whisper Transcript Formatting – Ausgaben formatieren (SRT, VTT, JSON)
- Whisper for Meetings – Transkription speziell für Meetings
Fazit
OpenAI Whisper gehört zu den leistungsfähigsten Open-Source-Sprache-zu-Text-Modellen. Mit starker Mehrsprachigkeit, hoher Transkriptionsgenauigkeit und vollständiger Offline-Nutzung ist es eine ausgezeichnete Wahl für Entwickler und Content-Ersteller, die die volle Kontrolle über ihren Transkriptions-Workflow wollen.
Wichtigste Punkte:
- Whisper unterstützt 99+ Sprachen mit hoher Genauigkeit
- Wählen Sie die passende Modellgröße für Ihre Anforderungen
- Sprache angeben, wenn bekannt, für bessere Performance
- Wort-Zeitstempel für präzises Timing nutzen
- Modellinstanzen wiederverwenden bei mehreren Dateien
- faster-whisper für Produktionsumgebungen in Betracht ziehen
Ob Podcasts, Untertitel oder Meeting-Aufzeichnungen – Whisper liefert eine robuste, kostenlose und datenschutzfreundliche Lösung für Sprache-zu-Text.
Sie suchen eine professionelle Sprache-zu-Text-Lösung? Besuchen Sie SayToWords und entdecken Sie unsere KI-Transkriptionsplattform mit optimierter Performance und mehreren Ausgabeformaten.