python - 如何像 FFMPEG 一样在 Python 中从音频文件创建频谱图?
问题描述
我的代码:
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()
产生的频谱图
使用 FFMPEG
ffmpeg -i thabo.wav -lavfi showspectrumpic=s=224x224:mode=separate:legend=disabled spectrogram.png
产生的频谱图
请帮忙,我想要一个与 FFMPEG 产生的频谱图完全相同的频谱图,用于从谷歌的可教机器导出的语音识别模型。 离线识别
解决方案
您可以直接将音频通过管道传输到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
实例将替换为您的工作流程的特定流程。
推荐阅读
- c - 分配给无类型内存块的值是否总是位于内存块的开头?
- javascript - 如何使用索引值从数组中获取值
- if-statement - 谷歌表格 - 如果语句填充单元格
- docker - TLS 以保护 Docker 守护程序无法在 Win 上运行 - 在哪里查看诊断文件?
- postgresql - 列引用没有歧义
- powershell - 使用脚本位置和参数的变量调用外部 powershell 脚本
- asp.net - 使用 Asp.net 使用 Springboot api
- object-detection - Detectron2 能否识别人脸?
- openssl - TLS 1.3 的 SSL 握手失败
- python - Django - 通过 for 循环查询