问题描述

有没有办法从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

笔记:

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

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

eyeD3和id3v2(但仅限于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标签,因为这两个文件是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

这里的获胜者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)

参考资料

linux获取mp3信息,如何在shell中读取mp3标签?相关推荐

  1. 在linux中播放mp3文件格式,如何在Ubuntu中播放MP3

    如果您已经从Windows OS转向Ubuntu,那么似乎很难使用基于Linux的OS,尤其是命令行.因为大多数Linux功能都基于命令行.即使是大多数Linux用户,也喜欢运行完全依赖终端的Linu ...

  2. java mp3 信息_如何用Java读取MP3文件的Tag信息

    展开全部 以随机读写方式打开一个MP3文件 将文件指针偏移量移动到文件长度倒数128位 判断标签头"TAG"是否存在 读取62616964757a686964616fe78988e ...

  3. 如何在spring中读取properties配置文件里面的信息

    如何在spring中读取properties配置文件里面的信息 <!-- 正文开始 --> 一般来说.我们会将一些配置的信息放在.properties文件中. 然后使用${}将配置文件中的 ...

  4. 通过 WMI 从 Linux 获取 Windows 信息/尝试运行程序

    有一个工具可以通过 WMI 从 Linux 获取 Windows 信息,所以我试了一下. 如果这个和ZABBIX能很好的连接起来,看来可以实现真正的无代理(不是通过SNMP). 安装方法如下 1 2 ...

  5. 关于php:如何在Guzzle中读取响应有效的URL?6.0(Guzzle获取重定向后的实际请求地址URL)

    本文转自关于php:如何在Guzzle中读取响应有效的URL?6.0 How to read the response effective URL in Guzzle ~6.0 我已经搜索了大约2个小 ...

  6. adb shell读取返回值_如何在ADB shell中读取耳机状态和读取ACCDET寄存器

    如何在ADB shell中读取耳机状态和读取ACCDET寄存器 录入:edatop.com    点击: [Description] 如何在ADB shell中读取耳机状态和读取ACCDET寄存器 [ ...

  7. accept标头 php,如何在PHP中读取任何请求标头

    如何在PHP中读取任何请求标头 我应该如何阅读PHP中的任何标题? 例如,自定义标头:X-Requested-With. Sabya asked 2019-02-28T12:09:45Z 14个解决方 ...

  8. 手机nfc_如何在Android中编写NFC标签

    手机nfc 这篇文章介绍了如何在Android中使用NFC编写智能标签. Android智能手机不仅能够读取包含URL,电话号码等数据的NFC标签,但使用Android NFC Api可以写入NFC标 ...

  9. 如何在 Python 中读取 .data 文件?

    什么是 .data 文件? 创建.data文件是为了存储信息/数据. 此格式的数据通常以逗号分隔值格式或制表符分隔值格式放置. 除此之外,该文件可以是二进制或文本文件格式.在这种情况下,我们将不得不找 ...

最新文章

  1. 人脸识别未来发展如何更有“面子”?
  2. python语言代码片段-有用的Python代码片段
  3. 实战并发编程 - 08基于Guarded Suspension模式优化轮询while(true)
  4. 三十六、数据仓库的实现
  5. top进阶命令htop运用
  6. 蒙特卡罗方法求一个三维积分(论坛帮顶)
  7. python网站设计理念_简单介绍下python Django框架的历史,设计理念及优势_Django讲解2...
  8. pandas处理csv
  9. Cocos2d-x 3.2:通过ClippingNode实现一个功能完善的跑马灯公告(1)
  10. python语言中包含的标准数据类型_Python对象——标准类型的分类
  11. StringUtils详细介绍
  12. jquery-事件绑定
  13. 数字图像处理-- 图像的统计方法
  14. 关于解决Python中requests模块在PyCharm工具中导入问题
  15. 【PDN仿真笔记4-电容布局仿真及结果分析】
  16. silktest 破解 转帖未验证
  17. IT服务及相关概念界定
  18. python抽奖游戏、某商场为了促销_详解python--模拟轮盘抽奖游戏
  19. 2022 CCF中国开源大会—开放原子开源创新发展论坛即将开幕
  20. 编辑器下运行exe或bat run exe or bat in editor

热门文章

  1. 帝国php忘记密码,一键帝国CMS快速重置管理员密码工具(送给忘记密码的站长)...
  2. 设计师建筑师太难了,既要学BIM、无人机,还要学GIS!
  3. [开发日志]2d传统动画软件:Tracer
  4. 系统服务器采购,用勤哲Excel服务器实现采购预算管理系统
  5. 《六顶思考帽》读后感
  6. 富士协议转换网关WTGNet-FJ
  7. matlab fft 幅度,相位
  8. 将阿拉伯数字转换为中文数字: 123 -> 一二三
  9. Allegro·芯片GND引脚铺铜问题及解决方案)
  10. shell是什么?shell与linux的区别是什么?