当前位置: 首页>>技术教程>>正文


如何在shell中读取mp3标签?

, , ,

问题描述

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

最佳解决思路

您也可以使用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" | grep 'title'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^TIT2 \([^)]*\): (.*)/\1/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -n '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

笔记:

  • lltagmp3info找不到标题,因为我使用的文件有ID3v2标签,请参阅@ s-prasanth评论:How to read mp3 tags in shell?

  • eyeD3以编程方式使用是有问题的,因为它使用颜色代码(粗体)。

  • eyeD3id3v2(但仅限于ID3 v1标签)将标题和艺术家放在同一行上,这使事情变得更加复杂;因此getTitleEyed和有时getTitleId3都返回标题和艺术家,所以请不要copy-paste这些功能。

  • getTitleId3仅适用于ID3 v2标签,因为id3v2具有不同的ID3v1和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标签,因为这两个文件是lltagmp3info可以获得标题的唯一文件。我想知道这是否是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

这里的获胜者Time-wise是id3tool(mp3info更快,但不适用于ID3 v2)。 id3v2也非常快,但getTitleId3功能需要调整才能与ID3v1标签一起使用,这可能最坏的情况可能会减慢2倍。

次佳解决思路

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

sudo apt-get install mp3info

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

mp3info -p %a file.mp3

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

第三种解决思路

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

sudo apt-get install eyed3

然后,运行:

eyeD3 song.mp3

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

eyeD3 song.mp3 | grep artist

(要删除所有mp3标签,请参阅HERE)

第四种思路

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

第五种思路

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

“ExifTool is a platform-independent Perl library plus a command-line application for reading, writing and editing meta information in a wide variety of files. ExifTool supports many different metadata formats including EXIF, GPS, IPTC, XMP, JFIF, GeoTIFF, ICC Profile, Photoshop IRB, FlashPix, AFCP and ID3, as well as the maker notes of many digital cameras by Canon, Casio, FLIR, FujiFilm, GE, HP, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Motorola, Nikon, Nintendo, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma/Foveon and Sony.” – ExifTool by Phil Harvey

以下是该命令的示例:

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)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2195.html,未经允许,请勿转载。