Wortgenaues Audio-Highlighting beim Mitlesen #12

Open
opened 2026-04-23 20:49:53 +02:00 by tobias · 0 comments
Owner

Ziel

Beim Abspielen eines Transkripts soll jedes Wort einzeln hervorgehoben werden, synchron zur Audio-Wiedergabe — wie bei Karaoke oder Apple Music Lyrics.

Voraussetzung

Wort-Level-Timestamps pro Episode. Die aktuellen SRTs haben nur Satz-Level-Timestamps (3–8 Sekunden pro Block). Für wortgenaues Highlighting brauchen wir Timestamps pro Wort (~200ms Granularität).

Umsetzung

Phase 1: Wort-Timestamps generieren

  • Batch-Neutranskription aller 19 NEU-DENKEN-Episoden + 96 LdN-Episoden mit mlx-whisper (bereits installiert)
  • Output-Format: JSON mit word-level Timestamps ({"word": "Wachstum", "start": 12.34, "end": 12.67})
  • Ergebnis in DB speichern: neue Tabelle words(paragraph_id, idx, word, start_time, end_time)

Phase 2: Frontend

  • Jedes Wort als <span data-start="..." data-end="..."> rendern
  • ontimeupdate vergleicht currentTime mit Wort-Timestamps
  • CSS-Klasse .word-active für aktuelles Wort (z.B. Hintergrund-Highlight)
  • Smooth Auto-Scroll bleibt wie bisher auf Absatz-Ebene

Aufwand

  • Transkription: ~4–6 Stunden Rechenzeit auf Mac Mini (M4, mlx-whisper)
  • Frontend: ~200 Zeilen JS + CSS
  • DB-Schema + Import-Script

Hardware

  • Mac Mini M-Series, 16 GB RAM, mlx-whisper 0.4.3 + mlx-metal 0.29.3
## Ziel Beim Abspielen eines Transkripts soll jedes Wort einzeln hervorgehoben werden, synchron zur Audio-Wiedergabe — wie bei Karaoke oder Apple Music Lyrics. ## Voraussetzung Wort-Level-Timestamps pro Episode. Die aktuellen SRTs haben nur Satz-Level-Timestamps (3–8 Sekunden pro Block). Für wortgenaues Highlighting brauchen wir Timestamps pro Wort (~200ms Granularität). ## Umsetzung ### Phase 1: Wort-Timestamps generieren - Batch-Neutranskription aller 19 NEU-DENKEN-Episoden + 96 LdN-Episoden mit mlx-whisper (bereits installiert) - Output-Format: JSON mit word-level Timestamps (`{"word": "Wachstum", "start": 12.34, "end": 12.67}`) - Ergebnis in DB speichern: neue Tabelle `words(paragraph_id, idx, word, start_time, end_time)` ### Phase 2: Frontend - Jedes Wort als `<span data-start="..." data-end="...">` rendern - `ontimeupdate` vergleicht `currentTime` mit Wort-Timestamps - CSS-Klasse `.word-active` für aktuelles Wort (z.B. Hintergrund-Highlight) - Smooth Auto-Scroll bleibt wie bisher auf Absatz-Ebene ### Aufwand - Transkription: ~4–6 Stunden Rechenzeit auf Mac Mini (M4, mlx-whisper) - Frontend: ~200 Zeilen JS + CSS - DB-Schema + Import-Script ## Hardware - Mac Mini M-Series, 16 GB RAM, mlx-whisper 0.4.3 + mlx-metal 0.29.3
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: tobias/podcast-mindmap#12
No description provided.