问题
Currently I'm working on a music project, dealing with user mp3 uploads. The problem is that I can't find an id3 library that will work correctly for all files.
I have tried id3-ruby
and Mp3Info
libs but none of them gives me consistently correct results.
For example, most common problems:
- wrong stream parameters (bitrate and sample rate, sometimes duration)
- doesn't support extended tags
I decided to add a form, where users can supply optional information like Artist and title; that helped a little, but didn't completely solve the problem.
What's the most usable and powerful ID3 library for ruby?
回答1:
http://www.hakubi.us/ruby-taglib/
I used this for a project and it worked quite well. Wrapper around taglib, which is very portable.
回答2:
I've used this:
http://ruby-mp3info.rubyforge.org/
or
gem install ruby-mp3info
(add the regulation sudo
for Mac or *nix)
There's some rdoc documentation, which is nice. On the downside, I don't much like the use of upper-case field names, which seems too concerned to preserve the names from the spec. Maybe I should hack in some aliases. Anyway, this sample script scans my music library and counts words in titles:
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]}" }
回答3:
http://id3lib-ruby.rubyforge.org/
I particularly liked this one, you can also write tags to the file.
回答4:
id3tag is another option. Example:
require "id3tag"
mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"
回答5:
As of 2019, the best answers are:
- Krists Ozols' ID3Tag
- Moumar's ruby-mp3info
- taglib-ruby
All other libraries are long-since unmaintained.
Krists Ozols' ID3Tag distinguishing characteristics
- read only
- Can read v1.x, v2.2.x, v2.3.x, v2.4.x tags
- Supports UTF-8, UTF-16, UTF-16BE and ISO8859-1 encoding
- last updated July 2018
- Pure Ruby
Moumar's ruby-mp3info distinguishing characteristics
- read and write
- Only 2.3 version is supported for writings id3v2 tags
- id3v2 tags are always written in UTF-16 encoding
- last updated April 2017
- Pure Ruby
taglib-ruby distinguishing characteristics
- read and write
- Many formats, not just Mp3
- Reading/writing ID3v1 and ID3v2 including ID3v2.4 and Unicode
- last updated May 2018
- Binding of a well-maintained C++ library
来源:https://stackoverflow.com/questions/972526/ruby-mp3-id3-parsing