mp3长度,以毫秒为单位

时间:2009-06-14 22:56:54

标签: ruby parsing mp3

我需要一个脚本或cmd行工具获取mp3长度(以毫秒为单位)。这些文件是64 kbits mono cbr编码的跛脚。

(我找了一个红宝石的libmad,我选择的语言,但没有发现任何值得注意的......)

4 个答案:

答案 0 :(得分:5)

def self.get_audio_length(filepath)
  pipe = "ffmpeg -i "+ filepath.to_s+" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//"
  command = `#{pipe}`
  if command =~ /([\d][\d]):([\d][\d]):([\d][\d]).([\d]+)/
    #convert the result to only secs
    duration = ($2.to_i * 60) + $3.to_i
  end
  #return and array containing the seconds and the human readable time length, ["6453","03:54"]
  return "#{duration.to_s},#{$2}:#{$3}".split(",")
end

答案 1 :(得分:3)

尝试exiftool

$ sudo apt-get install libimage-exiftool-perl

$ exiftool "Stone Sour-Stone Sour-Bother.mp3"

ExifTool Version Number         : 6.93
File Name                       : Stone Sour-Stone Sour-Bother.mp3
Directory                       : .
File Size                       : 6 MB
File Modification Date/Time     : 2006:05:15 19:09:52
File Type                       : MP3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 1
Audio Layer                     : 3
Audio Bitrate                   : 128000
Sample Rate                     : 44100
Channel Mode                    : Joint Stereo
MS Stereo                       : On
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : True
Emphasis                        : None
Album                           : Stone Sour
Artist                          : Stone Sour
Comment                         : *** / Foobar2000: MPC->MP3
Genre                           : Rock
Title                           : Bother
Track                           : 08
Recording Time                  : 2002
User Defined Text               : (sub-genre) Alt Metal
Year                            : 2002
Duration                        : 0:06:03.67 (approx)

答案 2 :(得分:2)

http://id3lib-ruby.rubyforge.org/This page拥有您需要的代码。

答案 3 :(得分:1)

我知道ffmpeg可以很容易地做到这一点:

ffmpeg -i file.mp3 2>&1|sed -n "s/.*Duration: \([^,]*\).*/\1/p"

不幸的是,我不知道任何处理此问题的Ruby库。