VP9 Low Bitrate Blocking Artifacts Explained
When the libvpx-vp9 encoder is severely starved of
bitrate, it prioritizes structural layout over fine detail, resulting in
distinct visual degradation. This article examines the most common
blocking and compression artifacts that occur under extreme VP9 bitrate
starvation, explaining why they happen and how they manifest in the
final video output.
Blockiness and Macroblock Boundary Visibility
VP9 utilizes a hierarchical coding tree structure with “superblocks” sized up to 64x64 pixels, which can be recursively subdivided down to 4x4 blocks. When the encoder lacks the bitrate to store residual detail, it applies heavy quantization. This forces large spatial areas to be represented by single, flat-colored blocks. As a result, the boundaries of these 64x64, 32x32, or 16x16 blocks become highly visible to the human eye, transforming smooth textures or gradients into a harsh, mosaic-like grid.
Color Banding (Posterization)
In areas with gentle color gradients, such as skies, sunsets, or
out-of-focus backgrounds, severe bitrate starvation forces the encoder
to aggressively quantize the DC coefficients of the blocks. Instead of
encoding a smooth transition, libvpx-vp9 groups similar
colors into flat, solid-colored steps. This creates a distinct
stair-step pattern known as color banding or posterization, where the
boundaries between different shades are sharp and highly noticeable.
Ringing Artifacts and Mosquito Noise
Ringing artifacts appear as “halos” or faint, blurry ripples around sharp, high-contrast edges, such as text overlays, subtitles, or the silhouettes of dark objects against light backgrounds. When bitrate is heavily restricted, the encoder discards high-frequency DCT (Discrete Cosine Transform) or ADST (Asymmetric Discrete Sine Transform) coefficients. Without these high frequencies to reconstruct sharp transitions, the reconstructed signal oscillates near the edges, creating visual distortion. When this distortion fluctuates rapidly over time across frames, it is referred to as mosquito noise.
Motion Smearing and Block Bleeding
Under severe bitrate constraints, libvpx-vp9 relies
heavily on temporal prediction to save bits, reusing pixel data from
previous frames via motion vectors while sending minimal or no residual
updates. When an object moves, the encoder may fail to update the newly
exposed background or the changing details of the moving object itself.
This causes “smearing” or “bleeding,” where textures appear to melt,
drag, or stretch behind moving elements, losing all definition until a
new keyframe is encoded.
Keyframe Popping (Breathing Effects)
Because inter-frames (P-frames and golden frames) are heavily degraded during bitrate starvation, they lose quality rapidly as errors accumulate over time. When a new keyframe (I-frame) is eventually inserted, it is allocated a disproportionately larger share of the remaining bitrate to refresh the scene. This causes a sudden, jarring jump in visual clarity followed by a rapid decay in subsequent frames. This cyclic fluctuation in quality is known as keyframe popping or the “breathing” effect, which is highly distracting to viewers.