Production sunucu için adım adım talimatlar (~30.000 şarkı)
Bazı şarkılar çok yüksek, bazıları çok kısık çalıyordu. Bu güncelleme ile:
ffmpeg -i {input} -af "loudnorm=I=-16:TP=-1.5:LRA=14:print_format=json" -f null -
Çıktı: input_i, input_tp, input_lra, input_thresh değerleri (JSON)
loudnorm=I=-16:TP=-1.5:LRA=14:measured_I={i}:measured_TP={tp}:measured_LRA={lra}:measured_thresh={thresh}:linear=false,alimiter=limit=0.95:attack=5:release=50
loudnorm: Tüm şarkıları -16 LUFS'e normalize eder (iki geçişli = artifact yok)
alimiter: Peak'leri 0.95 (-0.45 dB) ile sınırlar → clipping imkansız
linear=false: Dinamik normalizasyon (yüksek sesliyi bastırır, düşük sesliyi yükseltir)
storage/tenant{id}/app/public/muzibu/hls/{song_id}/
├── enc.bin ← 16 byte AES-128 key (dokunulmaz)
├── enc.keyinfo ← Key URI + path + IV (dokunulmaz)
├── master.m3u8 ← 4 varyant referansı
├── playlist.m3u8 ← high kalite (orijinal bitrate, 4sn, VOD)
├── segment-*.ts ← high segment'ler
├── ultralow/playlist.m3u8 ← 32kbps, mono, 22050Hz
├── low/playlist.m3u8 ← 64kbps, mono, 22050Hz
└── mid/playlist.m3u8 ← 128kbps, stereo, 44100Hz
storage/tenant{id}/app/public/muzibu/songs/
├── song_xxxxx.mp3 ← Orijinal (DOKUNULMAZ)
├── mp3_64/{song_id}.mp3 ← 64kbps MP3 fallback
└── mp3_128/{song_id}.mp3← 128kbps MP3 fallback
cd /var/www/vhosts/muzibu.com/httpdocs git pull origin main
Güncellenen dosyalar: ConvertToHLSJob.php, AddHlsVariantsCommand.php, HLSService.php
HLSDIR="storage/tenant1001/app/public/muzibu/hls"
MP3DIR="storage/tenant1001/app/public/muzibu/songs/mp3_128"
MP3DIR64="storage/tenant1001/app/public/muzibu/songs/mp3_64"
# Variant klasörlerini sil
find $HLSDIR -maxdepth 2 -type d -name ultralow -exec rm -rf {} +
find $HLSDIR -maxdepth 2 -type d -name low -exec rm -rf {} +
find $HLSDIR -maxdepth 2 -type d -name mid -exec rm -rf {} +
# MP3 fallback'leri sil
rm -rf "$MP3DIR" "$MP3DIR64"
⚠️ Orijinal MP3 ve high HLS'e dokunmaz. Sadece türetilmiş çıktılar silinir.
php artisan tenants:run hls:add-variants --tenants=1001 \ --option="quality=all" --option="mp3-128=1" --option="mp3-64=1" \ --option="refresh-master=1" --option="re-encode-high=1" \ --option="limit=10"
Önce 10 şarkıyla test et. Sorun yoksa devam.
~30K şarkı uzun sürer. 3 paralel terminal ile ~7 saat:
# Terminal 1: İlk 10.000 php artisan tenants:run hls:add-variants --tenants=1001 \ --option="quality=all" --option="mp3-128=1" --option="mp3-64=1" \ --option="refresh-master=1" --option="re-encode-high=1" \ --option="limit=10000" --option="offset=0" # Terminal 2: 10.001-20.000 php artisan tenants:run hls:add-variants --tenants=1001 \ --option="quality=all" --option="mp3-128=1" --option="mp3-64=1" \ --option="refresh-master=1" --option="re-encode-high=1" \ --option="limit=10000" --option="offset=10000" # Terminal 3: 20.001-30.000 php artisan tenants:run hls:add-variants --tenants=1001 \ --option="quality=all" --option="mp3-128=1" --option="mp3-64=1" \ --option="refresh-master=1" --option="re-encode-high=1" \ --option="limit=10000" --option="offset=20000"
# Toplam sayıları kontrol et HLSDIR="storage/tenant1001/app/public/muzibu/hls" echo "HLS klasör: $(ls -d $HLSDIR/*/ | wc -l)" echo "ultralow: $(find $HLSDIR -maxdepth 2 -name ultralow -type d | wc -l)" echo "low: $(find $HLSDIR -maxdepth 2 -name low -type d | wc -l)" echo "mid: $(find $HLSDIR -maxdepth 2 -name mid -type d | wc -l)" echo "master: $(find $HLSDIR -name master.m3u8 | wc -l)" echo "mp3_128: $(ls songs/mp3_128/*.mp3 | wc -l)" echo "mp3_64: $(ls songs/mp3_64/*.mp3 | wc -l)" # Rastgele şarkı volume testi shuf -n 5 -e $HLSDIR/*/playlist.m3u8 | while read f; do dir=$(dirname "$f") id=$(basename "$dir") echo "Song $id:" ffmpeg -hide_banner -i "$f" -af volumedetect -f null /dev/null 2>&1 | grep mean_volume done
php artisan cache:clear php artisan view:clear php artisan responsecache:clear
| İşlem | Şarkı Başına | 30K Şarkı (1 terminal) | 30K Şarkı (3 paralel) |
|---|---|---|---|
| Pass 1 (ölçüm) | ~3 sn | ~25 saat | ~8.5 saat |
| Pass 2 (high encode) | ~7 sn | — | — |
| 3 variant (ultralow+low+mid) | ~12 sn | — | — |
| MP3 128k | ~3 sn | — | — |
| TOPLAM | ~25 sn | ~21 saat | ~7 saat |
Sorun çıkarsa eski koda dönmek yeterli:
git checkout HEAD~1 -- Modules/Muzibu/App/Jobs/ConvertToHLSJob.php git checkout HEAD~1 -- Modules/Muzibu/App/Console/Commands/AddHlsVariantsCommand.php git checkout HEAD~1 -- app/Services/Muzibu/HLSService.php
Zaten encode edilmiş dosyalar çalışmaya devam eder. Sadece yeni encode'lar eski filtre ile yapılır.
Modules/Muzibu/App/Jobs/ConvertToHLSJob.php — Yeni şarkı yüklendiğinde
Modules/Muzibu/App/Console/Commands/AddHlsVariantsCommand.php — Batch re-encode
app/Services/Muzibu/HLSService.php — Variant + MP3 üretimi