1. A method for encoding motion vectors, comprising the steps of: determining motion vectors and flags for sub-blocks of a macroblock (“MB”) as a function of SAD calculations for the MB; generating one or more merged motion vectors for the sub-blocks of the MB as a function of the determined motion vectors and the determined flags; generating a merged macroblock motion vector for the MB as a function of the generated merged motion vectors and of the determined flags; and encoding the determined motion vectors as a function of the generated merged motion vectors and the generated merged macroblock motion vector, wherein each of the determined motion vectors correspond to a reference block in a reference frame having a minimum of the SAD calculations for the respective sub-block of the MB for the each of the determined motion vectors, wherein the determined flags for each of the sub-blocks of the MB comprise a flexible flag, a big SAD flag, an any flag, a 1 -MV merge flag, and a fixed flag for each of the sub-blocks of the MB, wherein the flexible flag indicates that the reference block is shiftable, wherein the any flag indicates that a SAD value for a shifted sub-block in the reference frame is below a first predefined threshold, wherein the 1 -MV merge flag indicates whether other blocks in the MB have been merged, and wherein the fixed flag is initialized when the flex flag, the any flag, and the 1 -MV merge flag are not initialized.