Ruby MP3 ID3解析

9

我目前正在进行一个音乐项目,涉及用户上传的mp3文件。问题是我找不到一个能正确处理所有文件的id3库。

我已经尝试了id3-rubyMp3Info库,但它们都不能给我一致正确的结果。

例如,最常见的问题:

  • 流参数错误(比特率和采样率,有时候还有时长)
  • 不支持扩展标签

我决定添加一个表单,让用户提供可选信息,如艺术家和标题;这有所帮助,但并没有完全解决问题。

哪个是Ruby中最实用和强大的ID3库?


你能否发布一个需要支持的标签列表吗?谢谢。 - Tilo
5个回答

6

我对整个MP3库都使用了它,没有遇到任何问题。不过我没有处理比特率/采样率,所以无法评论那方面的情况。 - Ana Betts
这个库仍然活跃...太棒了。 - Franklin Yu

4
我用过以下两种方式来解析 MP3 文件的信息:
1. 访问http://ruby-mp3info.rubyforge.org/,然后下载使用。
2. 直接在命令行中输入 gem install ruby-mp3info,如果你是 Mac 或 *nix 用户,需要加上 sudo 权限。这个库附带了一些 rdoc 文档,很不错。但缺点是字段名称都是大写,看起来有些别扭,可能需要自己添加别名。下面这个示例脚本可以扫描我的音乐库并统计歌曲标题中的单词数:
require 'mp3info'

count = 0
words = Hash.new { |h, k| h[k] = 0 }
Dir.glob("E:/MUSIC/**/*.mp3") do |f|
  count += 1
  Mp3Info.open(f) do |mp3info|
    title = mp3info.tag2.TIT2
    next unless title
    title.split(/\s/).each { |w| words[w.downcase] += 1 }
  end
end
puts "Examined #{count} files"
words.to_a.sort{ |a, b| b[1] <=> a[1] }[0,100].each { |w| puts "#{w[0]}: #{w[1]}" }

谢谢您的建议。但是这个界面看起来很复杂。我想要像id3lib-ruby一样的东西。例如:tag = ID3Lib :: Tag.new('test.mp3') tag.title#test_title tag.title ='new_title' tag.udpate!#test.mp3的标题已更新为new_title - rpattabi

1
截至2019年,最好的答案是:

所有其他库都已经很久没有维护了。

Krists Ozols' ID3Tag 的特点

  • 只读
  • 可以读取 v1.x、v2.2.x、v2.3.x、v2.4.x 标签
  • 支持 UTF-8、UTF-16、UTF-16BE 和 ISO8859-1 编码
  • 最后更新于2018年7月
  • 纯 Ruby

Moumar's ruby-mp3info 的特点

  • 读和写
  • 仅支持2.3版本写入id3v2标签
  • id3v2标签始终以UTF-16编码写入
  • 最近更新于2017年4月
  • Pure Ruby

taglib-ruby的特点

  • 读和写
  • 许多格式,不仅仅是Mp3
  • 读/写ID3v1和ID3v2,包括ID3v2.4和Unicode
  • 最近更新于2018年5月
  • 一个良好维护的C++库的绑定

0

id3tag 是另一个选项。例如:

require "id3tag"

mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"

0

是的,但有时这个库不正确地工作,所以我决定转换到更好的东西。 - Dan Sosedoff
似乎它不支持UTF-8。否则很整洁。 - rpattabi
3
这是基于不再维护的id3lib库开发的。如果你想使用同一作者(我)的最新库,请尝试taglib-ruby - robinst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接