I am trying to understand the basics of video compression. I have found many resources addressing this particular subject, but somehow, I haven't clarified it yet on my mind.
How does motion estimation/compensation work? I realize that there is some redundancy in successive frames and so, by encoding only their "difference" we can get some compression, but how is that connected with motion vectors?
+ Reply to Thread
Results 1 to 4 of 4
Sometimes portions of the picture move from place to place between frames -- a car moving across the screen, a panning shot, etc. Motion vectors allow the codec to copy those parts of the picture from one frame to another. That is more efficient (in terms of compression) than encoding them as "new" pixels. Motion vectors usually work on small rectangular blocks, 8x8 pixels, 4x8 pixels, etc. If you want to get a feel for how it works -- some programs have the ability to display the motion vectors as little arrows. Here's ffdshow displaying the vectors (overlaid onto the video) of a guy's head moving on a fairly static background:
Wider search distances, and with more accuracy, increase compressibility, but they also take longer to encode.
Thank you very much for your reply.
So, if I understand you correctly, the compressing sequence is by firstly using motion vectors in order to determine the motion between frames (so we achieve a first level of compression by "copying" the blocks) and then, after we have estimated this new frame, we encode the difference between that and the reference frame (2nd level of compression). Am I right?
Yes. Note that there can be several reference frames from which to copy blocks, depending on the codec and settings.