Get MP3 Length in Linux / FreeBSD
I have a bunch of mp3 files with various length. I want to cut it down to 50%-60% length. Says, from 1 minute down to 30 seconds. It should be trivial using ffmpeg. But, I don't know how to determine the original length of it as a base for processing using ffmpeg.
Anyone have an idea?
With ffmpeg there's no way I know to get the length as a variable you can use on a script. But mp3info does.
mp3info -p "%S" sample.mp3 // total time in seconds
ffmpeg
will print everything it knows about the file if you don't give it any other arguments. Use grep
to strip out everything but the "Duration":
$ ffmpeg -i foo.mp3 2>&1 | grep Duration
Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s
You could also use mplayer
. Grep for line "ID_LENGTH=":
$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00
Interestingly the EXIFTool application gives MP3 duration as the last line!
$ exiftool somefile.mp3 ExifTool Version Number : 7.98 File Name : somefile.mp3 Directory : . File Size : 49 MB File Modification Date/Time : 2009:09:10 11:04:54+05:30 File Type : MP3 MIME Type : audio/mpeg MPEG Audio Version : 2.5 Audio Layer : 3 Audio Bitrate : 64000 Sample Rate : 8000 Channel Mode : Single Channel MS Stereo : Off Intensity Stereo : Off Copyright Flag : False Original Media : True Emphasis : None ID3 Size : 26 Genre : Blues Duration : 1:47:46 (approx)
Just another way to get the duration only using ffmpeg
and grep
:
# ffmpeg -i rara.mp3 2>&1 |grep -oP "[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2}"
00:03:49.12