Haben Sie sich jemals gewunscht, eine Fahrradroute vor der Fahrt in der Vorschau anzusehen? Wir haben ein automatisiertes System gebaut, das wunderschone Uberflugvideos fur jede Party-Route auf Party Onbici generiert und Radfahrern eine cinematische Vorschau dessen bietet, was sie auf ihrer Reise erwartet.
Die Herausforderung
Bei der Organisation oder Teilnahme an einem Radevent ist das Verstandnis der Route entscheidend. Statische Karten sind hilfreich, aber sie vermitteln nicht das Erlebnis, die Route tatsachlich zu fahren. Wir wollten den Nutzern eine Moglichkeit geben, die Route virtuell zu “uberfliegen”, bevor sie sich fur eine Fahrt entscheiden.
Unsere Losung: Headless Video-Rendering
Wir haben einen Node.js-Service gebaut, der einen headless Chrome-Browser mit Puppeteer ausfuhrt, die Route auf einer interaktiven MapLibre GL-Karte rendert und Frames erfasst, wahrend eine virtuelle Kamera entlang des Pfades fliegt. So funktioniert es:
1. Routen-Interpolation
Eine Fahrradroute kann Tausende von Koordinatenpunkten haben. Um ein flussiges Video mit 30 FPS fur eine 15-Sekunden-Dauer zu erstellen, benotigen wir genau 450 Frames. Wir verwenden distanzbasierte Interpolation, um die Route gleichmassig abzutasten:
| |
2. Kamera-Animation mit Sanfter Ausrichtung
Einfach die Kamera in Fahrtrichtung zu richten, erzeugt ruckartige Bewegungen auf kurvigen Routen. Wir glatten die Kameraausrichtung mit einem gleitenden Durchschnitt uber 12 Frames, mit spezieller Behandlung fur den 360-Grad/0-Grad-Ubergang:
| |
3. MapLibre GL Rendering
Die Route wird auf einer schonen Stadia Maps-Basisschicht gerendert mit:
- Einer hervorgehobenen Routenlinie mit weisser Umrandung fur Sichtbarkeit
- Animiertem Kamerapositionsindikator
- Start- (grun) und Zielmarkierungen (rot)
- Optionalen 3D-Gebaudeextrusionen fur stadtische Gebiete
4. Frame-Erfassung und Video-Kodierung
Puppeteer erfasst jeden Frame als PNG-Screenshot, dann verwenden wir ffmpeg, um sie in ein WebM-Video mit VP9-Codec zu kodieren:
| |
Technische Architektur
| |
- Django lost die Videogenerierung aus, wenn eine Party erstellt oder aktualisiert wird
- Celery reiht die Aufgabe ein fur asynchrone Verarbeitung
- Der Node.js-Renderer fuhrt Puppeteer mit MapLibre GL aus
- ffmpeg kodiert die erfassten Frames
- Das Video wird hochgeladen zu S3 und der Party-Datensatz wird aktualisiert
Leistungsuberlegungen
| Auflosung | Dauer | Renderzeit | Dateigrosse |
|---|---|---|---|
| 1280x720 | 15s | 60-90s | 2-4 MB |
| 1920x1080 | 15s | 90-120s | 4-8 MB |
Fur die Produktion verwenden wir Docker-Container mit Software-Rendering (SwiftShader), um GPU-Abhangigkeiten zu vermeiden:
| |
Funktionen, die Wir Hinzugefugt Haben
- Anpassbare Videoabmessungen - Quadratisches Format fur Social-Media-Sharing
- Logo-Wasserzeichen - Versehen Sie Ihre Videos mit dem Logo Ihrer Organisation
- Kameraneigung und Zoom - Passen Sie den Betrachtungswinkel und die Hohe an
- Routenlinien-Styling - Benutzerdefinierte Farben und Breiten
Django-Integration
Aus dem Anwendungscode ist das Generieren eines Videos so einfach wie:
| |
Die Video-URL wird automatisch aktualisiert, wenn das Rendering abgeschlossen ist:
| |
Nachste Schritte
Wir erkunden mehrere Verbesserungen:
- Echtzeit-Vorschau - Live-Rendering, wahrend Benutzer Routen zeichnen
- Mehrere Kamerawinkel - Seitenansichten, Luftaufnahmen
- Wetter-Overlay - Zeigen Sie vorhergesagte Bedingungen entlang der Route
- Hohenprofil - Visualisieren Sie Anstiege und Abfahrten im Video
Routen-Uberflugvideos sind zu einer unserer beliebtesten Funktionen geworden und helfen Radfahrern, fundierte Entscheidungen daruber zu treffen, an welchen Fahrten sie teilnehmen mochten. Die Kombination moderner Web-Technologien macht das, was eine teure Produktionsaufgabe gewesen ware, zu einem automatisierten On-Demand-Service.
Mochten Sie es ausprobieren? Erstellen Sie eine Party und Ihr Routenvideo wird automatisch generiert!