45 lines
1.7 KiB
Python
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) |