ferraus cut
Remove one or more time ranges and join the rest
Synopsis
ferraus cut <input> [options] [-o <output>]
What it does
Deletes each --range and joins what is left with a short equal-power crossfade so the joins are seamless. The result is exactly as long as the input minus the removed time. Overlapping ranges are merged.
This command is also an fx stage and a pipeline op: ferraus fx in.wav -o out.wav --fx "cut:key=value".
Examples
Remove two stumbles and splice the rest seamlessly
ferraus cut interview.wav --range 1:02..1:09 --range 3:40..3:44 -o interview_edit.wav
Remove the first bar (four beats) of a 120 BPM song
ferraus cut song.wav --range 0s..4b --bpm 120 -o song_nointro.wav
Drop the pre-roll chatter and everything after 58:30 in one pass
ferraus cut lecture.wav --range 0s..12s --range 58:30..end -o lecture_core.wav
Hard splice with no crossfade, for an edit that lands exactly on a drum hit
ferraus cut drums.wav --range 2.5s..3s --crossfade 0ms -o drums_cut.wav
Options
| Flag | Type | Default | Meaning |
|---|---|---|---|
--range | range | — | Range to remove as start..end (repeatable), e.g. 12s..15.5s Repeatable. Required. |
--crossfade | time | 10ms | Crossfade length (duration) at each join; 0ms for a hard splice |
--crossfade-curve | equal-power | linear | equal-power | Crossfade shape: equal-power keeps loudness steady, linear keeps amplitude steady |
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.
For models
- MCP tool:
ferraus_cut - Schema:
ferraus schema cut - Pipeline:
{ op: cut, args: { ... } }(flag names with_instead of-) - fx stage: yes
{"command": "cut", "defaults": {"crossfade": "10ms", "crossfade_curve": "equal-power"}}