Add a vintage film-grain effect
The `grain` filter adds film-like noise to a video so a clean digital source can read as analog, archival, or hand-processed. It is a stylistic effect — you would not use it for documentary footage you want to look neutral, but it is a one-line effect for moody montage or title sequences.
The command
ffmpeg -i in.mp4 -vf "grain=8:2" -c:v libx264 -crf 20 out.mp4What it does
The two numbers are grain amount and grain variance. Higher amounts make the noise more visible; higher variance makes the noise look more like real film grain (coarser in shadows, finer in highlights). For a subtle effect that survives web compression, start at `grain=4:1`. For a heavy look, push to `grain=15:5`.
Requirements
Any video input. The filter is in libavfilter. CPU-only. Since the effect is added before encoding, the encoder will spend extra bits encoding the noise — set your CRF one or two points higher than usual to keep the file size similar.
Things to avoid
- Expecting a stable grain pattern across frames. The filter seeds a different noise per frame, so the grain shimmers. This is the desired look, but if you need a fixed pattern, use `geq` with a static noise function.
- Adding grain to a dark scene. Grain is most visible in shadows and will look like compression noise on bright content.
- Combining grain with denoise. They fight each other; the denoise will smooth out the grain you just added. Apply grain as the last step before encoding.
- Forgetting to set a deterministic seed. The filter takes a random seed, so two runs will produce slightly different grain patterns. Use the `noise=...:seed=12345` variant of the noise filter if you need a reproducible look.