librosa.load()无法正确解码YouTube上的音频文件

时间:2019-09-01 02:09:13

标签: python wav youtube-dl librosa

我正在尝试在librosa.load()文件上运行命令.wav.wav file是通过youtube-dl从youtube视频下载的,具有以下属性:

  • 频道数:2
  • 采样率:44,100Hz
  • 持续时间:3486.104秒

但是,从命令librosa.load('file.wav')返回的时间序列如下:

(array([0., 0., 0., ..., 0., 0., 0.], dtype=float32), 22050)

.wav文件肯定有很多噪音,所以我不太明白为什么每一帧的输出都是0

我还尝试在其他librosa.load()个其他YouTube视频文件的音频文件上运行.wav,并得到相同的结果。

如果有人对导致此输出的原因有任何想法,请让我现在。预先感谢。

1 个答案:

答案 0 :(得分:1)

Youtube不存储WAV文件。因此,当向youtube-dl请求WAV时,它所做的就是将下载后的MPEG4 / OPUS转换为WAV文件(使用ffmpeg)。这不会提高质量,只会占用硬盘上更多的空间。转换过程中可能出了一些问题,导致您的文件变得一片寂静。

由于librosa可以加载MPEG4音频(在安装了适当的依赖项时),因此建议您下载并直接加载。请参见下面的示例代码。

使用youtube-dl下载MP4音频

youtube-dl -ci -f "bestaudio[ext=m4a]" https://www.youtube.com/watch?v=-5FKNViujeM -o '%(id)s.mp4'

在Python中加载文件

import librosa
import numpy

sr = 16000
y, _ = librosa.load('-5FKNViujeM.mp4', duration=7, sr=sr) # load first seconds

# Calculate RMS
rms_window = 1.0 # in seconds 
rms = librosa.feature.rms(y=y, hop_length=int(sr*rms_window))
rms_db = librosa.core.amplitude_to_db(rms, ref=0.0)
print(list(rms_db[0]))

输出

[1.9082947, 79.42775, 77.47075, 80.536514, 81.758995, 81.908295, 78.63311, 80.665535]