Vom “spanischen Dorf” zur eigenen KI-Transkription

  • Post author:
  • Post last modified:30. April 2025

Ein Erfahrungsbericht über Whisper, Core ML und jede Menge Aha-Momente


Inhaltsübersicht

  1. Warum ich eigentlich “nur schnell” eine Diktierlösung brauchte
  2. Whisper – ein Quantensprung in Open-Speech-AI
  3. Zwischenlösung: Whisper + PyTorch ≠ Mac-GPU
  4. Der große Umweg: CTranslate2, Metal und ein deplatzierter libiomp5
  5. Der Wendepunkt: whisper.cpp + Core ML
  6. Schritt-für-Schritt-Anleitung (kompakt)
  7. Modellgrößen, Genauigkeit & Geschwindigkeit
  8. Feintuning, Prompt-Engineering und Zukunftsblick
  9. Fazit: Was ich gelernt habe – und worauf du achten solltest

<a name=»warum-wollte-ich-das»></a>

1. Warum ich eigentlich “nur schnell” eine Diktierlösung brauchte

Vor genau einem Jahr wusste ich nicht, was ein Decoder Cross-Attention Layer ist. Mir reichte ein klassischer Diktier-Workflow: iPhone aufnehmen → Dropbox → Tippen.
Doch je länger die Audios wurden (Meetings, Podcast-Schnipsel, Schulungs­videos), desto lauter wurde der Wunsch nach automatischer Transkription – lokal, offline, privacy-freundlich, und möglichst schnell.

Cloud-Anbieter?

  • ✔ Einfach, ❌ Dauerhaft teuer, ❌ Daten liegen auf fremden Servern.

Open-Source?

  • ✔ Keine Kosten, ✔ volle Kontrolle, ❌ kompliziert (dachte ich).

Ende 2023 stolperte ich über OpenAI Whisper – ein neuronales Modell, das in einer Datei steckt und “alles kann”: diarize, übersetzen, multi-lingual, offline. Klingt magisch? Ist es auch – aber der Weg dahin war kurvig.


<a name=»whisper-überblick»></a>

2. Whisper – ein Quantensprung in Open-Speech-AI

Als OpenAI im September 2022 Whisper veröffentlichte, war das Echo enorm:

FeatureVor WhisperWhisper
Multi-LingualExtra-Modelle je Sprache1 Modell für 99 Sprachen
Open-SourceKaldi, ESPnet (komplex)Plug-and-Play
Hardwaremeist NVIDIA GPUsCPU-fähig
Qualität (WER)10–25 %< 5 % (base)

Danach setzte ein Wettrennen ein:
→ WhisperX mit word-level timestamps,
→ Faster-Whisper (CTranslate2-Backend),
→ whisper.cpp (C++ + GGML, 2023),
→ Core-ML-Konverter von Apple (WWDC 23).

Jedes Projekt adressierte ein anderes Nadelöhr – Geschwindigkeit, RAM, GPU-Offload. Ich testete alles.


<a name=»pytorch-probleme»></a>

3. Zwischenlösung: Whisper + PyTorch ≠ Mac-GPU

Mein erster Prototyp war ein Flask-Server:

bashKopierenBearbeitenpip install openai-whisper flask soundfile
python app.py

Er lief – aber nur auf CPU.
PyTorchs MPS-Backend (Metal) hatte 2024 noch keine Sparse-Tensor-Operatoren → Ladefehler:

cppKopierenBearbeitenNotImplementedError: aten::_sparse_coo_tensor ...

Work-around: CUDA-GPU. Pech für meinen M-Mac.
Ich suchte also eine GPU-freie Beschleunigung.


<a name=»ctranslate2-odyssee»></a>

4. Der große Umweg: CTranslate2, Metal und ein deplatzierter libiomp5

Faster-Whisper & CTranslate2

  • ✅ Schneller als PyTorch (INT8-Quantisierung)
  • ✅ Metal-Backend seit 2024
  • ❌ PyPI-Wheels ohne Metal
  • ❌ Selbst-Build fragt nach Intel OpenMP (libiomp5.dylib)

Lösungsidee: brew install libomp + Symlink → ging, aber nur nach stundenlangem CMake-Gefrickel.

Am Ende hatte ich zwar ein funktionierendes Metal-INT8-Binary, aber der Weg war absurd aufwendig.


<a name=»whispercpp-coreml»></a>

5. Der Wendepunkt: whisper.cpp + Core ML

Im Februar 2025 stieß ich auf whisper.cpp:

bashKopierenBearbeitengit clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
WHISPER_METAL=1 make -j8

Fertig! 2 MB-Binary, Core-ML-Kernels im Gepäck.
Ein Test:

bashKopierenBearbeiten./build/bin/whisper-cli \
  -m models/ggml-tiny.bin \
  -l de \
  -f newrec.wav -otxt -of out

5 s Audio in 240 ms 🤯 (20× Echtzeit)

Damit war klar: CLI + Flask + whisper.cpp = mein Ziel-Setup.


<a name=»schritt-anleitung»></a>

6. Schritt-für-Schritt-Anleitung (kompakt)

bashKopierenBearbeiten# 1. Binaries bauen
git clone https://github.com/ggerganov/whisper.cpp && cd whisper.cpp
WHISPER_METAL=1 make -j$(sysctl -n hw.logicalcpu)

# 2. Modell laden
curl -L -o models/ggml-small.bin \
     https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin

# 3. Test
build/bin/whisper-cli -m models/ggml-small.bin -l de -f test.wav -otxt -of out
cat out.txt

Integration in Flasksubprocess.run() mit whisper-cli, Ergebnis aus out.txt einlesen.


<a name=»modelle»></a>

7. Modellgrößen, Genauigkeit & Geschwindigkeit

ModellWER (de)RAMZeit / min Audio (M4)
tiny11 %0.5 GB3 s
base8 %1 GB6 s
small6 %2 GB12 s
medium4 %5 GB30 s
large3 %8 GB80 s

(gemessen mit whisper.cpp v1.7, Core-ML INT8)


<a name=»feintuning-und-ausblick»></a>

8. Feintuning, Prompt-Engineering und Zukunftsblick

TechnikAufwandGewinn
Beam Size 10+0 s+0.5 WER
Prompt (“Vortrag über KI …”)0 sbessere Terminologie
VAD + Segment-Merge1 h Skriptweniger “äh”, “hmm”
Custom Fine-Tune (100 h)GPU‐Wochen-1 WER

Core-ML Roadmap: Apple arbeitet an inference compiling (WWDC 25?).
Dann könnten large-Modelle in Echtzeit auf der Neural-Engine laufen.


<a name=»fazit»></a>

9. Fazit: Was ich gelernt habe

  1. Open-Source ist ein Kaninchenbau, aber am Ende siegt die Flexibilität.
  2. whisper.cpp + Core ML ist derzeit der sweet spot für M-Macs.
  3. Es reicht, 2 Dateien zu deployen: Binary + Modell.
  4. “Spanische Dörfer” werden begehbar, sobald man sie ausprobiert statt nachliest.
  5. In einem Jahr kann man vom Transkript-Laien zum “Edge-AI-Ops-Engineer” wachsen – Learning by Doing.

TL;DR

  • Wir haben einen Flask-Server gebaut, der Audio in Sekunden auf der Neural-Engine transkribiert.
  • Von PyTorch-MPS-Frust ging es über CTranslate2-Umwege zu whisper.cpp-Euphorie.
  • Modell wechseln? → einfach andere ggml-*.bin einwerfen.
  • Feintuning? → meist nicht nötig; Prompt-Engineering reicht.

Heute nutze ich die Lösung täglich: Meeting-Aufnahmen, Podcast-Rohschnitte, sogar spontane Gedanken-Notizen.
Vor einem Jahr hatte ich keine Ahnung von CMake, Metal oder Beam-Search – jetzt läuft auf meinem MacBook Air eine Offline-Babel-Fisch-Maschine.

Und das Beste: Alles ist Open-Source – also: Klonen, bauen, staunen!