Pernahkah Anda berharap bisa melihat pratinjau rute bersepeda sebelum mengendarainya? Kami membangun sistem otomatis yang menghasilkan video terbang yang indah untuk setiap rute pesta di Party Onbici, memberikan pengendara pratinjau sinematik tentang apa yang dapat diharapkan dalam perjalanan mereka.
Tantangan
Saat mengorganisir atau bergabung dengan acara bersepeda, memahami rute sangat penting. Peta statis membantu, tetapi tidak menyampaikan pengalaman sebenarnya mengendarai rute tersebut. Kami ingin memberikan pengguna cara untuk “terbang secara virtual” melalui rute sebelum berkomitmen untuk ikut.
Solusi Kami: Rendering Video Headless
Kami membangun layanan Node.js yang menjalankan browser Chrome headless menggunakan Puppeteer, merender rute pada peta MapLibre GL interaktif, dan menangkap frame saat kamera virtual terbang sepanjang jalur. Berikut cara kerjanya:
1. Interpolasi Rute
Rute bersepeda mungkin memiliki ribuan titik koordinat. Untuk membuat video mulus pada 30 FPS selama 15 detik, kita membutuhkan tepat 450 frame. Kami menggunakan interpolasi berbasis jarak untuk mengambil sampel rute secara merata:
| |
2. Animasi Kamera dengan Bearing yang Mulus
Hanya mengarahkan kamera ke arah perjalanan menciptakan gerakan tersentak pada rute yang berkelok. Kami menghaluskan bearing kamera menggunakan rata-rata bergerak selama 12 frame, dengan penanganan khusus untuk pembungkusan 360 derajat/0 derajat:
| |
3. Rendering MapLibre GL
Rute dirender pada layer dasar Stadia Maps yang indah dengan:
- Garis rute yang disorot dengan garis tepi putih untuk visibilitas
- Indikator posisi kamera yang dianimasikan
- Penanda awal (hijau) dan akhir (merah)
- Ekstrusi bangunan 3D opsional untuk area perkotaan
4. Penangkapan Frame dan Encoding Video
Puppeteer menangkap setiap frame sebagai screenshot PNG, lalu kami menggunakan ffmpeg untuk mengencodenya menjadi video WebM dengan codec VP9:
| |
Arsitektur Teknis
| |
- Django memicu pembuatan video saat pesta dibuat atau diperbarui
- Celery mengantri tugas untuk pemrosesan asinkron
- Renderer Node.js menjalankan Puppeteer dengan MapLibre GL
- ffmpeg mengenkode frame yang ditangkap
- Video diunggah ke S3 dan catatan pesta diperbarui
Pertimbangan Performa
| Resolusi | Durasi | Waktu Render | Ukuran File |
|---|---|---|---|
| 1280x720 | 15d | 60-90d | 2-4 MB |
| 1920x1080 | 15d | 90-120d | 4-8 MB |
Untuk produksi, kami menggunakan container Docker dengan rendering perangkat lunak (SwiftShader) untuk menghindari ketergantungan GPU:
| |
Fitur yang Kami Tambahkan
- Dimensi video yang dapat disesuaikan - Format persegi untuk berbagi di media sosial
- Watermarking logo - Tandai video Anda dengan logo organisasi Anda
- Kemiringan dan zoom kamera - Sesuaikan sudut pandang dan ketinggian
- Gaya garis rute - Warna dan lebar kustom
Integrasi Django
Dari kode aplikasi, menghasilkan video semudah:
| |
URL video secara otomatis diperbarui saat rendering selesai:
| |
Langkah Selanjutnya
Kami sedang mengeksplorasi beberapa peningkatan:
- Pratinjau real-time - Rendering langsung saat pengguna menggambar rute
- Beberapa sudut kamera - Tampilan samping, bidikan dari atas
- Overlay cuaca - Tampilkan kondisi prakiraan sepanjang rute
- Profil elevasi - Visualisasikan tanjakan dan turunan dalam video
Video terbang rute telah menjadi salah satu fitur kami yang paling populer, membantu pesepeda membuat keputusan yang tepat tentang perjalanan mana yang akan diikuti. Kombinasi teknologi web modern mengubah apa yang akan menjadi tugas produksi yang mahal menjadi layanan otomatis sesuai permintaan.
Ingin mencobanya? Buat pesta dan video rute Anda akan dihasilkan secara otomatis!