ferraus split

Split a file into parts at times, at silences, or into equal chunks

Synopsis

ferraus split <input> [options] [-o <output>]

What it does

Writes one file per part, named <input>.001.<ext>, <input>.002.<ext>, ... (or from an -o template using {stem} for the part number). Split points come from --at (repeatable), --every (equal chunks), and/or --on-silence (the middle of each silent gap); several sources are combined. Points snap to zero crossings so no part starts or ends with a click. Nothing is lost: the parts join back into the input exactly.

Examples

Cut a long recording into 10-minute files

ferraus split podcast.wav --every 10:00 --outdir parts/

Split a vinyl side into tracks at the gaps (track001.flac, track002.flac, ...)

ferraus split side_a.flac --on-silence --min-silence 2s -o 'track{stem}.flac'

Split at two times and report the parts as JSON

ferraus split song.wav --at 0:45 --at 2:10 --json

Options

FlagTypeDefaultMeaning
--attime—Split point (time, repeatable), e.g. 1:30 or 64b Repeatable.
--everytime—Split into equal chunks of this duration, e.g. 30s
--on-silenceflag—Split in the middle of each silent gap
--silence-thresholdgain-40dBLevel (dBFS) below which audio counts as silence for --on-silence
--min-silencetime500msShortest gap (duration) that counts as a split point for --on-silence
--snapzero | offzerozero: move split points to the nearest zero crossing (within 5 ms); off: exact samples

Global options

Every command also accepts the global options (-o, --json, --dry-run, --overwrite, --progress, ...). See Global options.

Exit codes

CodeMeaning
0Success
1Processing failed
2Usage or parameter error
3Input missing or unreadable
4Unsupported format or codec
8Cancelled
70Internal error (bug)

Common mistakes

  • Forgetting that outputs are never overwritten: pass --overwrite or a new -o path when re-running.
  • Beat-based times (4b, 1/4) need a tempo: pass --bpm or write 4b@120.
  • Gains need a unit when not in dB: 0.5x is a factor, -6 and -6dB are decibels.

For models

  • MCP tool: ferraus_split
  • Schema: ferraus schema split
  • Pipeline: { op: split, args: { ... } } (flag names with _ instead of -)
  • fx stage: no
{"command": "split", "defaults": {"silence_threshold": "-40dB", "min_silence": "500ms", "snap": "zero"}}