使用 python 检索 MusicBrainz 指纹
Retrieving MusicBrainz fingerprint with python
我很难找到一种方法来从给定的歌曲中检索音频指纹数据。我之前用 MusicBrainz 标记了这些歌曲,现在我想直接从音频文件中读取它。我发现 musicbrainzngs 的唯一方法是在 MusicBrainz 库中搜索 (musicbrainzngs.search_artists()) 歌曲以查找指纹数据,这是相当低效的,因为我的文件中已经有了数据。
有没有我可以从任何给定的音频文件中读取它的库?
AcoustID fingerprint is stored in audiofiles, yes, if you tagged your files using MusicBrainz Picard。具体什么标签取决于音频文件:
- MP3/ID3V2:
TXXX:Acoustid Fingerprint
- Vorbis(FLAC、ogg)和 APE:
ACOUSTID_FINGERPRINT
- iTunes MP4:
----:com.apple.iTunes:Acoustid Fingerprint
参见Musicbrainz tag mapping overview。
您可以使用 mutagen
project 读取音频文件标签,这也是 Picard 使用的标签:
import mutagen
tagnames = {
'audio/mp3': 'TXXX:Acoustid Fingerprint',
'audio/vorbis': 'ACOUSTID_FINGERPRINT',
'audio/mp4': '----:com.apple.iTunes:Acoustid Fingerprint'
}
mfile = mutagen.File(musicfile_filename)
if mfile and mfile.mime[0] in tagnames:
fingerprint = mfile.get(tagnames[mfile.mime[0]])
if fingerprint is not None:
try:
# ID3v2 tag
fingerprint = fingerprint.text[0]
except AttributeError:
# Vorbis
fingerprint = fingerprint[0]
我很难找到一种方法来从给定的歌曲中检索音频指纹数据。我之前用 MusicBrainz 标记了这些歌曲,现在我想直接从音频文件中读取它。我发现 musicbrainzngs 的唯一方法是在 MusicBrainz 库中搜索 (musicbrainzngs.search_artists()) 歌曲以查找指纹数据,这是相当低效的,因为我的文件中已经有了数据。
有没有我可以从任何给定的音频文件中读取它的库?
AcoustID fingerprint is stored in audiofiles, yes, if you tagged your files using MusicBrainz Picard。具体什么标签取决于音频文件:
- MP3/ID3V2:
TXXX:Acoustid Fingerprint
- Vorbis(FLAC、ogg)和 APE:
ACOUSTID_FINGERPRINT
- iTunes MP4:
----:com.apple.iTunes:Acoustid Fingerprint
参见Musicbrainz tag mapping overview。
您可以使用 mutagen
project 读取音频文件标签,这也是 Picard 使用的标签:
import mutagen
tagnames = {
'audio/mp3': 'TXXX:Acoustid Fingerprint',
'audio/vorbis': 'ACOUSTID_FINGERPRINT',
'audio/mp4': '----:com.apple.iTunes:Acoustid Fingerprint'
}
mfile = mutagen.File(musicfile_filename)
if mfile and mfile.mime[0] in tagnames:
fingerprint = mfile.get(tagnames[mfile.mime[0]])
if fingerprint is not None:
try:
# ID3v2 tag
fingerprint = fingerprint.text[0]
except AttributeError:
# Vorbis
fingerprint = fingerprint[0]