I want to be able to generate a new (fully valid) MP3 file from an existing MP3 file to be used as a preview -- try-before-you-buy style. The new file should only contain the first n seconds of the track.

Now, I know I could just "chop the stream" at n seconds (calculating from the bitrate and header size) when delivering the file, but this is a bit dirty and a real PITA on a VBR track. I'd like to be able to generate a proper MP3 file.

Anyone any ideas?

Answers

Both mp3split and ffmpeg are both good solutions. I chose ffmpeg as it is commonly installed on linux servers and is also easily available for windows. Here's some more good command line parameters for generating previews with ffmpeg

9 Answers
9

I also recommend ffmpeg, but the command line suggested by John Boker has an unintended side effect: it re-encodes the file to the default bitrate (which is 64 kb/s in the version I have here at least). This might give your customers a false impression of the quality of your sound files, and it also takes longer to do.

Here's a command line that will slice to 30 seconds without transcoding:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

The -acodec switch tells ffmpeg to use the special "copy" codec which does not transcode. It is lightning fast.

Just a thought: you may want to skip the beginning of the original song. Say, you can use 30 seconds piece starting at the third of the song.
In some songs, the first 30 seconds doesn't tell you much as it's just a "setting up the scene" part - for instance Pink Floyd's Shine On You Crazy Diamond.