AV1 Motion Vector Precision in Inter Blocks
This article provides an overview of motion vector precision levels in the AV1 video codec. In inter-frame prediction, AV1 optimizes the trade-off between displacement accuracy and bit overhead by offering flexible motion vector precision. Depending on the video content, encoding settings, and frame-level flags, AV1 supports three primary precision levels for inter blocks: eighth-pel (1/8-pixel), quarter-pel (1/4-pixel), and full-pel (integer-pixel) precision.
Eighth-Pel (1/8-Pixel) Precision
Eighth-pel precision is the highest standard motion vector resolution available in AV1. Designed primarily for complex, photographic video sequences with subtle movement, this mode allows the encoder to capture sub-pixel spatial displacements with fine granularity.
When 1/8-pel precision is activated:
- Motion vectors represent fractional displacements down to one-eighth of a luma sample.
- Interpolation is carried out using AV1's 8-tap polyphase filtering filters (including Regular, Smooth, and Sharp filter designs).
- This precision level is enabled when the frame header flag
allow_high_precision_mvis set to 1, providing the highest rate-distortion efficiency for slow, continuous motion.
Quarter-Pel (1/4-Pixel) Precision
Quarter-pel precision provides a balance between compression efficiency and signaling overhead. It is a traditional standard across modern codecs and serves as a lower-overhead alternative to 1/8-pel accuracy.
Key characteristics include:
- Motion vector components are constrained to increments of one-fourth of a pixel.
- If
allow_high_precision_mvis disabled (set to 0), the codec reduces vector resolution to 1/4-pel, truncating the fractional precision bits to save bandwidth in high-motion sequences where sub-pixel accuracy yields diminishing returns. - Chroma vectors derive their precision based on subsampling formats (such as YUV 4:2:0), mapping appropriately from the luma quarter-pel coordinates.
Full-Pel (Integer-Pixel) Precision
Full-pel precision restricts motion vectors strictly to whole integer-pixel offsets, completely bypassing fractional-pel offsets.
Integer-pel precision is predominantly utilized in the following scenarios:
- Screen Content Coding (SCC): Computer-generated content, scrolling text, and desktop recordings often contain pixel-aligned, sharp edges. Using sub-pixel interpolation on text can cause unwanted blurring and waste bits.
- Control Mechanisms: Frame-level syntax elements
such as
cur_frame_force_integer_mvcan force all blocks within a frame into integer precision. - Encoding Efficiency: When forced or selected, the encoder eliminates the fractional vector bits entirely from the bitstream, reducing header overhead significantly.
Adaptive Precision and Signaling
AV1 does not permanently fix motion vector precision across an entire bitstream. Precision is governed dynamically:
- Frame-Level Negotiation: The encoder determines
whether a frame allows high-precision vectors
(
allow_high_precision_mv) or enforces integer vectors (cur_frame_force_integer_mv). - Compound and Single Modes: Whether an inter block uses single reference prediction or compound reference prediction, motion vectors follow the precision flags established in the frame syntax.
- Complexity Scaling: In fast-action scenes, high-precision motion vectors often fail to yield enough prediction residual savings to justify the cost of transmitting extra fractional bits. In such cases, dropping from 1/8-pel to 1/4-pel or integer-pel delivers superior rate-distortion performance.