Linux 下列出 ID3 标签的命令行工具

Linux 下列出 ID3 标签的命令行工具

我想编写一个脚本来操作 mp3 文件的 ID3 标签。我需要一个工具来读取标签并以机器可读的格式输出。例如,如果我希望它只输出标题,那么它就会输出标题,而不会输出其他内容。我尝试了不同的工具,如id3eyeD3,但它们只能用于写入标签或以人类可读的格式输出它们。当然,我可以通过 过滤该输出sed,但对我来说这似乎没有必要那么复杂。

答案1

您可以使用包exiftool中的命令libimage-exiftool-perl来读取(和写入)多媒体文件(包括 mp3)中的元数据。它可以输出为多种格式,包括键值、json、xml 和用户定义格式。您可以选择仅列出指定的标签。

% exiftool -json 09\ -\ \(Tom\ Waits\)\ -\ Walk\ Away.mp3
[{
  "SourceFile": "09 - (Tom Waits) - Walk Away.mp3",
  "ExifToolVersion": 7.82,
  "FileName": "09 - (Tom Waits) - Walk Away.mp3",
  "Directory": ".",
  "FileSize": "2.5 MB",
  "FileModifyDate": "2008:07:12 13:58:52+01:00",
  "FileType": "MP3",
  "MIMEType": "audio/mpeg",
  "MPEGAudioVersion": 1,
  "AudioLayer": 3,
  "AudioBitrate": 128000,
  "SampleRate": 44100,
  "ChannelMode": "Stereo",
  "MSStereo": "Off",
  "IntensityStereo": "Off",
  "Emphasis": "None",
  "ID3Size": 1678,
  "Title": "Walk Away",
  "Album": "Dead Man Walking",
  "Genre": "OST",
  "Track": 9,
  "Artist": "Tom Waits",
  "Year": "",
  "Comment": "",
  "Duration": "02:42 (approx)"
}]

答案2

id3infoid3lib以机器易于解析的格式输出 ID3 标签。

答案3

我会调查诱变剂标记库对于 Python,它包含一个基本的可编写脚本的命令行工具,中期3v2。 尽管中期3v2的输出主要是人类可读的,该--list-raw选项本身可能就很合适:

$ mid3v2 --list-raw 09_Walk\ Away.mp3
Raw IDv2 tag info for 09_Walk Away.mp3:
TDRC(encoding=3, text=[u'1996'])
TIT2(encoding=3, text=[u'Walk Away'])
TRCK(encoding=3, text=[u'9'])
TPE1(encoding=3, text=[u'Tom Waits'])
TALB(encoding=3, text=[u'Dead Man Walking'])
TCON(encoding=3, text=[u'Soundtrack'])

注意此工具仅列出ID3标签,而不是 MP3 文件的附加属性,例如外置工具。但如果你只想要一个特定的标签,一个简单的grep标签名将为您抓取:

$ mid3v2 --list-raw 09_Walk\ Away.mp3 | grep TIT2
TIT2(encoding=3, text=[u'Walk Away'])

如果中期3v2对您来说,仅靠这些是不够的,并且您对 Python 很熟悉,您可以编写自己的工具脚本来与 Mutagen 库交互并直接读取或操作标签。

答案4

我安装的eyeD3是带有yamljson插件的:

eyeD3 -P yaml *.mp3
eyeD3 -P json *.mp3

将会执行您所期望的操作 - 将可解析的输出输出到标准输出。

yaml 输出具有更好的标准合规性,因为它可以正确生成 yaml 多文档(带---分隔符)。JSON 版本输出多行 JSON,但不将顶层包装在数组中,也没有,分隔各个字典。它就像“line-JSON”,但跨越多行!我怀疑标准库可能会在尝试解析它时卡住 :-(

相关内容