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
| Flag | Type | Default | Meaning |
|---|---|---|---|
--at | time | — | Split point (time, repeatable), e.g. 1:30 or 64b Repeatable. |
--every | time | — | Split into equal chunks of this duration, e.g. 30s |
--on-silence | flag | — | Split in the middle of each silent gap |
--silence-threshold | gain | -40dB | Level (dBFS) below which audio counts as silence for --on-silence |
--min-silence | time | 500ms | Shortest gap (duration) that counts as a split point for --on-silence |
--snap | zero | off | zero | zero: 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
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Processing failed |
| 2 | Usage or parameter error |
| 3 | Input missing or unreadable |
| 4 | Unsupported format or codec |
| 8 | Cancelled |
| 70 | Internal error (bug) |
Common mistakes
- Forgetting that outputs are never overwritten: pass
--overwriteor a new-opath when re-running. - Beat-based times (
4b,1/4) need a tempo: pass--bpmor write4b@120. - Gains need a unit when not in dB:
0.5xis a factor,-6and-6dBare 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"}}