eyeD3
命令行是基于插件的,主程序遍历文件系统、加载音频文件,然后交给相应的插件来进行一些有趣的处理。如果没有选择插件,简单用法如下:
$ eyeD3 --help
usage: eyeD3 [-h] [--version] [--exclude PATTERN]
[--plugins] [--plugin NAME]
[PATH [PATH ...]]
positional arguments:
PATH Files or directory paths
optional arguments:
-h, --help show this help message and exit
--version Display version information and exit
--exclude PATTERN A regular expression for path exclusion. May be
specified multiple times.
--plugins List all available plugins
--plugin NAME Specify which plugin to use.
PATH
、--exclude
用于指定或排除eyeD3
需要处理的文件或目录。 eyeD3
将递归遍历指定目录下的所有文件,然后把文件发送给对应的插件。
可以使用--plugins
参数列出所有可用的插件,使用--plugin=<name>
选择插件。
如果没有提供--plugin=
参数,将使用默认插件:命令行标签查看器/编辑器。
配置文件
可以使用-C/–config
选项从文件中读取配置,参数为一个ini文件路径。一个简单的配置文件如下所示:
# eyeD3 config file.
# default: ~/.eyeD3/config.ini
# overridde using -c/--config
[default]
# Default plugin to use.
plugin =
# General options to always use. These can be plugin specific but SHOULD NOT be.
# Any -C/--config and -P/--plugin options are ignored.
options =
#options = --pdb
# Extra directories to load plugins. Separated by ':'
plugin_path = ~/.eyeD3
# vim: set filetype=dosini:
如果${HOME}/.eyeD3/config.ini
文件存在,则每次运行eyed3时自动加载使该配置生效。可以使用–no config
禁用此选项。
自定义插件¶
插件是在插件搜索路径中找到的类(请参阅Configuration Files中的“plugin_path”),继承自eyed3.plugins.Plugin
。需要实现的接口很简单,插件的基本属性(名称、说明等)是使用类变量设置的,对于eyeD3
遍历的每个文件(使用给定的路径和可选的–exclude
选项),将调用handleFile
方法。此调用的返回值被忽略,但如果您希望停止处理文件,则可以抛出StopIteration
异常。在handleFile
中,对文件进行需要的操作。处理完所有输入文件后,调用handleDone
方法并退出程序。下面是一个echo
插件,它打印每个文件名和文件的mime类型:
import eyed3
from eyed3.plugins import Plugin
from eyed3.utils import guessMimetype
class EchoPlugin(eyed3.plugins.Plugin):
NAMES = ["echo"]
SUMMARY = u"Displays each filename and mime-type passed to the plugin"
def handleFile(self, f):
print("%s\t[ %s ]" % (f, guessMimetype(f)))
许多插件仅支持处理mp3音频文件。为实现eyed3.core.AudioFile
对象的自动加载,插件对象需要继承eyed3.plugins.LoaderPlugin
类。这个类成员self.audio_file
初始化为解析后的mp3/ID3对象。如果该文件不是受支持的音频文件类型,则值设置为“无”。
在下面示例中,LoaderPlugin
将自动设置audio_file
变量:
from eyed3.plugins import LoaderPlugin
class Echo2Plugin(LoaderPlugin):
SUMMARY = u"Displays details about audio files"
NAMES = ["echo2"]
def handleFile(self, f):
super(Echo2Plugin, self).handleFile(f)
if not self.audio_file:
print("%s: Unsupported type" % f)
else:
print("Audio info: %s Metadata tag: %s " %
("yes" if self.audio_file.info else "no",
"yes" if self.audio_file.tag else "no"))