What You’ll Learn
- How to adjust brightness, contrast, saturation, and gamma with the
eqfilter - Fine-grained tone correction with the
curvesfilter - Using the
colorbalancefilter to tint shadows, midtones, and highlights - How to pick the right filter for the job
- Combining multiple filters for a practical color-correction pipeline
Tested with: FFmpeg 6.1 (ubuntu-latest / CI verified)
Platform: Windows / macOS / Linux
eq — Basic Brightness, Contrast, and Saturation Controls
The simplest color-adjustment filter.
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3:gamma=1.0" output.mp4
| Parameter | Range | Default | Description |
|---|---|---|---|
brightness | -1.0 to 1.0 | 0 | Brightness (0 = no change) |
contrast | -1000 to 1000 | 1 | Contrast (1 = no change) |
saturation | 0 to 3.0 | 1 | Saturation (1 = no change, 0 = grayscale) |
gamma | 0.1 to 10 | 1 | Gamma correction (1 = no change) |
Common Adjustments
Brighten slightly and boost contrast:
ffmpeg -i input.mp4 -vf "eq=brightness=0.05:contrast=1.3" output.mp4
Convert to grayscale:
ffmpeg -i input.mp4 -vf "eq=saturation=0" output.mp4
curves — Fine-Grained Tone Curves
An S-curve for a contrast boost:
ffmpeg -i input.mp4 -vf "curves=all='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'" output.mp4
Specify control points as all='input/output ...' (normalized 0–1).
Per-Channel Adjustments
Lift the red channel for a warmer look:
ffmpeg -i input.mp4 -vf "curves=red='0/0 0.5/0.6 1/1'" output.mp4
Lower the blue channel to reduce cool tones:
ffmpeg -i input.mp4 -vf "curves=blue='0/0 0.5/0.4 1/0.9'" output.mp4
Using Presets
ffmpeg -i input.mp4 -vf "curves=preset=vintage" output.mp4
Available presets: none, color_negative, cross_process, darker, increase_contrast, lighter, linear_contrast, medium_contrast, negative, strong_contrast, vintage.
colorbalance — Tint Shadows / Midtones / Highlights
Shift the shadows cooler (more blue) and warm the highlights slightly:
ffmpeg -i input.mp4 -vf "colorbalance=bs=0.1:rs=-0.1:gh=0.1" output.mp4
| Parameter | Description |
|---|---|
rs/gs/bs | R/G/B adjustment for shadows (-1 to 1) |
rm/gm/bm | R/G/B adjustment for midtones |
rh/gh/bh | R/G/B adjustment for highlights |
Combining Filters
Full pipeline with eq and colorbalance:
ffmpeg -i input.mp4 -vf "eq=brightness=0.05:contrast=1.1,colorbalance=rs=-0.05:bs=0.05" output.mp4
Which Filter to Use
| Goal | Recommended filter |
|---|---|
| Quickly tune brightness, contrast, or saturation | eq |
| Shape tone with curves | curves |
| Independently color shadows, midtones, and highlights | colorbalance |
| Apply a .cube LUT | lut3d |
Frequently Asked Questions
Should I use eq or curves for colour correction?
Use eq for global brightness/contrast/saturation tweaks and curves for shaping highlights/midtones/shadows independently. curves is closer to a real grading workflow.
What is the difference between gamma and brightness?
Brightness is a linear shift; gamma is a non-linear curve that brightens midtones without crushing highlights or blacks. Gamma usually looks more natural.
Why does the corrected video look greenish?
You probably touched the green curve or saturation aggressively. Reset that channel and apply changes uniformly first, then push individual channels last.
Can I apply a 3D LUT instead?
Yes — lut3d accepts .cube files: ffmpeg -i in.mp4 -vf lut3d=look.cube out.mp4. LUTs are the standard way to ship a graded look.
Does this preserve HDR colour?
No — most simple eq/curves pipelines clip HDR highlights. For HDR sources convert to linear with zscale, grade, then convert back.
Related Articles
- 3D LUT Color Grading — Apply .cube Files to Video
- Sharpening and Blurring — Adjust Clarity with the unsharp Filter
Tested with ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner) Primary sources: ffmpeg.org/ffmpeg-filters.html#curves / ffmpeg.org/ffmpeg-filters.html#eq / ffmpeg.org/ffmpeg-filters.html#colorbalance