2009-06-14 8 views
1

J'ai besoin d'un script ou d'un outil de ligne cmd pour obtenir une longueur de mp3 en millisecondes. Les fichiers sont de 64 kbits mono codés avec lame.longueur mp3 en millisecondes

(je cherchais un libmad pour le rubis, ma langue de choix, mais n'a rien trouvé à noter ...)

+0

Avez-vous besoin de l'heure actuelle, ou ce que disent les balises ID3? –

Répondre

3

Essayez 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) 
+0

le calcule-t-il ou est-il stocké dans les métadonnées? – luca

+0

'brew install exiftool' si vous êtes sur Mac. – Nobu

+0

@luca: La plupart de ces informations sont dans les métadonnées. –

1

Je sais ffmpeg peut le faire facilement:

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

Malheureusement, je ne sais pas Ruby bibliothèque qui gère cela.

4
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 
Questions connexes