Next.js, BullMQ ve FFmpeg ile Toplu Video İşleme Hattı Kurmak
BatchEdits'in mimarisinden yola çıkarak 50 videoyu paralel işleyen bir sistemin nasıl kurulduğu: presigned URL'ler, BullMQ kuyruğu, FFmpeg sessizlik temizleme ve Whisper altyazı üretimi.
BatchEdits adlı içerik düzenleme aracının geliştiricisi, kullanıcıların 50 videoyu tek seferde yükleyip sessizlik temizleme, altyazı ekleme ve platforma özel kırpma işlemlerini paralel biçimde aldığı bir mimariyi anlatıyor. Sıralı işlemenin 50 video için onlarca dakikayı bulan bir darboğaz yarattığını fark eden yazar, videoları Next.js sunucusu üzerinden değil presigned URL'lerle doğrudan Cloudflare R2'ye yükleterek sunucu bant genişliği ve body-size limitlerini aşıyor. Yüklemeler p-limit ile eş zamanlı sınırlanıp XHR ile ilerleme takibi yapılıyor.
İşleme tarafında BullMQ kuyruğu, her video için ayrı bir job oluşturuyor ve worker'lar concurrency ayarıyla (örneğin 10) videoları eşzamanlı işliyor. Her worker R2'den videoyu indirip Whisper ile transkript çıkarıyor, FFmpeg'in silencedetect filtresiyle tespit edilen sessizlikleri kırpıyor, kelime bazlı zaman damgalarıyla drawtext filtresi üzerinden altyazı yakıyor, zoom uyguluyor ve platforma göre crop yapıp sonucu tekrar R2'ye yüklüyor.
Yazarın çıkardığı dersler mühendislik açısından öğretici: BullMQ concurrency değeri sunucu RAM'ine göre kademeli artırılmalı çünkü FFmpeg CPU ve bellek açısından ağır; presigned URL'ler büyük ölçekte tek mantıklı yükleme yöntemi; Whisper doğruluğu ise gürültülü ses, arka plan müziği veya çoklu konuşmacı durumunda hızla düşüyor. Bu yaklaşım, video işleme gibi CPU-yoğun iş yüklerini kuyruk tabanlı worker mimarisiyle ölçeklendirmek isteyen mühendisler için somut bir referans sunuyor.