Сплит аудио по меткам времени либроса - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть аудиофайл, и я хочу разделить его каждые 2 секунды. Есть ли способ сделать это с помощью librosa?

Так что, если бы у меня был 60-секундный файл, я бы разбил его на 30 двухсекундных файлов.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Вы можете разбить ваш файл, используя librosa, запустив следующий код (не проверено). Я добавил комментарии, необходимые для того, чтобы вы поняли выполненные шаги.

# First load the file
audio, sr = librosa.load(file_name)

# Get number of samples for 2 seconds; replace 2 by any number
buffer = 2 * sr

samples_total = len(audio)
samples_wrote = 0
counter = 1

while samples_wrote < samples_total:

    #check if the buffer is not exceeding total samples 
    if buffer > (samples_total - samples_wrote):
        buffer = samples_total - samples_wrote

    block = audio[samples_wrote : (samples_wrote + buffer)]
    out_filename = "split_" + str(counter) + "_" + file_name

    # Write 2 second segment
    librosa.output.write_wav(out_filename, block, sr)
    counter += 1
    samples_wrote += buffer
0 голосов
/ 07 февраля 2020

librosa - это, прежде всего, библиотека для анализа аудио, а не для синтеза или обработки аудио. Предоставлена ​​поддержка записи простых аудиофайлов (см. здесь ), но там также указано:

Эта функция устарела в librosa 0.7.0. Будет удален в 0.8. Использование write_wav должно быть заменено на soundfile.write .

Учитывая эту информацию, я бы предпочел использовать такой инструмент, как sox для разделения аудиофайлов.

От "Разделить mp3-файл до времени * se c каждый с использованием SoX" :

Вы можете запустить SoX следующим образом:

 sox file_in.mp3 file_out.mp3 trim 0 2 : newfile : restart

Это создаст серию файлов с 2-секундным фрагментом аудио каждый.

Если вы предпочитаете оставаться в пределах Python, вы можете использовать pysox для работы .

...