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

FlagTypeDefaultMeaning
--rangerange—Range to remove as start..end (repeatable), e.g. 12s..15.5s Repeatable. Required.
--crossfadetime10msCrossfade length (duration) at each join; 0ms for a hard splice
--crossfade-curveequal-power | linearequal-powerCrossfade 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

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.

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"}}