
AI Video-Transkription
KI-gestützte Untertitelung und Barrierefreiheit für E-Commerce-Videoinhalte
PROJEKT
AI Video-Transkription
TECHNOLOGIEN
LINKS
Herausforderung
In meiner Rolle als Entwickler bei einem großen Online-Händler stand ich vor der Herausforderung, die Barrierefreiheit unserer Produktvideos durch Transkription und Untertitelung zu verbessern.
Der Umfang des Projekts war erheblich: Tausende von Produktvideos mussten identifiziert, heruntergeladen und mit präzisen Untertiteln versehen werden. Eine manuelle Bearbeitung wäre viel zu zeit- und kostenintensiv gewesen. Zudem waren die Videodateien nicht zentral organisiert, sondern mussten erst lokalisiert werden.
Zusätzliche Herausforderungen umfassten: • Das Fehlen einer zentralen Videoübersicht oder klaren Struktur der Videospeicherorte • Cloudflare-Schutzmaßnahmen, die automatisierte Downloads erschwerten • Die Notwendigkeit wortgenauer Untertitel für optimale Barrierefreiheit • Benötigte Anpassungen für Markennamen und pharmazeutische Fachbegriffe
Lösung
Ich entwickelte eine durchgängige Pipeline, die das Problem in mehreren Schritten löste:
**1. Crawler für Videoidentifikation** Durch Analyse der Websitestruktur stellte ich fest, dass Produktvideos nach dem Muster [PZN].mp4 benannt waren. Ich entwickelte einen Python-Crawler, der systematisch alle pharmazeutischen Zentralnummern überprüfte und Videos unter der URL-Struktur apodiscounter.de/videos/[PZN].mp4 identifizierte. Von 6.600 getesteten PZNs fand der Crawler 1.045 Videos.
**2. Sequentielles Download-Management** Um Cloudflare-Schutzmaßnahmen zu umgehen, implementierte ich ein sequentielles Download-Script mit verzögerten Anfragen, rotierenden User-Agents und Session-Management. Dies ermöglichte das zuverlässige Herunterladen aller Videos ohne IP-Sperren zu riskieren.
**3. Audio-Extraktion und KI-Transkription** Mit FFmpeg extrahierte ich die Audiospuren aus den Videos. Für die Transkription nutzte ich einen spezialisierten Fork von OpenAI's Whisper (whisper-timestamped), der wortgenaue Zeitstempel liefert – eine Funktion, die sonst nur in der kostenpflichtigen OpenAI API verfügbar ist.
**4. Generierung von Untertiteldateien** Die wortgenauen Transkriptionen wandelte ich in SRT- und VTT-Formate um. Dabei implementierte ich einen intelligenten Algorithmus zur Segmentierung der Untertitel, der sicherstellte, dass sie optimal auf den Bildschirm passen und synchron mit dem Gesprochenen erscheinen.
**5. Automatische Thumbnail-Generierung** Mit OpenCV analysierte ich die Videos, um qualitativ hochwertige Frames als Thumbnails zu extrahieren. Der Algorithmus berücksichtigte Faktoren wie Farbvielfalt und Detailreichtum, um sicherzustellen, dass die Thumbnails repräsentativ und ansprechend sind.
Code-Beispiele
Video-Crawler basierend auf pharmazeutischen Zentralnummern (PZN)
1# PZN-basierter Video-Crawler
2import requests
3from concurrent.futures import ThreadPoolExecutor
4import time
5
6def check_video_exists(pzn):
7 """Prüft, ob ein Video für eine bestimmte PZN existiert"""
8 url = f"https://www.apodiscounter.de/videos/{pzn}.mp4"
9 try:
10 # Head-Request statt GET für Effizienz
11 response = requests.head(url, timeout=5)
12 if response.status_code == 200:
13 print(f"Video gefunden: {url}")
14 return url
15 return None
16 except Exception as e:
17 print(f"Fehler bei {pzn}: {str(e)}")
18 return None
19
20# Liste aller PZNs laden
21with open("pzn_list.txt", "r") as f:
22 pzn_list = [line.strip() for line in f.readlines()]
23
24# Sequentiell prüfen (um Anti-Bot-Maßnahmen zu vermeiden)
25found_videos = []
26for pzn in pzn_list:
27 result = check_video_exists(pzn)
28 if result:
29 found_videos.append(result)
30 time.sleep(1) # Pause zwischen Anfragen
31
32print(f"Insgesamt {len(found_videos)} Videos gefunden")
33with open("video_urls.txt", "w") as f:
34 for url in found_videos:
35 f.write(f"{url}\n")
Wortgenaue Transkription mit Whisper und Erstellung von Untertiteln
1# Whisper-Transkription mit wortgenauen Timestamps
2import whisper_timestamped as whisper
3import ffmpeg
4import os
5
6def extract_audio(video_path, audio_path):
7 """Extrahiert die Audiospur aus einem Video"""
8 (
9 ffmpeg
10 .input(video_path)
11 .output(audio_path, acodec='mp3', ac=1, ar='16k')
12 .overwrite_output()
13 .run(quiet=True)
14 )
15 return os.path.exists(audio_path)
16
17def transcribe_with_timestamps(audio_path):
18 """Transkribiert Audio mit Wort-Timestamps"""
19 model = whisper.load_model("medium", device="cpu")
20 result = whisper.transcribe(model, audio_path, language="de")
21 return result
22
23def generate_vtt(result, output_path):
24 """Erstellt Web-VTT Untertitel mit wortgenauen Timestamps"""
25 with open(output_path, "w", encoding="utf-8") as vtt:
26 vtt.write("WEBVTT\n\n")
27
28 for segment in result["segments"]:
29 # Zeitstempel formatieren
30 start = format_timestamp(segment["start"])
31 end = format_timestamp(segment["end"])
32
33 # Segment-Text und Zeitstempel schreiben
34 vtt.write(f"{start} --> {end}\n")
35 vtt.write(f"{segment['text'].strip()}\n\n")
36
37 return output_path
38
39def format_timestamp(seconds):
40 """Formatiert Sekunden in VTT-Zeitstempelformat"""
41 hours = int(seconds / 3600)
42 minutes = int((seconds % 3600) / 60)
43 secs = seconds % 60
44 return f"{hours:02d}:{minutes:02d}:{secs:06.3f}"
Ergebnisse
Die entwickelte Pipeline erzielte beeindruckende Ergebnisse:
• Erfolgreiche Identifikation und Verarbeitung von 1.045 Produktvideos • Automatische Erstellung präziser Untertitel mit einer geschätzten Fehlerquote von unter 5% bei normalem Text • Signifikante Verbesserung der Barrierefreiheit für hörgeschädigte Kunden • Enorme Zeit- und Kostenersparnis im Vergleich zu einer manuellen Transkription • Wiederverwendbare Pipeline, die für neue Produktvideos eingesetzt werden kann
Besonders hervorzuheben ist die Qualität der automatisch generierten Untertitel und die Präzision der Wort-Timings, die ein synchrones Leseerlebnis ermöglichen. Die einzige Einschränkung lag bei der Erkennung spezieller Markennamen und Fachbegriffe, die in zukünftigen Versionen durch angepasste Wörterbücher verbessert werden könnte.
Ende-zu-Ende-Workflow: Von der PZN-basierten Video-Identifikation bis zur fertigen Untertiteldatei
Ein Produktvideo mit wortgenauen Untertiteln verbessert die Barrierefreiheit für hörgeschädigte Nutzer