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 (verified against real FFmpeg)
Platform: Windows / macOS / Linux
eq — Basic Brightness, Contrast, and Saturation Controls
The simplest color-adjustment filter. Each parameter is explored in depth in adjusting brightness, contrast, and saturation with eq.
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
Control-point placement and per-channel shaping are covered in detail in tone curve color correction with 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 |
Measured Example
This example applies a light color correction to a 1080p/30fps, 2-minute H.264 video:
ffmpeg -i input.mp4 \
-vf "eq=brightness=0.04:contrast=1.12:saturation=1.15,colorbalance=bs=0.04:rh=0.03" \
-c:v libx264 -crf 23 -preset medium -c:a copy \
output.mp4
eq and colorbalance are relatively light filters, but any video filter requires video re-encoding. On a typical 8-core desktop, processing often lands around 1–2x real time.
File size is driven more by -crf, -preset, and source noise than by the filter names themselves. Lifting dark areas can reveal noise and slightly increase size at the same CRF. Results vary by environment.
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 (検証スクリプトで実行確認) Primary sources: ffmpeg.org/ffmpeg-filters.html#curves / ffmpeg.org/ffmpeg-filters.html#eq / ffmpeg.org/ffmpeg-filters.html#colorbalance