Мне нужен скрипт или инструмент командной строки cmd для получения длины mp3 в миллисекундах. Файлы моно cbr 64 кбит, закодированные с помощью lame.
(Я искал libmad для ruby, моего языка, но не нашел ничего примечательного ...)
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
Попробуйте 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)
Я знаю, что ffmpeg может сделать это легко:
ffmpeg -i file.mp3 2>&1|sed -n "s/.*Duration: \([^,]*\).*/\1/p"
К сожалению, я не знаю ни одной библиотеки Ruby, которая бы занималась этим.
http://id3lib -ruby.rubyforge.org / ? Эта страница содержит код, который вам нужен.