Как создать изображение спектрограммы из аудиофайла в Python, как это делает FFMPEG? - PullRequest
0 голосов
/ 30 апреля 2020

Мой код:

import matplotlib.pyplot as plt
from matplotlib.pyplot import specgram
import librosa
import librosa.display
import numpy as np
import io
from PIL import Image

samples, sample_rate = librosa.load('thabo.wav')
fig = plt.figure(figsize=[4, 4])
ax = fig.add_subplot(111)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax.set_frame_on(False)
S = librosa.feature.melspectrogram(y=samples, sr=sample_rate)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max))
buf = io.BytesIO()
plt.savefig(buf,  bbox_inches='tight',pad_inches=0)

# plt.close('all')
buf.seek(0)
im = Image.open(buf)
# im = Image.open(buf).convert('L')
im.show()
buf.close()

Произведена спектрограмма

enter image description here

Использование FFMPEG

ffmpeg -i thabo .wav -lavfi showspectrumpic = s = 224x224: режим = отдельный: легенда = отключено spectrogram.png

Произведена спектрограмма

enter image description here

Пожалуйста помогите, я хочу спектрограмму, точно такую ​​же, что и FFMPEG, для использования с моделью распознавания речи, экспортированной с обучаемой машины Google. Автономное распознавание

1 Ответ

1 голос
/ 02 мая 2020

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

Демонстрация с использованием трех экземпляров ffmpeg:

ffmpeg -i input.wav -f wav - | ffmpeg -i - -filter_complex "showspectrumpic=s=224x224:mode=separate:legend=disabled" -c:v png -f image2pipe - | ffmpeg -y -i - output.png

Первый и последний ffmpeg экземпляры курса будут заменены вашими конкретными процессами для вашего рабочего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...