
Funktionen
- Automatisches Scrollen – Das Transkript hebt die aktuelle Zeile automatisch hervor und scrollt dorthin
- Klicken zum Springen – Klicken Sie auf eine beliebige Zeile des Transkripts, um zu diesem Moment im Video zu springen
- Verschiebbares Fenster – Positionieren Sie das Transkript an einer beliebigen Stelle auf dem Bildschirm (nur Desktop)
- Fenstergröße anpassen – Passen Sie die Größe des Transkriptfensters mit der Maus oder der Tastatur an
- Ziehen mit der Tastatur – Verwenden Sie die Pfeiltasten, um das Transkriptfenster zu verschieben (Taste „D“ zum Umschalten)
- Tastatur-Größenänderungsmodus – Verwenden Sie die Pfeiltasten, um die Größe des Transkriptfensters anzupassen (Taste R zum Umschalten)
- Einstellungsmenü – Konfigurieren Sie den Zieh- und Größenänderungsmodus
- Mobilgeräte-Optimierung – Passt sich mit optimiertem Layout an mobile Bildschirme (< 768px) an
- Vollbildunterstützung – Das Transkript wird im Vollbildmodus intelligent neu positioniert
- Suchen & Lesen – Ideal für Barrierefreiheit und Sprachenlernen
Schnellstart
Transkript aktivieren
<video data-vidply data-transcript="true" data-transcript-button="true">
<source src="video.mp4" type="video/mp4">
<track kind="captions" src="captions.vtt" srclang="en" label="English">
</video>
<script type="module">
import Player from './dist/prod/vidply.esm.min.js';
</script>
Das war's schon! Die Transkript-Schaltfläche erscheint in der Steuerleiste.
Konfigurationsoptionen
Über JavaScript
const player = new Player('#video', {
transcript: true, // Enable transcript feature
transcriptButton: true, // Show transcript button in controls
transcriptPosition: 'external' // Position mode (currently only 'external')
});
Über Datenattribute
<video
data-vidply
data-transcript="true"
data-transcript-button="true"
src="video.mp4"
>
<track kind="captions" src="captions.vtt" srclang="en" label="English">
</video>
So funktioniert es
Die Transkriptionsfunktion führt automatisch folgende Schritte aus:
- Erkennt Untertitel-Spuren in Ihrem Video
- Lädt den VTT-Cue-Text (WebVTT)
- Erstellt ein interaktives, scrollbares Fenster
- Die aktuelle Zeile basierend auf der Videowiedergabezeit hervorhebt
- Scrollt automatisch, um die aktuelle Zeile sichtbar zu halten
API-Methoden
Transkript anzeigen/ausblenden
const player = new Player('#video', {
transcript: true,
transcriptButton: true
});
// Show transcript window
player.transcriptManager.showTranscript();
// Hide transcript window
player.transcriptManager.hideTranscript();
// Toggle transcript visibility
player.transcriptManager.toggleTranscript();
Status prüfen
// Check if transcript is visible
if (player.transcriptManager.isVisible) {
console.log('Transcript is showing');
}
Programmgesteuerte Steuerung
// Get transcript entries
console.log(player.transcriptManager.transcriptEntries);
// Get current active entry
console.log(player.transcriptManager.currentActiveEntry);
Benutzerinteraktion
Zum Suchen klicken
Benutzer können auf eine beliebige Zeile des Transkripts klicken, um zu diesem Zeitpunkt zu springen:
// This happens automatically, but you can listen for it
player.on('timeupdate', (time) => {
console.log('User jumped to:', time);
});
Ziehen und Größe ändern (Desktop)
Auf dem Desktop (>= 768px) können Benutzer:
Ziehmodus:
- D-Taste – Tastatur-Ziehmodus umschalten
- Pfeiltasten – Fenster in 10-Pixel-Schritten verschieben (Umschalt = 50 Pixel)
- Mausziehen – Ziehen Sie die Kopfzeile des Transkripts, um die Position zu ändern
- Home-Taste – Zur Mitte zurücksetzen
- Esc-Taste – Drag-Modus beenden
Größenänderungsmodus:
- R-Taste – Umschalten zum Größenänderungsmodus über die Tastatur
- Pfeiltasten – Fenstergröße in 10-Pixel-Schritten ändern (Umschalt = 50 Pixel)
- Größenänderung mit der Maus – Zieh die Größenänderungsgriffe an den Fensterrändern
- Esc-Taste – Größenänderungsmodus beenden
Einstellungsmenü:
- Klicken Sie auf das Einstellungssymbol (⚙️) in der Kopfzeile des Transkripts
- Ziehmodus und Größenänderungsmodus umschalten
- Schließen Sie das Transkriptfenster
Verhalten auf Mobilgeräten
Auf Mobilgeräten (< 768px Breakpoint):
- Das Transkript wird unterhalb des Videoplayers angezeigt
- Im Dokumentfluss positioniert (nicht verschiebbar oder in der Größe veränderbar)
- Optimiert für das Scrollen und Lesen
- Mindestbreite: 300px
Positionierungsmodi
Desktop (Nicht-Vollbild)
- Wird neben dem Videoplayer angezeigt
- Kann an jede beliebige Position gezogen werden
- Höhe entspricht der Video-Höhe
Vollbildmodus
- Befindet sich in der rechten unteren Ecke
- Schwebt über dem Video
- Lässt Platz für Steuerelemente
Mobil
- Unterhalb des Videos und der Steuerelemente
- Volle Breite
- Maximale Höhe von 400px
- Teil des Seitenflusses
Tastaturkürzel
Globale Tastenkombinationen (Player im Fokus)
| Taste | Aktion |
|---|---|
| T | Transkriptfenster ein-/ausblenden |
| D | Ziehmodus umschalten (wenn Transkript sichtbar ist) |
| R | Größenänderungsmodus umschalten (wenn Transkript sichtbar ist) |
Ziehmodus (D-Taste – muss zuerst aktiviert werden)
| Taste | Aktion |
|---|---|
| ← → ↑ ↓ | Fenster verschieben (10px) |
| Umschalt + Pfeiltaste | Fenster verschieben (50px) |
| Home | Zur Mitte zurücksetzen |
| Esc | Ziehmodus beenden |
Größenänderungsmodus (R-Taste – muss zuerst aktiviert werden)
| Taste | Aktion |
|---|---|
| ← → | Breite anpassen (10px) |
| ↑ ↓ | Höhe anpassen (10px) |
| Umschalt + Pfeiltaste | Größe anpassen (50px) |
| Esc | Größenänderungsmodus beenden |
Transkript-Einträge
| Taste | Aktion |
|---|---|
| Eingabe / Leertaste | Zu diesem Zeitpunkt springen (wenn der Eintrag fokussiert ist) |
| Tab | Durch die Transkripteinträge navigieren |
Gestaltung des Transkripts
Benutzerdefinierte Farben
/* Transcript window */
.vidply-transcript-window {
background: rgba(20, 20, 30, 0.95);
border: 1px solid rgba(255, 255, 255, 0.2);
}
/* Header */
.vidply-transcript-header {
background: rgba(30, 30, 40, 0.95);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
/* Transcript entries */
.vidply-transcript-entry {
padding: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
/* Active entry */
.vidply-transcript-entry-active {
background: rgba(59, 130, 246, 0.2);
border-left: 3px solid #3b82f6;
}
/* Timestamp */
.vidply-transcript-time {
color: #60a5fa;
font-weight: 600;
}
Vollständiges Beispiel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transcript Example</title>
<link rel="stylesheet" href="dist/vidply.min.css">
<style>
body {
font-family: system-ui, sans-serif;
padding: 20px;
background: #111;
color: #fff;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
margin-bottom: 20px;
}
/* Custom transcript styling */
.vidply-transcript-window {
background: linear-gradient(135deg, rgba(30, 30, 50, 0.98), rgba(20, 20, 40, 0.98));
backdrop-filter: blur(10px);
}
.vidply-transcript-entry-active {
background: linear-gradient(90deg, rgba(139, 92, 246, 0.2), rgba(59, 130, 246, 0.2));
}
</style>
</head>
<body>
<div class="container">
<h1>Video with Interactive Transcript</h1>
<video
id="my-video"
data-vidply
data-transcript="true"
data-transcript-button="true"
width="800"
height="450"
>
<source src="video.mp4" type="video/mp4">
<track kind="captions" src="captions-en.vtt" srclang="en" label="English" default>
<track kind="captions" src="captions-es.vtt" srclang="es" label="Español">
</video>
<div style="margin-top: 20px;">
<button id="toggleTranscript">Toggle Transcript</button>
</div>
</div>
<script type="module">
import Player from './dist/prod/vidply.esm.min.js';
// Player is auto-initialized via data-vidply
// Get player instance
const videoElement = document.getElementById('my-video');
const player = videoElement.vidply; // Player instance stored on the media element
// Or find it manually
const allPlayers = document.querySelectorAll('[data-vidply]');
// const player = allPlayers[0].vidply;
// Manual toggle button
document.getElementById('toggleTranscript').addEventListener('click', () => {
if (player && player.transcriptManager) {
player.transcriptManager.toggleTranscript();
}
});
// Listen for transcript interactions
document.addEventListener('DOMContentLoaded', () => {
// Wait a moment for player to initialize
setTimeout(() => {
const container = document.querySelector('.vidply-player');
const video = container?.querySelector('video, audio');
if (video && video.vidply) {
const p = video.vidply;
p.on('timeupdate', (time) => {
// User can see which line is active
if (p.transcriptManager && p.transcriptManager.currentActiveEntry) {
console.log('Active transcript:', p.transcriptManager.currentActiveEntry.cue.text);
}
});
}
}, 1000);
});
</script>
</body>
</html>
Anwendungsfälle
1. Barrierefreiheit
- Benutzer von Bildschirmleseprogrammen können den Transkripttext lesen
- Gehörlose/schwerhörige Nutzer erhalten vollen Zugriff auf den Text
- Benutzer in lauten Umgebungen können lesen, anstatt zuzuhören
2. Sprachenlernen
- Folgen Sie den Muttersprachlern
- Klicken Sie hier, um schwierige Abschnitte erneut abzuspielen
- Lesen und hören Sie gleichzeitig
3. Suche & Navigation
- Inhalte schnell überfliegen
- Bestimmte Themen finden
- Zu relevanten Abschnitten springen
4. Notizen
- Genaue Zitate referenzieren
- Text für Zitate kopieren
- Lernhilfe für Bildungsinhalte
5. SEO & Auffindbarkeit
- Videoinhalte werden textdurchsuchbar
- Bessere Indizierung für Barrierefreiheit
- Verbesserte Auffindbarkeit von Inhalten
Anforderungen
Untertitel-Spur erforderlich
Für die Transkriptfunktion ist mindestens eine Untertitel-Spur erforderlich:
<track kind="captions" src="captions.vtt" srclang="en" label="English">
<!-- or -->
<track kind="subtitles" src="subtitles.vtt" srclang="en" label="English">
Hinweis: kind="descriptions" oder kind="chapters" Spuren werden NICHT für Transkripte verwendet.
Unterstützte Streaming-Formate
| Plattform / Format | Untertitel-Typ | Unterstützung von Transkripten |
|---|---|---|
| HTML5 (MP4/WebM) | WebVTT | Ja |
HLS (.m3u8) — hls.js (Chrome / Firefox / Edge / Desktop-Safari) | WebVTT | Ja (Cues werden schrittweise geladen, während Segmente gepuffert werden; Hls.Events.SUBTITLE_FRAG_PROCESSED wiederausstrahlung textcuesupdate) |
| HLS (.m3u8) — Natives HLS auf iOS / iPadOS Safari | WebVTT (über native TextTrack API) | Ja — VidPly bindet die nativen HLS-Untertitel des Browsers in das Untertitelmenü, das Transkriptfenster und das Qualitätsmenü ein |
| DASH (.mpd) | WebVTT | Ja (Cues werden schrittweise geladen, während Segmente gepuffert werden) |
| DASH (.mpd) | TTML / stpp | Nein (TTML wird nativ von dash.js gerendert; die Transkript-Schaltfläche ist ausgeblendet) |
iOS / iPadOS: Auch wenn
hls.jsauf iOS nicht ausgeführt werden kann (kein MSE), wartet VidPlyaddtrack/removetrack/loadedmetadataauf die nativeHTMLMediaElement.textTracksSammlung und zeigt jede Untertitel-Darstellung über dasselbe Untertitelmenü und die gleiche interaktive Transkription an wie auf dem Desktop. Transcript-on-iOS funktioniert nun für Live- und adaptive HLS-Streams.
Bei DASH-Streams mit TTML-Untertiteln werden die Untertitel von dash.js auf dem Bildschirm angezeigt, das interaktive Transkript ist jedoch nicht verfügbar. Wenn Sie Transkriptunterstützung bei DASH benötigen, verwenden Sie WebVTT-Untertitelspuren.
WebVTT-Format
Untertitel müssen im WebVTT-Format vorliegen:
WEBVTT
00:00:00.000 --> 00:00:05.000
Welcome to this video tutorial.
00:00:05.000 --> 00:00:10.000
Today we'll learn about VidPly's transcript feature.
00:00:10.000 --> 00:00:15.000
It's a powerful tool for accessibility and learning.
Browser-Unterstützung
Die Transkriptfunktion funktioniert in allen modernen Browsern:
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile Browser (iOS Safari, Chrome Android)
Fehlerbehebung
Schaltfläche „Transkript“ wird nicht angezeigt
Ursache: Es wurden keine Untertitel-Spuren erkannt
Lösung:
<!-- Add at least one caption track -->
<track kind="captions" src="captions.vtt" srclang="en" label="English">
Transkript zeigt „Wird geladen...“ an
Ursache: Das Laden der VTT-Datei dauert lange oder der Pfad ist falsch
Lösungen:
- Überprüfen Sie, ob der Dateipfad korrekt ist
- Überprüfen Sie die CORS-Header, wenn von einer anderen Domain geladen wird
- Überprüfen Sie, ob das VTT-Dateiformat gültig ist
Transkript kann auf Mobilgeräten nicht verschoben werden
Erwartet: Auf Mobilgeräten (< 768px) ist das Transkript NICHT verschiebbar. Es wird im Seitenfluss unterhalb des Videos positioniert.
Transkript scrollt nicht automatisch
Ursache: JavaScript-Fehler oder Untertitelspur nicht im hidden Modus
Lösung: Überprüfen Sie die Browserkonsole auf Fehler. Der Transkript-Manager setzt den Track-Modus automatisch auf hidden.
Erweitert: Externer Transkript-Container
Sie können das Transkript in einem benutzerdefinierten Container anzeigen (zukünftige Funktion):
const player = new Player('#video', {
transcript: true,
transcriptPosition: 'external',
transcriptContainer: '#my-transcript-container'
});
<div id="my-transcript-container"></div>
Hinweis: Diese Funktion ist teilweise implementiert. Derzeit wird das Transkript immer neben oder unter dem Video angezeigt.
Hinweise zur Leistung
- Transkript-Einträge werden bei Bedarf erstellt, wenn das Transkript zum ersten Mal angezeigt wird
- Das automatische Scrollen nutzt effiziente
scrollIntoViewmitsmoothVerhalten - Ereignis-Listener werden bereinigt, wenn das Transkript zerstört wird
- Keine Auswirkungen auf die Leistung, wenn das Transkript nicht sichtbar ist
Barrierefreiheitsfunktionen
Tastaturzugänglichkeit – Vollständige Tastaturnavigation
ARIA-Labels – Korrekte Rolle und aria-label-Attribute
Fokusverwaltung – Logische Fokusreihenfolge
Screenreader-freundlich – Semantische HTML-Struktur
Hoher Kontrast – Berücksichtigt die Farbeinstellungen
des Systems Touch-freundlich – Große Touch-Ziele (mindestens 44px)
Bewährte Verfahren
- Stellen Sie immer Untertitel bereit – Selbst automatisch generierte Untertitel sind besser als gar keine
- Verwenden Sie beschreibende Beschriftungen – Helfen Sie den Nutzern, die Sprachen der Tonspuren zu identifizieren
- Auf Mobilgeräten testen – Stellen Sie sicher, dass das Transkript auf kleinen Bildschirmen lesbar ist
- Positionierung berücksichtigen – Das Transkript neben dem Video funktioniert auf dem Desktop gut
- Gestalten Sie einheitlich – Passen Sie das Design an Ihre Website an und achten Sie dabei auf gute Lesbarkeit
Demo
Sehen Sie sich funktionierende Beispiele an:
demo/demo.html- Grundlegende Verwendung von Transkriptendemo/sign-language-demo.html- Transkript mit Gebärdensprachvideo
Erstellt mit Vanilla JavaScript von Matthias Peltzer