ferraus graphic-eq
Linear-phase graphic equalizer (10, 20, or 30 bands)
Synopsis
ferraus graphic-eq <input> [options] [-o <output>]
What it does
Sets a gain at each ISO band centre (octave, half-octave, or third-octave), joins them with a smooth curve over log-frequency, and applies it as one linear-phase FIR filter, so there is no phase distortion and the output stays aligned with the input. --accuracy is the FIR length: longer resolves low bands more precisely. The metrics report the realised gain at each centre.
This command is also an fx stage and a pipeline op: ferraus fx in.wav -o out.wav --fx "graphic-eq:key=value".
Examples
Ten-band smile curve
ferraus graphic-eq mix.wav --gains "+3,+2,0,0,-2,0,0,+1,+2,+2" -o eq.wav
Third-octave cut at 63 and 80 Hz with a shorter filter
ferraus graphic-eq vox.wav --bands 30 --gains "0,0,0,0,-3,-3" --accuracy 500ms -o eq.wav
Half-octave EQ: cut mud at 63-88 Hz and lift presence at 2.8-4 kHz
ferraus graphic-eq vox.wav --bands 20 --gains "0,0,-4,-2,0,0,0,0,0,0,0,0,0,+2,+3" -o vox_eq.wav
Roll off the top two octave bands (8 and 16 kHz) to tame hiss
ferraus graphic-eq tape.wav --gains "0,0,0,0,0,0,0,0,-3,-6" -o tape_eq.wav
Options
| Flag | Type | Default | Meaning |
|---|---|---|---|
--bands | 10 | 20 | 30 | 10 | Number of bands: 10 (octaves), 20 (half octaves), or 30 (third octaves) |
--gains | list | 0 | Gain per band in dB from the lowest band up, e.g. "+2,0,-3"; missing bands are 0 |
--accuracy | time | 1000ms | FIR length (time); longer is more precise in the low bands |
--mix | percent | 100% | Dry/wet balance: 0% returns the input unchanged, 100% is fully processed |
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_graphic_eq - Schema:
ferraus schema graphic-eq - Pipeline:
{ op: graphic-eq, args: { ... } }(flag names with_instead of-) - fx stage: yes
{"command": "graphic-eq", "defaults": {"bands": "10", "gains": "0", "accuracy": "1000ms", "mix": "100%"}}