热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

问题描述有没有办法从shell读取文件的mp3标签?类似于:mp3tagsMyFile.mp3author应输出mp3文件的author-tag。最佳解

问题描述

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

参考资料



推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
author-avatar
处女冰水洗尘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有