Whisper Python-voorbeeld: complete gids voor spraak-naar-teksttranscriptie

Whisper Python-voorbeeld: complete gids voor spraak-naar-teksttranscriptie

Eric King

Eric King

Author


Whisper Python-voorbeeld: complete gids voor spraak-naar-teksttranscriptie

OpenAI Whisper behoort tot de krachtigste open-source spraakherkenningsmodellen die er vandaag zijn. In deze uitgebreide gids leert u hoe u Whisper met Python gebruikt om audiobestanden met hoge nauwkeurigheid naar tekst te transcriberen.
Deze tutorial is geschikt voor:
  • Ontwikkelaars die spraak-naar-tekstfuncties bouwen
  • Data scientists die met audio werken
  • Iedereen die een volledig Whisper Python-voorbeeld zoekt

Wat is OpenAI Whisper?

Whisper is een automatisch spraakherkenningssysteem (ASR) getraind op 680.000 uur meertalige audio. Het kan:
  • Spraak transcriberen in 99+ talen
  • Automatisch taal detecteren
  • Spraak naar het Engels vertalen
  • Ruis en accenten verwerken
  • Lange audiobestanden verwerken

Vereisten

Voordat u begint, zorg dat u het volgende hebt:
  • Python 3.8+ geïnstalleerd
  • de pakketbeheerder pip
  • FFmpeg geïnstalleerd (voor audiobewerking)
  • (Optioneel) NVIDIA-GPU voor snellere verwerking

Stap 1: Whisper installeren

Installeer het OpenAI Whisper-pakket met pip:
pip install openai-whisper

FFmpeg installeren

macOS (met Homebrew):
brew install ffmpeg
Ubuntu/Debian:
sudo apt update
sudo apt install ffmpeg
Windows: Download FFmpeg van ffmpeg.org en voeg het toe aan uw PATH.

Stap 2: Basis Whisper Python-voorbeeld

Hier is een eenvoudig Python-script om een audiobestand te transcriberen:
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"])
Uitvoer:
Hello everyone, welcome to today's meeting. We will discuss the project timeline and upcoming milestones.

Stap 3: Volledig Python-voorbeeld met foutafhandeling

Hier is een robuuster voorbeeld met goede foutafhandeling:
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"])

Stap 4: Geavanceerd voorbeeld met taaldetectie

Whisper kan de taal automatisch detecteren, maar u kunt deze ook opgeven:
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")

Stap 5: Tijdstempels en segmenten ophalen

Whisper levert gedetailleerde segmentinformatie met tijdstempels:
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}")
Uitvoer:
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.

Stap 6: Audio naar het Engels vertalen

Whisper kan niet-Engelse spraak direct naar het Engels vertalen:
import whisper

model = whisper.load_model("base")

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

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

Stap 7: Meerdere audiobestanden verwerken

Zo transcribeert u meerdere bestanden in 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")

Stap 8: Exporteren naar SRT-ondertitelindeling

Maak SRT-ondertitelbestanden op basis van transcripties:
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")

Vergelijking van Whisper-modelgroottes

Kies de juiste modelgrootte op basis van uw behoeften:
ModelParametersSnelheidNauwkeurigheidGeheugenGebruiksscenario
tiny39M⭐⭐⭐⭐⭐⭐⭐~1GBSnel testen, eenvoudige audio
base74M⭐⭐⭐⭐⭐⭐⭐~1GBAlgemeen gebruik
small244M⭐⭐⭐⭐⭐⭐⭐~2GBGebalanceerd
medium769M⭐⭐⭐⭐⭐⭐⭐~5GBHoge nauwkeurigheid nodig
large1550M⭐⭐⭐⭐⭐⭐~10GBBeste nauwkeurigheid, ruis

Best practices voor Whisper met Python

1. De juiste modelgrootte kiezen

# 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 audiobestanden verwerken

Voor zeer lange audiobestanden kunt u segmenten (chunks) gebruiken:
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 gebruiken voor snellere verwerking

Als u een NVIDIA-GPU hebt:
import whisper

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

4. Taal opgeven voor betere nauwkeurigheid

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

Veelvoorkomende use cases

Podcasttranscriptie

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"])

Vergadernotities

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-ondertitels

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)

Probleemoplossing bij veelvoorkomende issues

Probleem 1: FFmpeg niet gevonden

Fout: FileNotFoundError: ffmpeg
Oplossing:
# Install FFmpeg
# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg

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

Probleem 2: onvoldoende geheugen

Fout: RuntimeError: CUDA out of memory
Oplossing:
# Use a smaller model
model = whisper.load_model("tiny")  # Instead of "large"

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

Probleem 3: trage verwerking

Oplossingen:
  • Gebruik een kleiner model (tiny of base)
  • Schakel GPU-acceleratie in
  • Verwerk audio in segmenten
  • Gebruik multiprocessing voor batchtaken

Prestatietips

  1. Gebruik een GPU indien beschikbaar — 10-50× sneller dan CPU
  2. Kies een passende modelgrootte — gebruik "large" niet voor eenvoudige taken
  3. Preprocess audio — stilte verwijderen, volume normaliseren
  4. Batchverwerking — model één keer laden, meerdere bestanden verwerken
  5. Threading — voor I/O-gebonden bewerkingen

Whisper Python versus andere oplossingen

KenmerkWhisper PythonGoogle Speech-to-TextAssemblyAI
KostenGratis (lokaal)Betaald per minuutBetaald per minuut
Offline
NauwkeurigheidHoogHoogHoog
InstallatieGemiddeldEenvoudigEenvoudig
Lange audio
Meertalig

Volledig voorbeeld: productieklaar script

Hier is een volledig, productieklaar voorbeeld:
#!/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()
Gebruik:
# 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

Conclusie

Deze uitgebreide gids met Whisper Python-voorbeelden bevat alles wat u nodig hebt om te starten met spraak-naar-teksttranscriptie met OpenAI Whisper. Of u nu podcasts, vergaderingen transcribeert of ondertitels maakt: Whisper biedt een krachtige, gratis oplossing om audio naar tekst te zetten.
Belangrijkste punten:
  • Whisper is gratis en open source
  • Ondersteunt 99+ talen
  • Werkt offline (geen API-aanroepen nodig)
  • Hoge nauwkeurigheid voor de meeste use cases
  • Eenvoudig te integreren in Python-projecten
Voor productieomgevingen waarin realtime transcriptie of API-toegang nodig is, kunt u cloudoplossingen zoals SayToWords overwegen, met Whisper-gestuurde transcriptie via API.

Klaar om te beginnen? Installeer Whisper en transcribeer vandaag nog uw eerste audiobestand.

Probeer het nu gratis

Probeer nu onze AI‑oplossing voor spraak, audio en video. Je profiteert niet alleen van zeer nauwkeurige spraak‑naar‑tekst‑transcriptie, meertalige vertaling en slimme sprekerherkenning, maar ook van automatische ondertitelgeneratie voor video, intelligente audio‑ en videobewerking en gesynchroniseerde audio‑visuele analyse. Het dekt alle scenario’s: vergaderverslagen, short‑video creatie, podcastproductie en meer. Start vandaag nog je gratis proefperiode!

Geluid naar Tekst OnlineGeluid naar Tekst GratisGeluid naar Tekst ConverterGeluid naar Tekst MP3Geluid naar Tekst WAVGeluid naar Tekst met TijdstempelsSpraak naar tekst voor vergaderingenSound to Text Multi LanguageGeluid naar Tekst OndertitelsWAV naar tekst converterenStem naar TekstStem naar Tekst OnlineSpraak naar TekstMP3 naar Tekst ConverterenSpraakopname naar tekst converterenOnline SpraaktypenStem naar Tekst met TijdstempelsStem naar Tekst in RealtimeStem naar Tekst voor Lange AudioStem naar Tekst voor VideoSpraak naar Tekst voor YouTubeSpraak naar Tekst voor VideobewerkingSpraak naar Tekst voor OndertitelsSpraak naar Tekst voor PodcastsSpraak naar Tekst voor InterviewsInterview Audio naar TekstSpraak naar Tekst voor OpnamesSpraak naar Tekst voor VergaderingenSpraak naar Tekst voor CollegesSpraak naar Tekst voor NotitiesStem naar Tekst MeertaligStem naar Tekst NauwkeurigStem naar Tekst SnelPremiere Pro Stem naar Tekst AlternatiefDaVinci Stem naar Tekst AlternatiefVEED Stem naar Tekst AlternatiefInVideo Stem naar Tekst AlternatiefOtter.ai Stem naar Tekst AlternatiefDescript Stem naar Tekst AlternatiefTrint Stem naar Tekst AlternatiefRev Stem naar Tekst AlternatiefSonix Stem naar Tekst AlternatiefHappy Scribe Stem naar Tekst AlternatiefZoom Stem naar Tekst AlternatiefGoogle Meet Stem naar Tekst AlternatiefMicrosoft Teams Stem naar Tekst AlternatiefFireflies.ai Stem naar Tekst AlternatiefFathom Stem naar Tekst AlternatiefFlexClip Stem naar Tekst AlternatiefKapwing Stem naar Tekst AlternatiefCanva Stem naar Tekst AlternatiefSpraak naar Tekst voor Lange AudioAI Spraak naar TekstGratis Spraak naar TekstSpraak naar Tekst zonder ReclameSpraak naar Tekst voor Lawaaierige AudioSpraak naar Tekst met TijdOndertitels Genereren uit AudioPodcast Transcriptie OnlineKlantgesprekken TranscriberenTikTok Stem naar TekstTikTok Audio naar TekstYouTube Spraak naar TekstYouTube Audio naar TekstSpraakmemo naar TekstWhatsApp Spraakbericht naar TekstTelegram Spraakbericht naar TekstDiscord Oproep TranscriptieTwitch Spraak naar TekstSkype Spraak naar TekstMessenger Spraak naar TekstLINE Spraakbericht naar TekstVlogs naar Tekst TranscribenSermoen Audio naar Tekst ConverterenSpraak naar Schrijven ConverterenAudio naar Tekst VertalenAudio Notities naar Tekst ConverterenSpraak TypenSpraak Typen voor VergaderingenSpraak Typen voor YouTubeSpreek om te TypenHandenvrij TypenStem naar WoordenSpraak naar WoordenSpraak naar Tekst OnlineOnline Transcription SoftwareSpraak naar Tekst voor VergaderingenSnelle Spraak naar TekstReal Time Speech to TextLive Transcription AppSpraak naar Tekst voor TikTokGeluid naar Tekst voor TikTokPraten naar WoordenSpraak naar TekstTalk to Text FreeTalk to Text OnlineTalk to Text for YouTubeTalk to Text for SubtitlesTalk to Text for Content CreatorsTalk to Text for MeetingsAudio naar TypenGeluid naar TekstSpraak SchrijftoolSpraak SchrijftoolSpraakdicteeJuridische Transcriptie ToolMedische Dictatie ToolJapanse Audio TranscriptieKoreaanse Meeting TranscriptieMeeting Transcriptie ToolMeeting Audio naar TekstCollege naar Tekst ConverterCollege Audio naar TekstVideo naar Tekst TranscriptieOndertitel Generator voor TikTokCallcenter TranscriptieReels Audio naar Tekst ToolMP3 naar Tekst TranscriberenWAV-bestand naar tekst transcriberenCapCut Spraak naar TekstCapCut Spraak naar TekstVoice to Text in EnglishAudio naar Tekst EngelsVoice to Text in SpanishVoice to Text in FrenchAudio naar Tekst FransVoice to Text in GermanAudio naar Tekst DuitsVoice to Text in JapaneseAudio naar Tekst JapansVoice to Text in KoreanAudio naar Tekst KoreaansVoice 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