8

I need to split mp3 file into slices TIME sec each. I've tried mp3splt, but it doesn't work for me if output is less than 1 minute. Is it possible do do with:

sox file_in.mp3 file_out.mp3 trim START LENGTH

When I don't know mp3 file LENGTH

4ae1e1
  • 7,228
  • 8
  • 44
  • 77
Łukasz D. Tulikowski
  • 1,440
  • 1
  • 17
  • 36
  • what about ffmpeg, can you use it? – jaroslawj Nov 08 '15 at 19:24
  • Would you be OK with splitting by file size? What is the purpose of the splitting? – l0b0 Nov 08 '15 at 20:19
  • I don't know about sox, but with ffmpeg you can do `ffmpeg -ss $starting_timestamp -i $input -t $length -c copy $output`. Anyway, I think this question is off topic. Should be migrated to SuperUser. – 4ae1e1 Nov 08 '15 at 20:20
  • By the way, you can easily find the length with `ffprobe`. Sample command to find length in seconds: `ffprobe -show_format -print_format json $input 2>/dev/null | jq -r ".format.duration"`. – 4ae1e1 Nov 08 '15 at 20:22

2 Answers2

15

You can run SoX like this:

sox file_in.mp3 file_out.mp3 trim 0 15 : newfile : restart

It will create a series of files with a 15-second chunk of the audio each. (Obviously, you may specify a value other than 15.) There is no need to know the total length.

Note that SoX, unlike mp3splt, will decode and reencode the audio (see generation loss). You should make sure to use at least SoX 14.4.0 because previous versions had a bug where audio got lost between chunks.

chirlu
  • 3,141
  • 2
  • 21
  • 22
4

There are two use case trim in sox:

sox file_in.mp3 file_out.mp3 trim START LENGTH

and

sox file_in.mp3 file_out.mp3 trim START =END

In last example you need to know the END position instead of LENGTH

Dima Melnik
  • 862
  • 9
  • 23