Find chorus: weight repetitive short phrases (like 'Ohne dich x5') as strong chorus signal

This commit is contained in:
Sebastjan Artič 2026-04-28 16:57:45 +00:00
parent c17578521a
commit 8eaef029e2

View File

@ -219,12 +219,20 @@ def find_chorus(video, lang=None, model_size="small", target_duration=30.0):
avg_e = avg_energy_in_range(energies, start, start + target_duration) avg_e = avg_energy_in_range(energies, start, start + target_duration)
energy_score = max(0, avg_e - avg_overall) # koliko nad povprečjem energy_score = max(0, avg_e - avg_overall) # koliko nad povprečjem
# Score: ponovitve + energija + dolžina vrstice # Score: refren = ponavljajoča kratka fraza + glasnejši
# Refren je navadno glasnejši kot verz — energija je močnejši signal # - Ponovitve močno štejejo
# - Energija močno šteje (refren je glasnejši)
# - Kratke vrstice z veliko ponovitvami iste besede = klasičen refren
rep_words = rep_text.lower().split()
# Penaliziraj dolge informativne vrstice (verzi imajo več različnih besed)
unique_word_ratio = len(set(rep_words)) / max(len(rep_words), 1)
# Refren ima nizek unique_ratio (ponavljajoče besede), verz visok
chorus_signal = max(0, (1.0 - unique_word_ratio) * 20)
score = ( score = (
len(cluster) * 5 # repetition weight (zmanjšano) len(cluster) * 8 # ponovitve
+ energy_score * 10 # energy weight (povečano — refren je glasnejši) + energy_score * 10 # energija (refren je glasnejši)
+ min(len(rep_text.split()), 10) + chorus_signal # ponavljajoča fraza signal
) )
candidates.append({ candidates.append({