Python 如何使用MusicBrainz:Picard插件访问mp3中的原始标记或文件名文本?

Python 如何使用MusicBrainz:Picard插件访问mp3中的原始标记或文件名文本?,python,regex,plugins,musicbrainz,Python,Regex,Plugins,Musicbrainz,我正在尝试访问多年来添加到音乐中的文件名或元数据。现场、演示、现场:在雅典、声学、2005年拉斯维加斯现场、Metallica封面、奖金曲目等。我这样做是为了轻松区分曲目 我一直在尝试修复我的音乐,并用MusicBrainz Picard更好地组织/标记它。但是Picard不允许访问原始标记或文件名。只依赖于从他们的数据库中提取的内容。正如你所看到的,我的信息不是标准的。这只是为了我和我自己的个人收藏,所以大部分都没有用,无法添加到他们的数据库中 因此,我认为一位论坛管理员/程序员建议,也许可以

我正在尝试访问多年来添加到音乐中的文件名或元数据。现场、演示、现场:在雅典、声学、2005年拉斯维加斯现场、Metallica封面、奖金曲目等。我这样做是为了轻松区分曲目

我一直在尝试修复我的音乐,并用MusicBrainz Picard更好地组织/标记它。但是Picard不允许访问原始标记或文件名。只依赖于从他们的数据库中提取的内容。正如你所看到的,我的信息不是标准的。这只是为了我和我自己的个人收藏,所以大部分都没有用,无法添加到他们的数据库中

因此,我认为一位论坛管理员/程序员建议,也许可以通过一个插件来实现这一点

我从来没有用Python编程过,对它一无所知。最近我几乎没有进入RegEx。但是对这一点有一个相当不错的理解,尽管不是很深入

现在,如果可能的话,我希望检查原始元数据,然后检查文件名。然后取出其中的任何内容,并将其保存到文件中的多个变量中,就像它们存在一样:ExtraInfo1、ExtraInfo2等。然后对照标题检查每个变量,确保它们不在标题中,因为有时标题本身在标题中有括号。如果没有,可以将它们添加回标题。来标记和重命名它们

我确实找到了这个插件,它从标题中提取信息并将其移动到版本标签。这几乎正是我想要的,除了从Title标签中取它,我想从原始Title标签或文件名中取它。然后将其添加到新的标题标记中

有人能帮我吗

以下是我找到的插件:

PLUGIN_NAME = 'Move metadata to version tag'
PLUGIN_AUTHOR = 'Jacob Rask'
PLUGIN_DESCRIPTION = 'Moves song metadata such as "demo", "live" from title and titlesort to version tag.'
PLUGIN_VERSION = "0.1.4"
PLUGIN_API_VERSIONS = ["0.12", "0.15"]
from picard.metadata import register_track_metadata_processor
import re
_p_re = re.compile(r"\(.*?\)")
_v_re = re.compile(r"((\s|-)?(acoustic|akustisk|album|bonus|clean|club|cut|C=64|dance|dirty|disco|encore|extended|inch|maxi|live|original|radio|redux|rehearsal|reprise|reworked|ringtone|[Ss]essions?|short|studio|take|variant|version|vocal)(\s|-)?|.*?(capp?ella)\s?|(\s|-)?(alternat|demo|dub|edit|ext|fail|instr|long|orchestr|record|remaster|remix|strument|[Tt]ape|varv).*?|.*?(complete|mix|inspel).*?)")
def add_title_version(tagger, metadata, release, track):
if metadata["titlesort"]:
title = metadata["titlesort"]
else:
title = metadata["title"]
pmatch = _p_re.findall(title)
if pmatch: # if there's a parenthesis, investigate
pstr = pmatch[-1][1:-1] # get last match and strip paranthesis
vmatch = _v_re.search(pstr)
if vmatch:
metadata["titlesort"] = re.sub("\(" + pstr + "\)", "", title).strip()
metadata["title"] = re.sub("\(" + pstr + "\)", "", title).strip()
metadata["version"] = pstr
register_track_metadata_processor(add_title_version)
谢谢,
-Dev

在我看来,这与Java无关。删除标记垃圾邮件。我很确定MusicBrainz Picard是用Java编写的。但这与问题有什么关系呢?Picard不是用Java编写的,而是用Python编写的。访问tagger脚本中的文件名或在tagger脚本中调用的插件中的文件名是不可能的,但有一个解决方案。访问未被Picard覆盖的自定义标记应该是可能的,但我现在无法测试它。Aww。我以为它只是使用Python作为插件。我无法让它读取Picard没有覆盖的标签。但是Picard上的一位管理员/可能还有编码员说,应该可以通过插件获得这些信息。所以我想这可能是下一个尝试的途径。