如何在 shell 中读取 mp3 标签?

如何在 shell 中读取 mp3 标签?

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

答案1

您还可以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): 
    
  • 因为这五个程序中唯一一个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 倍。

答案2

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

sudo apt-get install mp3info

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

mp3info -p %a file.mp3

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

答案3

您可以使用眼睛3。首先,从终端安装:

sudo apt-get install eyed3

然后运行:

eyeD3 song.mp3

将其与之结合起来grep可以在一行中获取特定标签。

eyeD3 song.mp3 | grep artist

(要删除所有 mp3 标签,请参阅这里

答案4

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

“ExifTool 是一个独立于平台的 Perl 库,外加一个命令行应用程序,用于读取、写入和编辑各种文件中的元信息。ExifTool 支持许多不同的元数据格式,包括 EXIF、GPS、IPTC、XMP、JFIF、GeoTIFF、ICC Profile、Photoshop IRB、FlashPix、AFCP 和 ID3,以及佳能、卡西欧、FLIR、富士、通用电气、惠普、JVC/Victor、柯达、Leaf、美能达/柯尼卡美能达、摩托罗拉、尼康、任天堂、奥林巴斯/爱普生、松下/徕卡、宾得/朝日、Phase One、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)

相关内容