A motion vector is a tiny piece of data — usually just two numbers, an X offset and a Y offset — that tells the decoder "this block of pixels looks like the block that was over there in the previous frame, shifted by this much". It's how video manages to be so small: instead of re-describing the entire moving object frame after frame, the encoder writes a handful of motion vectors plus a few correction bytes, and the decoder reconstructs the motion from previously decoded material.

Modern codecs use sub-pixel precision motion vectors, addressing fractional positions like "3.25 pixels right, 1.75 pixels down". The decoder synthesises those fractional positions using a built-in interpolation filter. This sub-pixel accuracy matters enormously for smooth panning shots and slow-moving objects — without it, you'd see jittery edges as objects jump by whole pixels. H.264 uses quarter-pixel precision, AV1 uses up to eighth-pixel, VVC has switchable precisions.

For most product purposes, motion vectors are invisible — they're inside the bitstream. But two things to know about them. First, they're the reason video compression is so good on slow-moving content and so bad on chaotic content: a fight scene with rapid camera shake produces motion vectors all over the place, with poor matches, and the encoder has to fall back on storing more pixel data directly. Second, motion vectors are often used outside compression — video stabilisation, frame interpolation, object tracking and "smart" thumbnail picking all reuse the motion vectors the codec already computed, getting that work essentially for free.