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)