Hai mai desiderato poter visualizzare in anteprima un percorso ciclabile prima di percorrerlo? Abbiamo costruito un sistema automatizzato che genera bellissimi video di sorvolo per ogni percorso di festa su Party Onbici, offrendo ai ciclisti un’anteprima cinematografica di cosa aspettarsi durante il loro viaggio.
La Sfida
Quando si organizza o si partecipa a un evento ciclistico, capire il percorso e fondamentale. Le mappe statiche sono utili, ma non trasmettono l’esperienza di percorrere effettivamente il tragitto. Volevamo dare agli utenti un modo per “sorvolare virtualmente” il percorso prima di impegnarsi in una pedalata.
La Nostra Soluzione: Rendering Video Headless
Abbiamo costruito un servizio Node.js che esegue un browser Chrome headless usando Puppeteer, renderizza il percorso su una mappa interattiva MapLibre GL e cattura i fotogrammi mentre una telecamera virtuale sorvola il percorso. Ecco come funziona:
1. Interpolazione del Percorso
Un percorso ciclabile potrebbe avere migliaia di punti di coordinate. Per creare un video fluido a 30 FPS per una durata di 15 secondi, abbiamo bisogno di esattamente 450 fotogrammi. Usiamo l’interpolazione basata sulla distanza per campionare il percorso uniformemente:
| |
2. Animazione della Telecamera con Orientamento Fluido
Semplicemente puntare la telecamera nella direzione di viaggio crea movimenti bruschi su percorsi tortuosi. Lisciamo l’orientamento della telecamera usando una media mobile su 12 fotogrammi, con gestione speciale per il passaggio 360 gradi/0 gradi:
| |
3. Rendering MapLibre GL
Il percorso viene renderizzato su un bellissimo livello base Stadia Maps con:
- Una linea del percorso evidenziata con contorno bianco per visibilita
- Indicatore animato della posizione della telecamera
- Marcatori di partenza (verde) e arrivo (rosso)
- Estrusioni opzionali di edifici 3D per aree urbane
4. Cattura dei Fotogrammi e Codifica Video
Puppeteer cattura ogni fotogramma come screenshot PNG, poi usiamo ffmpeg per codificarli in un video WebM con codec VP9:
| |
Architettura Tecnica
| |
- Django attiva la generazione video quando viene creata o aggiornata una festa
- Celery mette in coda il task per elaborazione asincrona
- Il renderer Node.js esegue Puppeteer con MapLibre GL
- ffmpeg codifica i fotogrammi catturati
- Il video viene caricato su S3 e il record della festa viene aggiornato
Considerazioni sulle Prestazioni
| Risoluzione | Durata | Tempo di Rendering | Dimensione File |
|---|---|---|---|
| 1280x720 | 15s | 60-90s | 2-4 MB |
| 1920x1080 | 15s | 90-120s | 4-8 MB |
Per la produzione, usiamo container Docker con rendering software (SwiftShader) per evitare dipendenze GPU:
| |
Funzionalita Aggiunte
- Dimensioni video personalizzabili - Formato quadrato per condivisione sui social media
- Filigrana con logo - Personalizza i tuoi video con il logo della tua organizzazione
- Inclinazione e zoom della telecamera - Regola l’angolo di visione e l’altitudine
- Stile della linea del percorso - Colori e larghezze personalizzati
Integrazione Django
Dal codice dell’applicazione, generare un video e semplice come:
| |
L’URL del video viene aggiornato automaticamente quando il rendering e completato:
| |
Prossimi Passi
Stiamo esplorando diversi miglioramenti:
- Anteprima in tempo reale - Rendering dal vivo mentre gli utenti disegnano percorsi
- Angolazioni multiple della telecamera - Viste laterali, riprese dall’alto
- Overlay meteo - Mostra le condizioni previste lungo il percorso
- Profilo altimetrico - Visualizza salite e discese nel video
I video di sorvolo del percorso sono diventati una delle nostre funzionalita piu popolari, aiutando i ciclisti a prendere decisioni informate su quali pedalate partecipare. La combinazione delle moderne tecnologie web trasforma quella che sarebbe stata una costosa attivita di produzione in un servizio automatizzato su richiesta.
Vuoi provarlo? Crea una festa e il tuo video del percorso verra generato automaticamente!