如何使用Python从acoustID获取跟踪元数据

问题描述

我有一个带有未知标签的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获得相应的标签(专辑,大头钉编号,类型,乐队等)?

解决方法

您的acoustID不是声调,而是MusicBrainz Identifier (MBID)Recording

您是正确的,默认情况下musicbrainzngs.get_recording_by_id仅返回很少的数据集。它是MusicBrainz lookup API的包装,该API根据通过inc参数请求的内容返回数据。这在musicbrainzngs中可以作为includes函数的get_*_by_id参数使用。如果您使用

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

将返回更多数据-在这种情况下,有关录音的艺术家及其出现的发行版本的信息。您需要定义自己(或要求用户)选择正确的发行版,因为您无法单独从录音的MBID得知哪个发行版应被视为“正确”。

,

最后找到了这个:https://acousticbrainz.org/。在浏览器中,您可以使用以下URL:https://acousticbrainz.org/<my acoustID>。从您的代码中,您可以从以下网址获取一个大的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