Zum Inhalt springen
TubePress — kostenlos, selbst gehostet & aktiv gepflegt
Medien & Transcodierung

Transcodierung

Wie TubePress Uploads mit verteilten FFmpeg-Workern in webfertige Renditionen umwandelt.

Das Transkodieren wandelt eine einzelne hochgeladene Datei in mehrere webgeeignete MP4-Renditions um, sodass Zuschauer ein Qualitätsmenü, schnell startende Wiedergabe und einen einheitlichen Codec erhalten – unabhängig vom hochgeladenen Dateiformat. Außerdem werden optionale Extras integriert — Wasserzeichen und Intro-/Outro-Clips — und die Vorschau-Sprites erstellt, die der Player verwendet.

Alles hier wird unter /admin/settings?tab=transcode konfiguriert, aufgeteilt auf die Unterregisterkarten Formate, Warteschlange, Server, Wasserzeichen, Intros und Timeline. Das Transkodieren kann auf dem CMS-Server selbst ausgeführt oder auf dedizierte Worker verteilt werden.

Warum transkodieren

Ein roher Upload kann jede Auflösung, jeden Codec oder Container haben. Das Transkodieren standardisiert ihn in MP4/H.264-Renditions mit +faststart, sodass die Wiedergabe beginnt, bevor die Datei vollständig heruntergeladen ist, und erzeugt mehrere Größen (zum Beispiel 720p und 480p), sodass der Player eine Qualitätsauswahl anbieten und kleinere Dateien auf kleineren Bildschirmen bereitstellen kann. Im selben Durchlauf werden Wasserzeichen und Pre-/Post-Roll-Clips angewendet, da sie in jede Rendition eincodiert werden müssen.

Die Transkodierungs-Pipeline

Wenn ein Video zur Verarbeitung bereit ist, reiht TubePress einen Job pro Ausgabe in die transcode_jobs-Tabelle ein und arbeitet sie der Reihe nach ab:

  1. Warteschlange. Ein Job wird für die vollauflösende Quellstufe und für jedes aktive Format unterhalb der Quellhöhe erstellt, sowie ein Timeline-Job, wenn Vorschauen aktiviert sind.
  2. Abholung. Ein Worker — dieser Server oder ein externer — übernimmt den nächsten ausstehenden Job, beginnend mit der Quellstufe.
  3. Download. Ein externer Worker lädt die Quelle über HTTP herunter (eine direkte, schlüsselauthentifizierte URL, die signierte Medienlinks umgeht).
  4. Transkodieren. FFmpeg kodiert die Rendition und wendet dabei Schnitt, Wasserzeichen und Intros wie konfiguriert an und meldet den prozentualen Fortschritt.
  5. Upload & Rückmeldung. Das Ergebnis wird in Blöcken hochgeladen und ein Callback markiert den Job als abgeschlossen.

Der Videostatus verfolgt dies: Er steht auf processing, während Jobs laufen, wechselt zu published, sobald die Quellstufe abgeschlossen ist, und wird nur zu error, wenn die Quellstufe nie produziert werden kann. Niedrigere Renditions werden nach der Veröffentlichung weiter aufgefüllt.

Eingebettete Videos werden niemals transkodiert. Nur hochgeladene oder URL-basierte Dateien durchlaufen die Pipeline; ein Video mit einem Einbettungscode wird direkt von seiner Quelle bereitgestellt.

Renditions & Formate

Ausgabeformate sind vollständig auf der Registerkarte Formate bearbeitbar und in der video_formats-Tabelle gespeichert. Jedes Format hat einen Namen, ein Datei-Postfix (zum Beispiel _720p.mp4), eine Zielauflösung, rohe FFmpeg-Optionen, ein Flag zum Seitenverhältnis beibehalten und einen Aktiv-Schalter. Die eingebauten Standardwerte sind:

FormatAuflösung
720p1280 × 720
480p854 × 480
360p640 × 360

Zwei Regeln halten die Qualität in Ordnung. TubePress skaliert nie hoch: Jedes Format auf oder über der Quellhöhe wird übersprungen. Und die ursprüngliche Höchstqualität wird immer beibehalten — wenn ein Wasserzeichen oder ein Schnitt aktiv ist, wird es in eine vollauflösende Quell-Rendition neu kodiert (in der Warteschlange mit einem Stern angezeigt), andernfalls wird die Quelldatei unverändert bereitgestellt. Eine Schnittanfang-Option (0–300 Sekunden) kann die ersten Sekunden jedes Videos entfernen; wie das Wasserzeichen wird sie auf jedes Format einschließlich der Quelle angewendet.

Die Jobwarteschlange

Die Registerkarte Warteschlange (/admin/settings?tab=transcode&sub=queue) gruppiert Jobs nach Video und ermöglicht das Filtern nach Alle / Ausstehend / In Bearbeitung / Abgeschlossen / Fehlgeschlagen. Jedes Video zeigt ein Abzeichen pro Stufe — die markierte Quellstufe, dann jede Auflösung, dann TIMELINE — eingefärbt nach Jobstatus:

pending
In der Warteschlange, wartet auf einen freien Worker.
processing
Aktiv, mit einer aktuellen Phase (Herunterladen, Transkodieren oder Hochladen) und einem Prozentsatz.
completed
Rendition erstellt und gespeichert.
failed
Keine weiteren Wiederholungsversuche vorerst; die automatische Wiederherstellung gilt weiterhin (unten).

Eine videospezifische Konsole (das Terminal-Symbol) überträgt die Live-Jobliste, den Worker, der jede Stufe verarbeitet, die verstrichene Zeit und etwaige Fehlermeldungen. Eine Schaltfläche Fehlgeschlagene Jobs wiederholen stellt alles, was derzeit fehlgeschlagen ist, mit einem Klick erneut in die Warteschlange.

Externe Transkodierungsserver

Das Transkodieren ist CPU-intensiv, daher kann es vom Webserver ausgelagert werden. Auf der Registerkarte Server legt Dieser Server fest, wie viele FFmpeg-Jobs gleichzeitig lokal ausgeführt werden (1–4, oder 0 um nur externe Worker zu verwenden), und ermöglicht das Überschreiben des FFmpeg-Pfades. Darunter registrieren Sie externe Worker; Jobs werden automatisch auf den am wenigsten ausgelasteten verteilt, und jeder hat ein Limit für maximale gleichzeitige Jobs (eine gute Faustregel ist ein Job pro zwei CPU-Kerne).

  1. Server hinzufügen. Klicken Sie auf Server hinzufügen, geben Sie ihm einen Namen und eine URL wie http://YOUR-IP:8090 und speichern Sie. Ein API-Schlüssel und der Startbefehl werden sofort angezeigt.
  2. FFmpeg + PHP installieren. Führen Sie auf dem Worker-Rechner sudo apt install ffmpeg php-cli php-curl aus.
  3. Worker bereitstellen. Laden Sie transcode-worker.php herunter (von /api/transcode-worker-download oder einem temporären wget-Link), laden Sie es hoch und öffnen Sie den Port mit sudo ufw allow 8090/tcp.
  4. Starten. Starten Sie den Worker mit Ihrem Schlüssel:
php transcode-worker.php --port=8090 --key=YOUR_API_KEY
  1. Überprüfen. Klicken Sie auf Prüfen; ein funktionstüchtiger Worker meldet Online mit dem erkannten Encoder und der aktuellen CPU-/GPU-Auslastung.

GPU-Beschleunigung (NVIDIA, AMD, Intel oder Apple) wird automatisch erkannt und verwendet. Der Worker lädt die Quelle, transkodiert, meldet den Fortschritt und lädt die Ergebnisse in Blöcken zurück in das CMS — der Block-Upload ist es, der jede Anfrage unter Cloudflares 100 MB-Limit hält. Für unbeaufsichtigte Server enthält das Setup-Handbuch eine systemd-Unit, damit der Worker beim Booten neu startet.

Den Worker in der Produktion schützen. Der Worker kommuniziert über einfaches HTTP auf seinem Port. Stellen Sie nginx mit HTTPS davor und beschränken Sie den Port auf Ihren CMS-Server.

Überwachung & Wiederholungen

Das System ist so konzipiert, dass ein Video nie stillschweigend aufgegeben wird. Eine fehlgeschlagene Kodierung wird automatisch mit zunehmendem Warteintervall wiederholt — von etwa einer halben Minute bis zu einigen Stunden — da die meisten Fehler vorübergehend sind (ein langsames oder unzuverlässiges CDN). Darüber hinaus stellt ein stündlicher Wiederherstellungstask alle noch als fehlgeschlagen markierten Jobs erneut in die Warteschlange, sodass es weiter versucht, bis die Rendition fertig ist. Ein manueller Klick ist nicht erforderlich, obwohl die Schaltfläche Fehlgeschlagene Jobs wiederholen vorhanden ist, wenn Sie es erzwingen möchten.

Wenn die Quellstufe selbst dauerhaft fehlschlägt, werden die abhängigen Unterformat-Jobs abgebrochen (sie können ohne eine Quelle nicht fortfahren) und das Video wird als error markiert; die Wiederherstellung wird dennoch versuchen, es zurückzubringen. Wenn die Quellstufe schließlich abgeschlossen ist, wird das Video automatisch veröffentlicht.

Anforderungen

FFmpeg muss überall dort verfügbar sein, wo das Transkodieren ausgeführt wird:

  • Lokale Verarbeitung: FFmpeg auf dem CMS-Server installieren (sudo apt install ffmpeg). Die Transkodierungs-Seite zeigt die erkannte Version, sobald sie vorhanden ist.
  • Externe Verarbeitung: Jeder Worker benötigt FFmpeg sowie php-cli und php-curl, mindestens 2 CPU-Kerne und 2 GB RAM sowie einen offenen Worker-Port.
Kein FFmpeg, kein Transkodieren. Wenn FFmpeg lokal fehlt und kein externer Server online ist, kann der Transkodierungs-Schalter nicht aktiviert werden — installieren Sie zuerst FFmpeg oder fügen Sie einen Worker hinzu.

Nächste Schritte

Noch Hilfe benötigt?

Erstellen Sie ein Ticket in Ihrem Dashboard und unser Team hilft Ihnen gerne weiter.

Live-Demo ausprobieren → TubePress herunterladen →