Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Crop MP3 to first 30 seconds

Tags:

ffmpeg

mp3

Original Question

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

  • -t <seconds> chop after specified number of seconds
  • -y force file overwrite
  • -ab <bitrate> set bitrate e.g. -ab 96k
  • -ar <rate Hz> set sampling rate e.g. -ar 22050 for 22.05kHz
  • -map_meta_data <outfile>:<infile> copy track metadata from infile to outfile

instead of setting -ab and -ar, you can copy the original track settings, as Tim Farley suggests, with:

  • -acodec copy
like image 906
Cheekysoft Avatar asked Sep 04 '08 14:09

Cheekysoft


4 Answers

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.

NOTE: the command was updated based on comment from Oben Sonne

like image 63
Tim Farley Avatar answered Sep 21 '22 23:09

Tim Farley


If you wish to REMOVE the first 30 seconds (and keep the remainder) then use this:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
like image 31
the.jxc Avatar answered Sep 24 '22 23:09

the.jxc


try:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
like image 18
John Boker Avatar answered Sep 21 '22 23:09

John Boker


This command also works perfectly. I cropped my music files from 20 to 40 seconds.

-y : force output file to overwrite.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
like image 14
Rahul Chauhan Avatar answered Sep 21 '22 23:09

Rahul Chauhan