What You’ll Learn

  • How to adjust brightness, contrast, saturation, and gamma with the eq filter
  • Fine-grained tone correction with the curves filter
  • Using the colorbalance filter 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
ParameterRangeDefaultDescription
brightness-1.0 to 1.00Brightness (0 = no change)
contrast-1000 to 10001Contrast (1 = no change)
saturation0 to 3.01Saturation (1 = no change, 0 = grayscale)
gamma0.1 to 101Gamma 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
ParameterDescription
rs/gs/bsR/G/B adjustment for shadows (-1 to 1)
rm/gm/bmR/G/B adjustment for midtones
rh/gh/bhR/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

GoalRecommended filter
Quickly tune brightness, contrast, or saturationeq
Shape tone with curvescurves
Independently color shadows, midtones, and highlightscolorbalance
Apply a .cube LUTlut3d

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.


  • 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