0

我有一个带有未知标签的 file.mp3。我用它来获取acoustID:

import acoustid
acoustID= acoustid.match(API_KEY, filepath)

acoustID包含几个候选者,假设我选择了最好的一个:'0f6eb38a-d6c9-4f87-a9a7-6e7b0eeb4281'。

我试过这个,但它没有提供很多信息:

import musicbrainzngs
musicbrainzngs.get_recording_by_id(acoustID)

如何从这个 acoustID 中获取相应的标签(专辑、大头针编号、流派、乐队等)?

4

2 回答 2

1

acoustID的不是 acoustid,而是RecordingMusicBrainz 标识符 (MBID)

您是正确的,musicbrainzngs.get_recording_by_id默认情况下只返回一小部分数据。它是MusicBrainz 查找API的包装器,它根据通过inc参数请求的内容返回数据。这在 musicbrainzngs 中可用作函数的includes参数get_*_by_id。如果你使用

musicbrainzngs.get_recording_by_id("0f6eb38a-d6c9-4f87-a9a7-6e7b0eeb4281", includes=["artists", "releases"])

更多数据——在这种情况下是关于录音的艺术家和它出现的版本——将被返回。您需要定义自己(或要求用户)选择正确的版本,因为您无法仅从录音的 MBID 判断哪个版本应该被认为是“正确的”。

于 2020-11-06T18:04:24.090 回答
0

终于找到了这个:https ://acousticbrainz.org/ 。在您的浏览器中,您可以使用此 url: https://acousticbrainz.org/<my acoustID>。从您的代码中,您可以从这个 url 获得一个包含该轨道上所有元数据的大 json 数据文件:https://acousticbrainz.org/api/v1/<my acoustID>/low-level

对于 python 脚本,您可以使用如下内容:

import acoustid
import urllib.request, json

file = "path/to/myAudioFile"
API_KEY = 'cSpUJKpD'

candidates = acoustid.match(API_KEY, file)  # returns a generator of candidates

best_score, best_acoustId, best_title, best_artist = next(candidates)

metadata = {}
with urllib.request.urlopen("https://acousticbrainz.org/api/v1/" + best_acoustId + "/low-level") as url:
    data = json.loads(url.read().decode())
    metadata = data['metadata']

有关acoustid.match()您的更多信息,可以查看他们的 github 页面,尤其是这里:https ://github.com/beetbox/pyacoustid/blob/master/aidmatch.py

于 2020-11-06T14:53:28.490 回答