ferraus concat

Join files end to end, optionally with crossfades or gaps

Synopsis

ferraus concat <inputs...> [options] [-o <output>]

What it does

Joins the inputs in the order given. --crossfade overlaps the end of each file with the start of the next (each overlap shortens the result by the crossfade length); --gap inserts silence instead. With --match on (the default) every input is resampled and remixed to the first file's sample rate and channel count.

Examples

Join three files back to back

ferraus concat intro.wav body.wav outro.wav -o episode.wav

DJ-style 3-second equal-power crossfade; b.mp3 is converted to a.flac's format

ferraus concat a.flac b.mp3 --crossfade 3s -o mix.flac

Join every take with a second of silence between them

ferraus concat take*.wav --gap 1s -o all_takes.wav

Options

FlagTypeDefaultMeaning
--crossfadetime0msOverlap (duration) between consecutive files, e.g. 2s
--crossfade-curveequal-power | linearequal-powerCrossfade shape: equal-power keeps perceived loudness constant through the overlap
--gaptime0msSilence (duration) inserted between files
--matchon|offonResample and remix inputs to the first file's sample rate and channels; off fails on a mismatch

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_concat
  • Schema: ferraus schema concat
  • Pipeline: { op: concat, args: { ... } } (flag names with _ instead of -)
  • fx stage: no
{"command": "concat", "defaults": {"crossfade": "0ms", "crossfade_curve": "equal-power", "gap": "0ms", "match": "on"}}