Çalma listesi önerilerinde klibin ilk saniyesini sessizlik eşiğiyle elemek

这篇内容暂时只有 Türkçe 版本,以下是原文。

Geçen ay bir arkadaşın düğün sonrası için hazırladığım 6 saatlik listede aynı sorun tekrar etti: bazı parçalar geçişte boşluk bırakıyor, bazıları ise başlar başlamaz patlıyor. Kütüphanede 2140 parça var, çoğu 2010 sonrası CD rip’i, bir kısmı da Bandcamp indirmesi. Sorun dosya adında değil, klibin ilk saniyesindeki sessizlik ve tepe seviyesindeydi. Öneri sırası bozulunca dinleyici fark ediyor ama sebebini söyleyemiyor.

Önce ffmpeg ile ilk 1,2 saniyeyi ölçtüm, sonra sessizlik eşiğini ayrı çıkardım. Kullandığım iki komut şu:

ffmpeg -hide_banner -ss 0 -t 1.2 -i "$f" -af silencedetect=noise=-38dB:d=0.15 -f null - 2>&1 | grep silence_
ffmpeg -hide_banner -ss 0 -t 1.2 -i "$f" -af astats=metadata=1:reset=0 -f null - 2>&1 | grep -E "Peak level|RMS level" | head -2

Çıktıyı bir CSV’ye yazdım: dosya, ilk sessizlik süresi, tepe dB. Sonra listeyi üç kovaya ayırdım: ilk 0,4 saniyeden fazlası sessiz olanlar (yavaş giriş), tepe seviyesi -1 dB üstü olanlar (sert giriş), geri kalanlar. Öneri motoruna sadece bu kovaları besledim, sıralamayı elle değil, kova etiketiyle yaptım.

Neden böyle: geçiş hissi parçanın kendisinden çok, ilk saniyedeki enerji farkından geliyor. Sessiz başlangıçlı bir parçayı sert girişli bir parçanın arkasına koyunca kulak “kesildi” hissi alıyor; tersi de boşluk gibi duruyor. Ölçüm maliyeti düşük, 2140 parça için tek çekirdekte yaklaşık 4 dakika sürdü. Ama bedeli var: ilk 1,2 saniye parçanın karakterini tam anlatmıyor, özellikle canlı kayıtlarda intro alkışla başlıyor ve ölçüm yanıltıyor.

Nerede bozuluyor: fade-in ile başlayan elektronik parçalarda sessizlik eşiği -38 dB fazla agresif kaldı, gerçek girişi sessiz saydı. Ayrıca mono dosyalarda astats’ın peak değeri stereo ile aynı okunmuyor, birkaç parçayı yanlış kovaya attı. Bir de 44,1 kHz dışındaki örnekleme oranlarında silencedetect süresi kayıyor; 48 kHz dosyalarda 0,15 saniyelik eşiği 0,18’e çekmek zorunda kaldım. Kendi hatam: ilk denemede tüm kütüphaneyi tek seferde taradım, disk g/ç yüzünden iki dosya yarım okundu ve sessizlik 0 çıktı, listeye sert giriş olarak girdi.

Sizin kütüphanenizde ilk saniye ölçümü canlı kayıtlarda da tutuyor mu, yoksa intro alkışını ayıklamak için ayrı bir eşik mi kullanıyorsunuz?

0
赞同度 100% · 0 条评论 · 3 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。