Transcoderen
Hoe TubePress uploads omzet naar webklare renditions met gedistribueerde FFmpeg-workers.
Transcodering zet één geüpload bestand om in meerdere webbeschikbare MP4-rendities, zodat kijkers een kwaliteitsmenu krijgen, snel startende afspeelfunctie en een consistente codec ongeacht wat er is geüpload. Het voegt ook optionele extra's toe — watermerken en intro-/outrofragmenten — en bouwt de scrub-preview sprites die de speler gebruikt.
Alles hier wordt geconfigureerd onder /admin/settings?tab=transcode, verdeeld over de subtabbladen Formats, Queue, Servers, Watermark, Intros en Timeline. Transcodering kan worden uitgevoerd op de CMS-server zelf of worden gedistribueerd naar toegewijde workers.
Waarom transcoderen
Een ruw geüpload bestand kan elke resolutie, codec of container hebben. Transcodering standaardiseert het naar MP4/H.264-rendities met +faststart zodat het afspelen begint voordat het bestand volledig is gedownload, en het produceert meerdere formaten (bijvoorbeeld 720p en 480p) zodat de speler een kwaliteitsselector kan aanbieden en kleinere bestanden kan leveren aan kleinere schermen. In dezelfde doorgang worden watermerken en pre/post-roll-fragmenten toegepast, omdat ze in elke rendition gecodeerd moeten worden.
De transcoderingsworkflow
Wanneer een video klaar is om te verwerken, voegt TubePress één taak per uitvoer toe aan de transcode_jobs-tabel en werkt deze af:
- Wachtrij. Er wordt een taak aangemaakt voor de bronresolutie op volledige resolutie en voor elk actief formaat onder de bronhoogte, plus een tijdlijn-taak als voorbeeldweergaven zijn ingeschakeld.
- Oppakken. Een worker — deze server of een externe — claimt de volgende wachtende taak, te beginnen met de bronresolutie.
- Downloaden. Een externe worker haalt de bron op via HTTP (een directe, sleutel-geauthenticeerde URL die ondertekende medialinks omzeilt).
- Transcoderen. FFmpeg codeert de rendition, past bijsnijden, watermerk en intro's toe zoals geconfigureerd, en rapporteert de voortgangspercentages.
- Uploaden & callback. Het resultaat wordt in stukken teruggeüpload en een callback markeert de taak als voltooid.
De status van de video volgt dit: hij staat op processing terwijl taken worden uitgevoerd, schakelt over naar published zodra de bronresolutie is voltooid, en wordt alleen error als de bronresolutie nooit geproduceerd kan worden. Lagere rendities worden na publicatie verder ingevuld.
Rendities & formaten
Uitvoerformaten zijn volledig bewerkbaar op het tabblad Formats en worden opgeslagen in de video_formats-tabel. Elk formaat heeft een naam, een bestandspostfix (bijvoorbeeld _720p.mp4), een doelresolutie, ruwe FFmpeg-opties, een vlag voor beeldverhouding behouden en een activeringsschakelaar. De standaardwaarden zijn:
| Formaat | Resolutie |
|---|---|
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 360p | 640 × 360 |
Twee regels houden de kwaliteit op peil. TubePress vergroot nooit op: elk formaat op of boven de bronhoogte wordt overgeslagen. En de originele hoogste kwaliteit wordt altijd bewaard — als er een watermerk of bijsnijding actief is, wordt het opnieuw gecodeerd als een bron-rendition op volledige resolutie (weergegeven met een ster in de wachtrij), anders wordt het bronbestand ongewijzigd geserveerd. Een optie Bijsnijden begin (0–300 seconden) kan de eerste seconden van elke video verwijderen; net als het watermerk wordt het op elk formaat inclusief de bron toegepast.
De taakwachtrij
Het tabblad Queue (/admin/settings?tab=transcode&sub=queue) groepeert taken per video en laat je filteren op All / Pending / Processing / Completed / Failed. Elke video toont een badge per niveau — het broniveau met ster, vervolgens elke resolutie, dan TIMELINE — gekleurd op basis van de taakstatus:
Een per-video-console (het terminalpictogram) streamt de live takenlijst, de worker die elk niveau verwerkt, de verstreken tijd en eventuele foutmeldingen. Een knop Retry failed jobs plaatst alles wat momenteel is mislukt in één klik opnieuw in de wachtrij.
Externe transcoderingsservers
Transcodering is CPU-intensief, dus je kunt het van de webserver verplaatsen. Op het tabblad Servers stelt This Server in hoeveel FFmpeg-taken lokaal tegelijk worden uitgevoerd (1–4, of 0 om alleen externe workers te gebruiken) en laat je het FFmpeg-pad overschrijven. Hieronder registreer je externe workers; taken worden automatisch verdeeld naar de minst belaste, en elke worker heeft een limiet voor max concurrent jobs (een goede richtlijn is één taak per twee CPU-kernen).
- Voeg de server toe. Klik op Add Server, geef het een naam en een URL zoals
http://YOUR-IP:8090, en sla op. Een API-sleutel en het startcommando worden direct getoond. - Installeer FFmpeg + PHP. Voer op de worker-machine
sudo apt install ffmpeg php-cli php-curluit. - Implementeer de worker. Download
transcode-worker.php(van/api/transcode-worker-downloadof een tijdelijkewget-link), upload het, en open de poort metsudo ufw allow 8090/tcp. - Start het. Voer de worker uit met je sleutel:
php transcode-worker.php --port=8090 --key=YOUR_API_KEY- Verifieer. Klik op Check; een gezonde worker rapporteert Online met de gedetecteerde encoder en live CPU/GPU-gebruik.
GPU-versnelling (NVIDIA, AMD, Intel of Apple) wordt automatisch gedetecteerd en gebruikt. De worker haalt de bron op, codeert, rapporteert de voortgang en uploadt de resultaten in stukken terug naar de CMS — de gesegmenteerde upload zorgt ervoor dat elke aanvraag onder Cloudflare's limiet van 100 MB blijft. Voor onbeheerde hosts bevat de installatiegids een systemd-eenheid zodat de worker bij het opstarten opnieuw wordt gestart.
Bewaking & herstel
Het systeem is zo gebouwd dat een video nooit stilzwijgend wordt opgegeven. Een mislukte codering wordt automatisch opnieuw geprobeerd met een toenemende vertraging — van ongeveer een halve minuut tot een paar uur — omdat de meeste fouten tijdelijk zijn (een trage of onbetrouwbare CDN). Bovendien stelt een uurlijkse herstel-taak alle taken die nog als mislukt zijn gemarkeerd opnieuw in de wachtrij, zodat het blijft proberen totdat de rendition beschikbaar is. Er is geen handmatige klik vereist, maar de knop Retry failed jobs is beschikbaar als je het wilt forceren.
Als de bronresolutie zelf permanent mislukt, worden de afhankelijke subformaat-taken geannuleerd (ze kunnen niet doorgaan zonder een bron) en wordt de video gemarkeerd als error; herstel zal nog steeds proberen het te herstellen. Wanneer de bronresolutie uiteindelijk voltooid is, wordt de video automatisch gepubliceerd.
Vereisten
FFmpeg moet beschikbaar zijn waar transcodering wordt uitgevoerd:
- Lokale verwerking: installeer FFmpeg op de CMS-server (
sudo apt install ffmpeg). De pagina Transcode toont de gedetecteerde versie zodra aanwezig. - Externe verwerking: elke worker heeft FFmpeg plus
php-clienphp-curlnodig, minimaal 2 CPU-kernen en 2 GB RAM, en een open worker-poort.
Volgende stappen
Nog vastgelopen?
Open een ticket vanuit uw dashboard en ons team helpt u verder.