PlayList/detecta_jingles.py
2025-01-13 16:14:14 +00:00

45 lines
1.7 KiB
Python

from pydub import AudioSegment
from pydub.silence import split_on_silence
import os
def dividir_audio_per_silenci(input_file, output_dir, min_silence_len=1000, silence_thresh=-40, min_segment_len=1000):
"""
Divideix un fitxer d'àudio en fragments basats en silencis.
:param input_file: Ruta del fitxer d'àudio (mp3, wav, etc.)
:param output_dir: Directori on guardar els fragments
:param min_silence_len: Longitud mínima del silenci (en ms)
:param silence_thresh: Umbral per detectar silenci (en dBFS)
:param min_segment_len: Longitud mínima d'un fragment per guardar-lo (en ms)
"""
# Carregar l'àudio
audio = AudioSegment.from_file(input_file)
# Dividir en fragments segons els silencis
fragments = split_on_silence(
audio,
min_silence_len=min_silence_len, # Silenci mínim (1 segon)
silence_thresh=silence_thresh # Umbral de silenci (-40 dBFS)
)
if not fragments:
print("No s'han detectat fragments.")
return
# Assegura't que el directori existeix
os.makedirs(output_dir, exist_ok=True)
# Guardar els fragments com a fitxers separats
for i, fragment in enumerate(fragments):
# Només guardar fragments més grans que el mínim
if len(fragment) >= min_segment_len:
fragment_path = os.path.join(output_dir, f"fragment_{i+1}.mp3")
fragment.export(fragment_path, format="mp3")
print(f"Fragment {i+1} guardat a: {fragment_path}")
# Exemple d'ús
if __name__ == "__main__":
input_file = input("Introdueix el fitxer d'àudio (mp3, wav, etc.): ").strip()
output_dir = input("Introdueix el directori de sortida per als fragments: ").strip()
dividir_audio_per_silenci(input_file, output_dir)