如何在外壳中读取mp3标签?


53

有没有办法从外壳读取文件的mp3标签?类似于: mp3tags MyFile.mp3 author应该输出mp3文件的author-tag。

Answers:


47

你也可以用ffprobe它的一部分ffmpeg

sudo apt-get install ffmpeg
ffprobe file.mp3

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

ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'

或为了只得到作者:

ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3

您可以使用逗号分隔其他标签,例如format_tags=title,album


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

# sudo apt-get install ffmpeg lltag eyed3 mp3info id3v2 libimage-exiftool-perl libid3-tools id3tool

keyword='fill_me_in'

getTitleFF()   { ffprobe "$1" 2>&1 | sed -E -n 's/^ *title *: (.*)/\1/p'; }
getTitleLL()   { lltag --show-tags title "$1" | sed -nE 's/^  TITLE=(.*)/\1/p'; }
getTitleEyed() { eyeD3 2>&1 "$1" | sed -n 's|\x1b\[[0-9;]*mtitle[^:]*: ||p'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^(TIT2 \([^)]*\)|Title *): (.*)/\2/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -nE 's/^=== TIT2 \([^)]*\): //p'; }
getTitleTool() { id3tool "$1" | sed -n 's|^Song Title:\t||p'; }

for prog in FF LL Eyed Info Id3 Exif Id3i Tool; do
    echo "=== getTitle${prog} ==="
    time \
    for file in *.mp3; do 
        if "getTitle${prog}" "$file" | grep -q "$keyword"; then 
            echo "$file"
        fi
    done
done

笔记:

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

    Title  :                                 Artist:    
    

    与ID3v2:

    TIT2 (Title/songname/content description): 
    
  • 作为这5 eyeD3个文件中唯一的程序,将为其中两个文件显示红色警告:

    Invalid mode/bitrate combination for layer II
    No ID3 v1.x/v2.x tag found!
    

    好像这两个文件具有的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

从时间id3tool上讲,赢家是(mp3info更快,但不适用于ID3 v2)。 id3v2速度也相当快,但是该getTitleId3功能需要进行调整才能与ID3v1标签配合使用,这在最坏的情况下可能会使速度降低2倍。


1
哇。我多年来一直是exiftool的高级用户,但我不知道它也可以读取声音文件的元数据!ffprobe(在我的情况下为avprobe)解决方案也很棒,谢谢。这是最好的答案!
marlar

1
感谢您的辛勤工作!我的Fedora的软件包管理器中没有其中一些工具。能否请id3info您比较一下?
Vytenis Bivainis

ffmpeg还有一个优点:它可以处理aac/ m4a文件。其他工具似乎没有(或者您知道吗?)。我还将建议搜索其FORMAT部分,以避免流中也包含title等的情况ffprobe -loglevel error -show_entries format -i "$1" 2>&1 | sed -E -n 's|^TAG:title=(.*)$|\1|p'
Jonathan Y.

@乔纳森 没错,存储在M4A容器文件中的AAC编码音频具有非ID3元数据,因此只能由ffmpeg和exiftool读取,这在我的答案中是不可行的。
mxmlnkn17年

FLAC具有与MP4 / M4A不同的另一种元数据格式,即vorbis注释元数据,但是也可以使用exiftool或来读取标签ffprobe。用于此工作的更专业的工具将metaflac --list来自flac软件包。对于ogg exiftool也可以,但是也可以vorbiscomment -lvorbis-tools包装中获得。奇怪的是,即使FLAC和OGG都有vorbis注释元数据vorbiscommentmetaflac也无法互换?
mxmlnkn

26

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

sudo apt-get install mp3info

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

mp3info -p %a file.mp3

给文件的艺术家。%a表示一个人想要获得演出者,其他标签还有其他一些键。


20
附加信息:mp3标签id3v1,id3v2.2(已淘汰),id3v2.3,id3v2.4有4种不同的标准en.wikipedia.org/wiki/ID3。文件可以具有v1和/或v2标记(是v1和v2可以共存,但是v2.x和v2.y不能共存)。我相信v2.3是使用最广泛的一种。根据ibiblio.org/mp3info(请参阅Todo),v2标签不受支持mp3info。您可能要看一下id3v2-它可以编辑/添加v2并显示v1和v2。如果您不喜欢它显示标签的方式,则可以编写一个脚本来运行id3v2和适当处理输出。
S Prasanth

@SPrasanth如何使其显示特定标签。例如:仅是mp3文件的艺术家?
Gowtham Gopalakrishnan 2014年

@Prasanth我明白了。谢谢,我正在使用-Rflag with grep获得指定的输出。
Gowtham Gopalakrishnan 2014年

当您用%t打印曲目标题时,它会打印出剪裁的标题。
图兰斯·科尔多瓦

1
不幸的是:Only ID3 versions 1.0 and 1.1 are supported
simlev

11

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

sudo apt-get install eyed3

然后,运行:

eyeD3 song.mp3

将其与合并在一起grep即可获得特定的标签。

eyeD3 song.mp3 | grep artist

(要剥离所有mp3标签,请参见此处


1
我试过了,要使用的命令是eyeD3,大写字母D;)。但是我找到了另一个更符合我的需求的工具mp3info。这样可以输出mp3标签,而无需使用grep(我更喜欢)。
red_trumpet 2012年

eyeD3对我来说效果更好,因为它可以与id3v2一起使用,但是@red_trumpet是正确的,命令应该eyeD3不正确eyed3
bmaupin 2013年

使用显示插件以所需格式输出标签:eyeD3 --plugin display -p "%t% by %a%" *
simlev

这不会显示所有标签,例如,没有ISRC。下面提到的程序id3v2也返回ISRC,但没有持续时间...
minyves

8

我更喜欢使用id3v2,只需输入即可id3v2 -l somefile.mp3。您也可以查看id3v2手册页以了解更多特定用途。


这很棒,效果很好
jpo38 '16

绝对应该是最好的答案,所有其他工具在某些发行版上都有依赖关系问题。
塞尔吉奥

mid3v2由于缺少Unicode支持,因此建议使用方法。同样id3v2的最新更新是在2013年
Pablo A

2

您可以尝试exiftool(在文件中读取和写入元信息)。

“ ExifTool是一个独立于平台的Perl库,还有一个命令行应用程序,用于读取,写入和编辑各种文件中的元信息。ExifTool支持许多不同的元数据格式,包括EXIF,GPS,IPTC,XMP,JFIF,GeoTIFF,ICC个人资料,Photoshop IRB,FlashPix,AFCP和ID3,以及佳能,卡西欧,FLIR,FujiFilm,GE,HP,JVC / Victor,柯达,Leaf,Minolta / Konica-Minolta,Motorola,尼康,任天堂,奥林巴斯/爱普生,松下/徕卡,宾得/旭,第一阶段,Reconyx,理光,三星,三洋,Sigma / Foveon和索尼。” - 由Phil Harvey制作的ExifTool

这是命令的示例:

exiftool test.mp3 
ExifTool Version Number         : 10.00
File Name                       : test.mp3
Directory                       : .
File Size                       : 8.2 MB
File Modification Date/Time     : 2016:03:02 21:44:58+01:00
File Access Date/Time           : 2016:04:06 21:34:01+02:00
File Inode Change Date/Time     : 2016:03:02 21:45:36+01:00
File Permissions                : rw-rw-r--
File Type                       : MP3
File Type Extension             : mp3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 1
Audio Layer                     : 3
Sample Rate                     : 44100
Channel Mode                    : Stereo
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : False
Emphasis                        : None
VBR Frames                      : 9544
VBR Bytes                       : 8467680
ID3 Size                        : 115419
Band                            : Tech N9ne Collabos
Album                           : Strangeulation (Deluxe Edition)
Composer                        : Tech N9ne Collabos
Genre                           : Rap & Hip-Hop
Copyright                       : 2014 Strange Music, Inc
Title                           : American Horror Story (feat. Ces Cru)
Artist                          : Tech N9ne Collabos
Track                           : 10
Year                            : 2014
Comment                         : 
Lyrics                          : 
Private                         : (Binary data 8192 bytes, use -b option to extract)
Picture MIME Type               : image/jpeg
Picture Type                    : Front Cover
Picture Description             : 
Picture                         : (Binary data 104371 bytes, use -b option to extract)
Audio Bitrate                   : 272 kbps
Date/Time Original              : 2014
Duration                        : 0:04:09 (approx)

1

查看lltag您是否正在寻找一个不仅仅支持mp3 / ID3的解决方案。

通过以下方式安装:

sudo apt-get install lltag

查看带有它的所有标签:(-S用于显示)

lltag -S somefile.mp3

使用它查看某些标签:

lltag --show-tags artist,album,title,number somefile.mp3

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.