如何在shell中读取mp3标签?

red*_*pet 64 command-line mp3 tag id3

有没有办法从 shell 读取文件的 mp3 标签?类似于: mp3tags MyFile.mp3 author应该输出 mp3 文件的作者标签。

mxm*_*nkn 71

您还可以使用ffprobewhich 是ffmpeg.

sudo apt-get install ffmpeg
ffprobe file.mp3
Run Code Online (Sandbox Code Playgroud)

如果您不想要其他信息,如轨道长度等,您可以将输出与 grep 结合使用:

sudo apt-get install ffmpeg
ffprobe file.mp3
Run Code Online (Sandbox Code Playgroud)

或者为了只得到作者:

ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'
Run Code Online (Sandbox Code Playgroud)

您可以通过用逗号分隔来选择其他标签,例如format_tags=title,album.


我想在文件夹中的所有 mp3 文件中搜索关键字。该文件夹有 486 个文件,因此了解此处提到的哪个解决方案最快变得很有趣。这是我使用的循环:

ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3
Run Code Online (Sandbox Code Playgroud)

笔记:

  • lltag并且mp3info没有找到标题,因为我使用的文件有 ID3v2 标签,请参阅 @s-prasanth 的评论:如何在 shell 中读取 mp3 标签?
  • eyeD3 以编程方式使用是有问题的,因为它使用颜色代码(粗体)。
  • eyeD3并且id3v2(但仅适用于 ID3 v1 标签)在同一行返回标题和艺术家,这使事情进一步复杂化;因此getTitleEyed,有时会同时getTitleId3返回标题和艺术家,所以请不要复制粘贴这些函数。
  • getTitleId3 仅适用于 ID3 v2 标签,因为id3v2ID3v1- 和 ID3v2-标签具有不同的格式,即

    Title  :                                 Artist:    
    
    Run Code Online (Sandbox Code Playgroud)

    与 ID3v2 对比:

    TIT2 (Title/songname/content description): 
    
    Run Code Online (Sandbox Code Playgroud)
  • 由于这 5 个程序中唯一的程序会为其中eyeD3两个文件打印红色警告:

    Invalid mode/bitrate combination for layer II
    No ID3 v1.x/v2.x tag found!
    
    Run Code Online (Sandbox Code Playgroud)

    好像这两个文件具有的ID3v1标签,因为这两个文件是唯一的地方lltag,并mp3info能获得冠军。我想知道这是否是一个错误,eyeD3因为这里提到的其他程序没有这些文件有问题......

结果(实时):

 Program  | Version    | Time / s
----------+------------+-----------
 exiftool | 10.25      | 49.5 ± 0.5
 lltag    | 0.14.5     | 41   ± 1.0
 ffprobe  | 3.1.3-1+b3 | 33   ± 0.5
 eyeD3    | 0.6.18     | 24   ± 0.5
 id3info  | 3.8.3      | 4.2  ± 0.1
 id3v2    | 0.1.12     | 2.9  ± 0.1
 id3tool  | 1.2a       | 1.7  ± 0.1
 mp3info  | 0.8.5a     | 1.4  ± 0.1
Run Code Online (Sandbox Code Playgroud)

从时间id3tool上看,这里的赢家是(mp3info 速度更快,但不适用于 ID3 v2)。 id3v2也相当快,但该getTitleId3功能需要调整才能与 ID3v1-tags 一起使用,最坏的情况可能会使其减慢 2 倍。


red*_*pet 26

好的,我自己找到了一个程序。它被称为 mp3info 并由

sudo apt-get install mp3info
Run Code Online (Sandbox Code Playgroud)

要从文件中获取单个 mp3 标签,必须调用

mp3info -p %a file.mp3
Run Code Online (Sandbox Code Playgroud)

这给出了文件的艺术家。%a 表示想要获取艺术家,其他标签还有其他一些键。

  • 附加信息:mp3 标签有 4 种不同的标准,id3v1、id3v2.2(过时)、id3v2.3、id3v2.4 http://en.wikipedia.org/wiki/ID3。一个文件可以有 v1 和/或 v2 标签(是的 v1 和 v2 可以共存,但 v2.x 和 v2.y 不能共存)。我相信 v2.3 是使用最广泛的一种。根据 http://www.ibiblio.org/mp3info/(参见 Todo),`mp3info` 不支持 v2 标签。你可能想看看 `id3v2` - 它可以编辑/添加 v2 并显示 v1 和 v2。如果您不喜欢它显示标签的方式,您可以编写一个脚本来运行 `id3v2` 并适当地处理输出。 (23认同)

phi*_*hem 12

您可以使用eyed3。首先,从终端安装:

sudo apt-get install eyed3
Run Code Online (Sandbox Code Playgroud)

然后,运行:

eyeD3 song.mp3
Run Code Online (Sandbox Code Playgroud)

将其与grep在一行中获取特定标签相结合。

eyeD3 song.mp3 | grep artist
Run Code Online (Sandbox Code Playgroud)

(要去除所有 mp3 标签,请参见此处


Psd*_*ddp 9

我更喜欢使用 id3v2,只需输入id3v2 -l somefile.mp3. 您还可以查看 id3v2 手册页以了解更具体的用途。