A method of encoding a series of frames in a video or media, including: receiving a first key frame, receiving subsequent chunks of frames including at least one key frame, dividing each frame into a plurality of blocks, subdividing a first block of the plurality of blocks into a plurality of pixel groups, averaging the pixels in each pixel group to generate a single value, creating a first mini-block wherein each element of said first mini block corresponds with a pixel group of the corresponding first block and contains said single value, repeating the previous subdividing, averaging and creating steps for each block of each frame of the chunk, comparing a first of said plurality of mini blocks of a first frame with mini blocks of at least one further frame, where said at least one further frame mini blocks are not necessarily aligned to mini blocks in the first frame, until a best match is achieved, said best match dependent on an error calculation; estimating respective motion vectors to map each mini block of said first frame to said best match mini block of each of said at least one further frame; wherein estimates of motion vectors for each mini block of each frame where the binary number of the frame ends in a '1' are generated in a first pass at a first magnification from raw data of said frame and from temporally adjacent, neighbouring frames, and estimates of motion vectors for each frame where the binary number of the frame ends in a '10' is generated at a second, less granular, magnification from said earlier motion vector estimates, said motion vector estimates being added together to form a starting point of a local search for a new best match motion vector for the said frame whose frame number ends in '10', whereupon with the new best match motion vector, each frame where the binary number of the frame ends in '100', '1000', '10000', and so on, this list of frame numbers continuing until the last power of two which is not a key frame, is generated at said less granular magnification from earlier motion vector estimates until a final motion estimate for the frame mid-way between the first and last frame depends on earlier estimates, such that each motion vector estimate is based on values calculated from neighbouring estimates. receiving a first key frame, receiving subsequent chunks of frames including at least one key frame, dividing each frame into a plurality of blocks, subdividing a first block of the plurality of blocks into a plurality of pixel groups, averaging the pixels in each pixel group to generate a single value, creating a first mini-block wherein each element of said first mini block corresponds with a pixel group of the corresponding first block and contains said single value, repeating the previous subdividing, averaging and creating steps for each block of each frame of the chunk, comparing a first of said plurality of mini blocks of a first frame with mini blocks of at least one further frame, where said at least one further frame mini blocks are not necessarily aligned to mini blocks in the first frame, until a best match is achieved, said best match dependent on an error calculation; estimating respective motion vectors to map each mini block of said first frame to said best match mini block of each of said at least one further frame; wherein estimates of motion vectors for each mini block of each frame where the binary number of the frame ends in a '1' are generated in a first pass at a first magnification from raw data of said frame and from temporally adjacent, neighbouring frames, and estimates of motion vectors for each frame where the binary number of the frame ends in a '10' is generated at a second, less granular, magnification from said earlier motion vector estimates, said motion vector estimates being added together to form a starting point of a local search for a new best match motion vector for the said frame whose frame number ends in '10', whereupon with the new best match motion vector, each frame where the binary number of the frame ends in '100', '1000', '10000', and so on, this list of frame numbers continuing until the last power of two which is not a key frame, is generated at said less granular magnification from earlier motion vector estimates until a final motion estimate for the frame mid-way between the first and last frame depends on earlier estimates, such that each motion vector estimate is based on values calculated from neighbouring estimates.