Whisper Python-Beispiel: Vollständiger Leitfaden zur Sprache-zu-Text-Transkription

Whisper Python-Beispiel: Vollständiger Leitfaden zur Sprache-zu-Text-Transkription

Eric King

Eric King

Author


Whisper Python-Beispiel: Vollständiger Leitfaden zur Sprache-zu-Text-Transkription

OpenAI Whisper gehört heute zu den leistungsstärksten Open-Source-Modellen für Spracherkennung. In diesem ausführlichen Leitfaden lernen Sie, wie Sie Whisper mit Python nutzen, um Audiodateien mit hoher Genauigkeit in Text zu transkribieren.
Dieses Tutorial eignet sich für:
  • Entwicklerinnen und Entwickler, die Sprache-zu-Text-Funktionen bauen
  • Datenwissenschaftlerinnen und -wissenschaftler, die mit Audiodaten arbeiten
  • Alle, die ein vollständiges Whisper-Python-Beispiel suchen

Was ist OpenAI Whisper?

Whisper ist ein System zur automatischen Spracherkennung (ASR), trainiert mit 680.000 Stunden mehrsprachiger Audiodaten. Es kann:
  • Sprache transkribieren in über 99 Sprachen
  • Sprachen automatisch erkennen
  • in Englisch übersetzen (Speech-to-English)
  • verrauschtes Audio und Akzente verarbeiten
  • lange Audiodateien verarbeiten

Voraussetzungen

Bevor Sie starten, stellen Sie Folgendes sicher:
  • Python 3.8+ ist installiert
  • pip als Paketmanager
  • FFmpeg ist installiert (für die Audioverarbeitung)
  • (Optional) NVIDIA-GPU für schnellere Verarbeitung

Schritt 1: Whisper installieren

Installieren Sie das OpenAI-Whisper-Paket mit pip:
pip install openai-whisper

FFmpeg installieren

macOS (mit Homebrew):
brew install ffmpeg
Ubuntu/Debian:
sudo apt update
sudo apt install ffmpeg
Windows: Laden Sie FFmpeg von ffmpeg.org herunter und fügen Sie es Ihrem PATH hinzu.

Schritt 2: Einfaches Whisper-Python-Beispiel

Hier ist ein einfaches Python-Skript zum Transkribieren einer Audiodatei:
import whisper

# Load the Whisper model
model = whisper.load_model("base")

# Transcribe audio file
result = model.transcribe("audio.mp3")

# Print the transcription
print(result["text"])
Ausgabe:
Hello everyone, welcome to today's meeting. We will discuss the project timeline and upcoming milestones.

Schritt 3: Vollständiges Python-Beispiel mit Fehlerbehandlung

Hier ist ein robusteres Beispiel mit ordentlicher 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)
        
        return result
    
    except Exception as e:
        print(f"Error during transcription: {str(e)}")
        return None

# Example usage
if __name__ == "__main__":
    audio_file = "sample_audio.mp3"
    result = transcribe_audio(audio_file, model_size="base")
    
    if result:
        print("\nTranscription:")
        print(result["text"])

Schritt 4: Erweitertes Beispiel mit Spracherkennung

Whisper kann die Sprache automatisch erkennen, Sie können sie aber auch angeben:
import whisper

model = whisper.load_model("base")

# Auto-detect language
result = model.transcribe("audio.mp3")
print(f"Detected language: {result['language']}")
print(f"Transcription: {result['text']}")

# Specify language explicitly
result_en = model.transcribe("audio.mp3", language="en")
result_zh = model.transcribe("audio.mp3", language="zh")

Schritt 5: Zeitstempel und Segmente abrufen

Whisper liefert detaillierte Segmentinformationen mit Zeitstempeln:
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("\nSegments with Timestamps:")
for segment in result["segments"]:
    start = segment["start"]
    end = segment["end"]
    text = segment["text"]
    print(f"[{start:.2f}s - {end:.2f}s] {text}")
Ausgabe:
Full Text:
Hello everyone, welcome to today's meeting. We will discuss the project timeline.

Segments with Timestamps:
[0.00s - 2.50s] Hello everyone, welcome to today's meeting.
[2.50s - 5.80s] We will discuss the project timeline.

Schritt 6: Audio ins Englische übersetzen

Whisper kann nicht-englische Sprache direkt ins Englische übersetzen:
import whisper

model = whisper.load_model("base")

# Translate to English
result = model.transcribe("spanish_audio.mp3", task="translate")

print("Translated text:")
print(result["text"])

Schritt 7: Mehrere Audiodateien verarbeiten

So transkribieren Sie mehrere Dateien im Batch:
import whisper
import os
from pathlib import Path

def batch_transcribe(audio_directory, model_size="base", output_dir="transcriptions"):
    """
    Transcribe all audio files in a directory.
    
    Args:
        audio_directory (str): Directory containing audio files
        model_size (str): Whisper model size
        output_dir (str): Directory to save transcriptions
    """
    # Create output directory
    os.makedirs(output_dir, exist_ok=True)
    
    # Load model once
    model = whisper.load_model(model_size)
    
    # Supported audio formats
    audio_extensions = ['.mp3', '.wav', '.m4a', '.flac', '.ogg']
    
    # Process each audio file
    audio_files = [
        f for f in os.listdir(audio_directory)
        if any(f.lower().endswith(ext) for ext in audio_extensions)
    ]
    
    for audio_file in audio_files:
        audio_path = os.path.join(audio_directory, audio_file)
        print(f"\nProcessing: {audio_file}")
        
        try:
            result = model.transcribe(audio_path)
            
            # Save transcription to file
            output_file = os.path.join(
                output_dir,
                Path(audio_file).stem + ".txt"
            )
            
            with open(output_file, "w", encoding="utf-8") as f:
                f.write(result["text"])
            
            print(f"✓ Saved: {output_file}")
            
        except Exception as e:
            print(f"✗ Error processing {audio_file}: {str(e)}")

# Example usage
batch_transcribe("audio_files/", model_size="base")

Schritt 8: Export ins SRT-Untertitelformat

Erzeugen Sie SRT-Untertitel aus Transkripten:
import whisper

def transcribe_to_srt(audio_path, output_path, model_size="base"):
    """
    Transcribe audio and save as SRT subtitle file.
    
    Args:
        audio_path (str): Path to audio file
        output_path (str): Path to save SRT file
        model_size (str): Whisper model size
    """
    model = whisper.load_model(model_size)
    result = model.transcribe(audio_path)
    
    # Generate SRT content
    srt_content = ""
    for i, segment in enumerate(result["segments"], start=1):
        start_time = format_timestamp(segment["start"])
        end_time = format_timestamp(segment["end"])
        text = segment["text"].strip()
        
        srt_content += f"{i}\n"
        srt_content += f"{start_time} --> {end_time}\n"
        srt_content += f"{text}\n\n"
    
    # Save SRT file
    with open(output_path, "w", encoding="utf-8") as f:
        f.write(srt_content)
    
    print(f"SRT file saved: {output_path}")

def format_timestamp(seconds):
    """Convert seconds to SRT timestamp format (HH:MM:SS,mmm)."""
    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}"

# Example usage
transcribe_to_srt("video.mp4", "subtitles.srt", model_size="base")

Vergleich der Whisper-Modellgrößen

Wählen Sie die passende Modellgröße für Ihre Anforderungen:
ModellParameterGeschwindigkeitGenauigkeitSpeicherEinsatzgebiet
tiny39M⭐⭐⭐⭐⭐⭐⭐~1GBSchnelles Testen, einfaches Audio
base74M⭐⭐⭐⭐⭐⭐⭐~1GBAllgemeine Nutzung
small244M⭐⭐⭐⭐⭐⭐⭐~2GBAusgewogene Leistung
medium769M⭐⭐⭐⭐⭐⭐⭐~5GBWenn hohe Genauigkeit nötig ist
large1550M⭐⭐⭐⭐⭐⭐~10GBBeste Genauigkeit, verrauschtes Audio

Bewährte Methoden für Whisper mit Python

1. Die richtige Modellgröße wählen

# Fast and lightweight
model = whisper.load_model("tiny")  # Good for testing

# Balanced
model = whisper.load_model("base")  # Good for most cases

# High accuracy
model = whisper.load_model("medium")  # For important transcriptions

2. 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=60000):
    """
    Transcribe long audio by splitting into chunks.
    
    Args:
        audio_path: Path to audio file
        chunk_length_ms: Length of each chunk in milliseconds
    """
    model = whisper.load_model("base")
    
    # Load audio
    audio = AudioSegment.from_file(audio_path)
    
    # Split into chunks
    chunks = []
    for i in range(0, len(audio), chunk_length_ms):
        chunks.append(audio[i:i + chunk_length_ms])
    
    # Transcribe each chunk
    full_text = []
    for i, chunk in enumerate(chunks):
        chunk_path = f"chunk_{i}.wav"
        chunk.export(chunk_path, format="wav")
        
        result = model.transcribe(chunk_path)
        full_text.append(result["text"])
        
        # Clean up chunk file
        os.remove(chunk_path)
    
    return " ".join(full_text)

3. GPU für schnellere Verarbeitung nutzen

Wenn Sie eine NVIDIA-GPU haben:
import whisper

# Whisper will automatically use GPU if available
model = whisper.load_model("base", device="cuda")

4. Sprache für bessere Genauigkeit angeben

# If you know the language, specify it
result = model.transcribe("audio.mp3", language="en")

Häufige Anwendungsfälle

Podcast-Transkription

import whisper

model = whisper.load_model("medium")
result = model.transcribe("podcast_episode.mp3")

# Save transcript
with open("podcast_transcript.txt", "w") as f:
    f.write(result["text"])

Meeting-Notizen

import whisper
from datetime import datetime

model = whisper.load_model("base")
result = model.transcribe("meeting_recording.mp3")

# Create formatted meeting notes
notes = f"""
Meeting Notes - {datetime.now().strftime('%Y-%m-%d')}
========================================

{result["text"]}
"""

with open("meeting_notes.txt", "w") as f:
    f.write(notes)

Video-Untertitel

import whisper

model = whisper.load_model("base")
result = model.transcribe("video.mp4")

# Generate VTT subtitle file
vtt_content = "WEBVTT\n\n"
for segment in result["segments"]:
    start = format_vtt_timestamp(segment["start"])
    end = format_vtt_timestamp(segment["end"])
    text = segment["text"].strip()
    vtt_content += f"{start} --> {end}\n{text}\n\n"

with open("subtitles.vtt", "w") as f:
    f.write(vtt_content)

Fehlerbehebung bei häufigen Problemen

Problem 1: FFmpeg nicht gefunden

Fehler: FileNotFoundError: ffmpeg
Lösung:
# Install FFmpeg
# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg

# Windows
# Download from ffmpeg.org and add to PATH

Problem 2: Nicht genug Speicher

Fehler: RuntimeError: CUDA out of memory
Lösung:
# Use a smaller model
model = whisper.load_model("tiny")  # Instead of "large"

# Or use CPU
model = whisper.load_model("base", device="cpu")

Problem 3: Langsame Verarbeitung

Lösungen:
  • kleineres Modell verwenden (tiny oder base)
  • GPU-Beschleunigung aktivieren
  • Audio in Chunks verarbeiten
  • Multiprocessing für Batch-Jobs nutzen

Leistungstipps

  1. GPU nutzen, wenn verfügbar – 10–50× schneller als CPU
  2. Passende Modellgröße wählen – „large“ nicht für einfache Aufgaben
  3. Audio vorverarbeiten – Stille entfernen, Lautstärke normalisieren
  4. Batch-Verarbeitung – Modell einmal laden, mehrere Dateien bearbeiten
  5. Threading – für I/O-lastige Vorgänge

Whisper Python im Vergleich mit anderen Lösungen

MerkmalWhisper PythonGoogle Speech-to-TextAssemblyAI
KostenKostenlos (lokal)Pro Minute bezahltPro Minute bezahlt
Offline
GenauigkeitHochHochHoch
EinrichtungMittelEinfachEinfach
Langes Audio
Mehrsprachig

Vollständiges Beispiel: produktionsreifes Skript

Hier ist ein vollständiges, produktionsreifes Beispiel:
#!/usr/bin/env python3
"""
Production-ready Whisper transcription script.
"""

import whisper
import argparse
import os
import json
from pathlib import Path
from datetime import datetime

def transcribe_file(
    audio_path,
    model_size="base",
    language=None,
    output_format="txt",
    output_dir=None
):
    """
    Transcribe an audio file with comprehensive output options.
    
    Args:
        audio_path: Path to audio file
        model_size: Whisper model size
        language: Language code (optional, auto-detected if None)
        output_format: Output format (txt, json, srt, vtt)
        output_dir: Output directory (default: same as audio file)
    """
    # Validate input file
    if not os.path.exists(audio_path):
        raise FileNotFoundError(f"Audio file not found: {audio_path}")
    
    # Set output directory
    if output_dir is None:
        output_dir = os.path.dirname(audio_path)
    os.makedirs(output_dir, exist_ok=True)
    
    # Load model
    print(f"Loading Whisper model: {model_size}")
    model = whisper.load_model(model_size)
    
    # Transcribe
    print(f"Transcribing: {audio_path}")
    transcribe_kwargs = {}
    if language:
        transcribe_kwargs["language"] = language
    
    result = model.transcribe(audio_path, **transcribe_kwargs)
    
    # Generate output filename
    base_name = Path(audio_path).stem
    output_path = os.path.join(output_dir, base_name)
    
    # Save based on format
    if output_format == "txt":
        with open(f"{output_path}.txt", "w", encoding="utf-8") as f:
            f.write(result["text"])
    
    elif output_format == "json":
        with open(f"{output_path}.json", "w", encoding="utf-8") as f:
            json.dump(result, f, indent=2, ensure_ascii=False)
    
    elif output_format == "srt":
        srt_content = generate_srt(result["segments"])
        with open(f"{output_path}.srt", "w", encoding="utf-8") as f:
            f.write(srt_content)
    
    elif output_format == "vtt":
        vtt_content = generate_vtt(result["segments"])
        with open(f"{output_path}.vtt", "w", encoding="utf-8") as f:
            f.write(vtt_content)
    
    print(f"✓ Transcription saved: {output_path}.{output_format}")
    print(f"  Language: {result['language']}")
    print(f"  Duration: {result['segments'][-1]['end']:.2f}s")
    
    return result

def generate_srt(segments):
    """Generate SRT subtitle content."""
    srt = ""
    for i, segment in enumerate(segments, start=1):
        start = format_timestamp(segment["start"])
        end = format_timestamp(segment["end"])
        text = segment["text"].strip()
        srt += f"{i}\n{start} --> {end}\n{text}\n\n"
    return srt

def generate_vtt(segments):
    """Generate VTT subtitle content."""
    vtt = "WEBVTT\n\n"
    for segment in segments:
        start = format_vtt_timestamp(segment["start"])
        end = format_vtt_timestamp(segment["end"])
        text = segment["text"].strip()
        vtt += f"{start} --> {end}\n{text}\n\n"
    return vtt

def format_timestamp(seconds):
    """Format timestamp for SRT."""
    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}"

def format_vtt_timestamp(seconds):
    """Format timestamp for VTT."""
    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}"

def main():
    parser = argparse.ArgumentParser(
        description="Transcribe audio files using OpenAI Whisper"
    )
    parser.add_argument("audio", help="Path to audio file")
    parser.add_argument(
        "--model",
        default="base",
        choices=["tiny", "base", "small", "medium", "large"],
        help="Whisper model size"
    )
    parser.add_argument(
        "--language",
        default=None,
        help="Language code (e.g., 'en', 'zh', 'es')"
    )
    parser.add_argument(
        "--output-format",
        default="txt",
        choices=["txt", "json", "srt", "vtt"],
        help="Output format"
    )
    parser.add_argument(
        "--output-dir",
        default=None,
        help="Output directory"
    )
    
    args = parser.parse_args()
    
    transcribe_file(
        args.audio,
        model_size=args.model,
        language=args.language,
        output_format=args.output_format,
        output_dir=args.output_dir
    )

if __name__ == "__main__":
    main()
Verwendung:
# Basic usage
python transcribe.py audio.mp3

# With options
python transcribe.py audio.mp3 --model medium --language en --output-format srt

# Save to specific directory
python transcribe.py audio.mp3 --output-dir ./transcriptions

Fazit

Dieser umfassende Leitfaden zu Whisper mit Python enthält alles, was Sie für den Einstieg in die Sprache-zu-Text-Transkription mit OpenAI Whisper brauchen. Ob Podcasts, Meetings oder Untertitel – Whisper bietet eine leistungsstarke, kostenlose Lösung, um Audio in Text umzuwandeln.
Wichtige Punkte:
  • Whisper ist kostenlos und Open Source
  • Unterstützt über 99 Sprachen
  • Funktioniert offline (ohne API-Aufrufe)
  • Hohe Genauigkeit für die meisten Anwendungsfälle
  • Einfache Integration in Python-Projekte
Für Produktionsfälle mit Echtzeit-Transkription oder API-Zugriff können Sie cloudbasierte Lösungen wie SayToWords in Betracht ziehen, die Whisper-basierte Transkription per API anbieten.

Bereit loszulegen? Installieren Sie Whisper und transkribieren Sie noch heute Ihre erste Audiodatei!

Jetzt kostenlos testen

Testen Sie jetzt unseren KI‑basierten Dienst für Sprache, Audio und Video. Sie erhalten nicht nur hochpräzise Sprach‑zu‑Text‑Transkription, mehrsprachige Übersetzung und intelligente Sprechertrennung, sondern auch automatische Untertitelgenerierung für Videos, intelligente Bearbeitung von Audio‑ und Videoinhalten sowie synchronisierte Audio‑/Bild‑Analyse. Damit decken Sie alle Szenarien ab – von Meeting‑Protokollen über Short‑Video‑Produktion bis hin zur Podcast‑Erstellung. Starten Sie noch heute Ihre kostenlose Testphase!

Sound zu Text OnlineSound zu Text KostenlosSound zu Text KonverterSound zu Text MP3Sound zu Text WAVSound zu Text mit ZeitstempelSprache zu Text für MeetingsSound to Text Multi LanguageSound zu Text UntertitelWAV in Text konvertierenStimme zu TextStimme zu Text OnlineSprache zu TextMP3 in Text konvertierenSprachaufnahme zu TextOnline SpracheingabeStimme zu Text mit ZeitstempelnStimme zu Text in EchtzeitStimme zu Text für lange AudioStimme zu Text für VideoSprache zu Text für YouTubeSprache zu Text für VideobearbeitungSprache zu Text für UntertitelSprache zu Text für PodcastsSprache zu Text für InterviewsInterview-Audio zu TextSprache zu Text für AufnahmenSprache zu Text für MeetingsSprache zu Text für VorlesungenSprache zu Text für NotizenStimme zu Text MehrsprachigStimme zu Text PräziseStimme zu Text SchnellPremiere Pro Stimme zu Text AlternativeDaVinci Stimme zu Text AlternativeVEED Stimme zu Text AlternativeInVideo Stimme zu Text AlternativeOtter.ai Stimme zu Text AlternativeDescript Stimme zu Text AlternativeTrint Stimme zu Text AlternativeRev Stimme zu Text AlternativeSonix Stimme zu Text AlternativeHappy Scribe Stimme zu Text AlternativeZoom Stimme zu Text AlternativeGoogle Meet Stimme zu Text AlternativeMicrosoft Teams Stimme zu Text AlternativeFireflies.ai Stimme zu Text AlternativeFathom Stimme zu Text AlternativeFlexClip Stimme zu Text AlternativeKapwing Stimme zu Text AlternativeCanva Stimme zu Text AlternativeSprache-zu-Text für lange AudioKI Sprache zu TextKostenlose Sprache zu TextSprache zu Text ohne WerbungSprache zu Text für lautes AudioSprache zu Text mit ZeitUntertitel aus Audio generierenPodcast-Transkription OnlineKundengespräche TranskribierenTikTok Sprache zu TextTikTok Audio zu TextYouTube Sprache zu TextYouTube Audio zu TextSprachnotiz zu TextWhatsApp-Sprachnachricht zu TextTelegram-Sprachnachricht zu TextDiscord-Anruf-TranskriptionTwitch-Sprache zu TextSkype-Sprache zu TextMessenger-Sprache zu TextLINE-Sprachnachricht zu TextVlogs in Text transkribierenPredigt-Audio in Text konvertierenSprache in Schrift umwandelnAudio in Text übersetzenAudio-Notizen in Text umwandelnSpracheingabeSpracheingabe für BesprechungenSpracheingabe für YouTubeSprechen statt TippenFreihändiges TippenStimme zu WörternSprache zu WörternSprache zu Text OnlineOnline Transcription SoftwareSprache zu Text für BesprechungenSchnelle Sprache zu TextReal Time Speech to TextLive Transcription AppSprache zu Text für TikTokTon zu Text für TikTokSprechen zu WörternSprache zu TextTalk to Text FreeTalk to Text OnlineTalk to Text for YouTubeTalk to Text for SubtitlesTalk to Text for Content CreatorsTalk to Text for MeetingsAudio zu TippenTon zu TextSprach-SchreibwerkzeugSprach-SchreibwerkzeugSprachdiktatRechtliche Transkriptions-ToolMedizinisches Diktier-ToolJapanische Audio-TranskriptionKoreanische Meeting-TranskriptionMeeting-Transkriptions-ToolMeeting-Audio zu TextVorlesung-zu-Text-KonverterVorlesungs-Audio zu TextVideo-zu-Text-TranskriptionUntertitel-Generator für TikTokCall-Center-TranskriptionReels Audio zu Text ToolMP3 in Text transkribierenWAV-Datei in Text transkribierenCapCut Sprache zu TextCapCut Sprache zu TextVoice to Text in EnglishAudio zu Text EnglischVoice to Text in SpanishVoice to Text in FrenchAudio zu Text FranzösischVoice to Text in GermanAudio zu Text DeutschVoice to Text in JapaneseAudio zu Text JapanischVoice to Text in KoreanAudio zu Text KoreanischVoice to Text in PortugueseVoice to Text in ArabicVoice to Text in ChineseVoice to Text in HindiVoice to Text in RussianWeb Voice Typing ToolVoice Typing Website