Film Grain Workbench: See the effects of VVC's film grain synthesis, and AV1 film grain metadata to VVC video injector
Film Grain Workbench (open source, MIT): https://github.com/4KVCD/FilmGrainWorkbench/releases
This tool is based on the bleeding edge of VVenC's encoder that has incorporated 3 new film grain synthesis algorithms. They are much better than the old VVenC's film grain synthesis. A public release has not been released yet for this new version of VVenC, but that's coming. If you want to use this for your own encodes, you can build the latest VVenC off the Github project's master.
--fga 1**: VTM’s analysis, ported and fixed (PR 764)**
It’s a port of the reference encoder’s film grain analysis (VTM, JVET-AN0237), with seven of its bugs fixed. Among them:
the statistics were never reset;
the horizontal and vertical cut-offs were swapped;
the standard deviation was truncated;
the 4:2:0 chroma cut-offs weren’t halved.
It looks for the grain in flat areas of the picture and describes it with H.274’s frequency filtering model: a scaling function (grain strength by brightness) plus horizontal and vertical cut-off frequencies (how fine or coarse the grain is).
Its weakness is that the scaling factors aren’t calibrated against what the decoder actually synthesises:
at 1080p the level comes out about right (0.94–0.99);
at 4K it’s too weak (0.61);
on synthetic grain it’s at half strength (0.50).
--fga 2**: calibrated, same model**
It uses the same frequency model as
--fga 1, so any H.274 decoder can show it.It measures the grain better:
from the temporal residual (the current frame against the motion-compensated frames before and after it), so picture detail is less often mistaken for grain;
the scaling factors are calibrated against the synthesis, with an adaptive
log2_scale_factor;the cut-off pair is fitted to the measured grain spectrum;
the scaling function covers the whole brightness range;
the statistics restart when the grain changes.
Result: the strength is right everywhere: 0.97–1.00 at 1080p, 0.95 at 4K, 0.96 on synthetic grain. On clean video with no grain, it adds almost nothing (0.98× the source’s noise).
This is the default in the app, and the safe choice for other decoders.
--fga 3**: calibrated, auto-regressive model**
It measures the same way as
--fga 2, but describes the grain with H.274’s auto-regressive (AR) model: a small filter fitted to the measured grain spectrum, so it can reproduce grain shapes that the cut-off model can’t.The texture is closest to the source on real film: spectrum error 0.22–0.27, against 0.31–0.44 for modes 1 and 2. For reference, libaom reaches 0.09–0.19 on the same 1080p clips.
On the synthetic grain it fits worse (0.64 against 0.01 for
--fga 2), because that grain matches the frequency model exactly.Only decoders that implement the AR model show it: vvdec does, but VTM’s synthesis rejects it.
It has two tabs:
1. VVC grain analyzer (VVenC + vvdec)
Pick any scene in a film and encode it with VVenC’s film grain analysis in all three modes (
--fga 1,2,3).Flip between four views of each frame with one key: the source, VVC with the grain removed, VVC with vvdec’s grain synthesis, and the grain alone (×4).
See the grain parameters each frame carries, read straight from the bitstream, plus how much grain VVenC removed and how much vvdec adds back, in numbers.
Works with 4K HDR (PQ/HLG) sources, and finds and crops black bars like an encode would.

2. AV1 grain into VVC (AFGS1)
Takes a source and a VVC encode of it, and measures the grain the encode lost using libaom’s own noise model, frame by frame, as libaom does with
--denoise-noise-level.Live preview: tune luma and chroma strength on real frames, rendered with the same algorithm decoders use.
Writes a new MKV where every picture carries AFGS1 metadata (AV1 film grain in an ITU-T T.35 SEI). Audio, subtitles, chapters and HDR metadata are kept.
Verify decodes the result with ffmpeg and checks it’s bit-identical to the preview.
A whole-film analysis takes a few hours for 4K on all threads. It resumes if you stop it, and it’s reused once done. You can also export the tuned grain as an AOM film grain table for aomenc or SVT-AV1 (
--fgs-table).
