2016-05-16 9 views
0

Python Anfänger auf der Suche nach etwas Hilfe.Wie teile ich eine Audiodatei am Ende einer Stille, ohne Stille zu löschen, mit pydub?

Ich benutze Pydub silence Modul zu teilen und exportieren Stücke einer Audiodatei. Ich bin mit dem Verfahren in der oberen Antwort auf diese Frage gefunden:

Using pyDub to chop up a long audio file

chunks = split_on_silence(sound, 
    # length of silence in ms 
    min_silence_len=325, 

    # consider it silent if quieter than -60 dBFS 
    silence_thresh=-60 
) 

for i, chunk in enumerate(chunks): 
    chunk.export(os.path.join(full_path, transcript_filename + "{0}.wav".format("%02d" % i)), format="wav") 

obwohl Gerade jetzt sind die Pausen nicht in den Chunks enthalten. Ich möchte, dass sie am Ende bleiben. Ich nehme an, dass die Änderung, die ich vornehmen muss, zu den pydub.silence-Funktionen ist, aber ich weiß nicht, welche Änderung vorgenommen werden muss. Hier ist split_on_silence jetzt:

def split_on_silence(audio_segment, min_silence_len=1000, silence_thresh=-16, keep_silence=100): 

    """ 
    audio_segment - original pydub.AudioSegment() object 
    min_silence_len - (in ms) minimum length of a silence to be used for a split. default: 1000ms 
    silence_thresh - (in dBFS) anything quieter than this will be considered silence. default: -16dBFS 
    keep_silence - (in ms) amount of silence to leave at the beginning and end of the chunks. Keeps the sound from sounding like it is abruptly cut off. (default: 100ms) 
    """ 

    not_silence_ranges = detect_nonsilent(audio_segment, min_silence_len, silence_thresh) 

    chunks = [] 
    for start_i, end_i in not_silence_ranges: 
     start_i = max(0, start_i - keep_silence) 
     end_i += keep_silence 

     chunks.append(audio_segment[start_i:end_i]) 

Danke für jede Hilfe.

~ Eric.

Antwort

2

Sie könnten die pydub.silence.detect_silence() function nützlich finden. Es gibt eine Liste der Bereiche, in denen Stille erkannt wurde (es im Inneren der Spaltung auf Stille-Funktion verwendet wird)

auch pydub.silence.detect_nonsilent() in dem Fall ist, dass hilfreicher

+0

Dank so viel! –

Verwandte Themen