gpt4 book ai didi

python - 如何强制 librosa 使用 ffmpeg 而不是 gstreamer

转载 作者:行者123 更新时间:2023-12-04 23:18:47 26 4
gpt4 key购买 nike

当我在 Windows 中运行下面的代码时,它会生成一个干净的频谱图,但在 Linux(Ubuntu 20.04)中却是一个非常粗糙的频谱图。我怀疑差异与 audioread 后端有关。当我在 Linux 上运行 audioread.available_backends() 时,它会在 ffmpeg 之前报告 gstreamer,但我在 Windows 上没有 gstreamer。这真的是问题吗?如果是这样,有没有办法强制它使用 ffmpeg 而不是 gstreamer?

import argparse
import librosa
import scipy

import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('tkagg')

parser = argparse.ArgumentParser()
parser.add_argument('-i', type=str, default='', help='Path to input file.')
args = parser.parse_args()

signal, rate = librosa.load(args.i, sr=44100, mono=True, res_type='kaiser_fast')

start_seconds = 5.0
end_seconds = 8.0
start_offset = int(start_seconds * rate)
end_offset = int(end_seconds * rate)

f, t, spec = scipy.signal.spectrogram(signal[start_offset:end_offset], fs=rate, mode='magnitude')

plt.pcolormesh(spec, shading='gouraud')
plt.savefig('test.png')

最佳答案

在这种情况下,使用 ffmpeg 而不是 librosa 解决了这个问题,所以问题就是我认为的问题。我将上面的 librosa.load 调用替换为以下内容:

def buf_to_float(x, *, n_bytes=2, dtype=np.float32):
scale = 1.0 / float(1 << ((8 * n_bytes) - 1))
fmt = "<i{:d}".format(n_bytes)
return scale * np.frombuffer(x, fmt).astype(dtype)

rate = 44100
bytes, _ = (ffmpeg
.input(args.i)
.output('-', format='s16le', acodec='pcm_s16le', ac=1, ar=f'{rate}')
.overwrite_output()
.run(capture_stdout=True))

signal = np.asarray(buf_to_float(bytes))

关于python - 如何强制 librosa 使用 ffmpeg 而不是 gstreamer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71117745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com