如何使用 Python 从 acoustID 获取曲目元数据
How to get track metadata from acoustID with Python
我有一个带有未知标签的 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 中得到对应的标签(专辑、曲目编号、流派、乐队等...)?
终于找到这个:https://acousticbrainz.org/。在您的浏览器中,您可以使用此 url:https://acousticbrainz.org/<my acoustID>
。从您的代码中,您可以获得一个大的 json 数据文件,其中包含来自此轨道的所有元数据 url: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
您的 acoustID
不是声波,而是 MusicBrainz Identifier (MBID) of a Recording。
您是对的,musicbrainzngs.get_recording_by_id
默认情况下仅 returns 一组非常小的数据。它是 MusicBrainz lookup API 的包装器,returns 数据基于通过 inc
参数请求的内容。这在 musicbrainzngs 中作为 get_*_by_id
函数的 includes
参数可用。如果你使用
musicbrainzngs.get_recording_by_id("0f6eb38a-d6c9-4f87-a9a7-6e7b0eeb4281", includes=["artists", "releases"])
更多数据 - 在这种情况下是关于录音的艺术家和它出现的版本 - 将被返回。您需要自己定义(或要求用户)选择正确的版本,因为您无法仅从录音的 MBID 判断哪个版本应该被视为“正确”。
我有一个带有未知标签的 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 中得到对应的标签(专辑、曲目编号、流派、乐队等...)?
终于找到这个:https://acousticbrainz.org/。在您的浏览器中,您可以使用此 url:https://acousticbrainz.org/<my acoustID>
。从您的代码中,您可以获得一个大的 json 数据文件,其中包含来自此轨道的所有元数据 url: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
您的 acoustID
不是声波,而是 MusicBrainz Identifier (MBID) of a Recording。
您是对的,musicbrainzngs.get_recording_by_id
默认情况下仅 returns 一组非常小的数据。它是 MusicBrainz lookup API 的包装器,returns 数据基于通过 inc
参数请求的内容。这在 musicbrainzngs 中作为 get_*_by_id
函数的 includes
参数可用。如果你使用
musicbrainzngs.get_recording_by_id("0f6eb38a-d6c9-4f87-a9a7-6e7b0eeb4281", includes=["artists", "releases"])
更多数据 - 在这种情况下是关于录音的艺术家和它出现的版本 - 将被返回。您需要自己定义(或要求用户)选择正确的版本,因为您无法仅从录音的 MBID 判断哪个版本应该被视为“正确”。