A video-encoder-device-implemented method for encoding an adaptive motion-compensation filter set for a plurality of subpel positions for predicting blocks in an encoded video frame, the method comprising: obtaining, by the video encoder device, a codebook comprising a multiplicity of motion-compensation filters grouped into a plurality of subpel-position groups that respectively correspond to the plurality of subpel positions, each of the plurality of subpel-position groups comprising a plurality of motion-compensation filters suitable for interpolating blocks of a picture at a corresponding one of the plurality of subpel positions; obtaining, by the video encoder device, an unencoded frame of video for encoding by the video encoder device; encoding, by the video encoder device, at least a portion of the frame of video to a bitstream, the portion of the frame of video comprising a plurality of blocks of picture content; and during encoding of at least the portion of the frame of video, the video encoder device: selecting from the codebook a subset of the plurality of motion-compensation filters as being well-adapted for predicting the plurality of blocks of picture content, the selected subset comprising one from each of the plurality of subpel-position groups; and including in the bitstream a subpel-filter code identifying the selected subset of the plurality of motion-compensation filters within the codebook; characterized in that the method further comprises: partitioning the codebook into a small base codebook and a larger virtual codebook, the virtual codebook of filter sets comprising combinations of filters selected from the base codebook of filter sets; storing only the base codebook and an algorithm to synthesize the virtual codebook. obtaining, by the video encoder device, a codebook comprising a multiplicity of motion-compensation filters grouped into a plurality of subpel-position groups that respectively correspond to the plurality of subpel positions, each of the plurality of subpel-position groups comprising a plurality of motion-compensation filters suitable for interpolating blocks of a picture at a corresponding one of the plurality of subpel positions; obtaining, by the video encoder device, an unencoded frame of video for encoding by the video encoder device; encoding, by the video encoder device, at least a portion of the frame of video to a bitstream, the portion of the frame of video comprising a plurality of blocks of picture content; and during encoding of at least the portion of the frame of video, the video encoder device: selecting from the codebook a subset of the plurality of motion-compensation filters as being well-adapted for predicting the plurality of blocks of picture content, the selected subset comprising one from each of the plurality of subpel-position groups; and including in the bitstream a subpel-filter code identifying the selected subset of the plurality of motion-compensation filters within the codebook; characterized in that the method further comprises: partitioning the codebook into a small base codebook and a larger virtual codebook, the virtual codebook of filter sets comprising combinations of filters selected from the base codebook of filter sets; storing only the base codebook and an algorithm to synthesize the virtual codebook. selecting from the codebook a subset of the plurality of motion-compensation filters as being well-adapted for predicting the plurality of blocks of picture content, the selected subset comprising one from each of the plurality of subpel-position groups; and including in the bitstream a subpel-filter code identifying the selected subset of the plurality of motion-compensation filters within the codebook; characterized in that the method further comprises: partitioning the codebook into a small base codebook and a larger virtual codebook, the virtual codebook of filter sets comprising combinations of filters selected from the base codebook of filter sets; storing only the base codebook and an algorithm to synthesize the virtual codebook. partitioning the codebook into a small base codebook and a larger virtual codebook, the virtual codebook of filter sets comprising combinations of filters selected from the base codebook of filter sets; storing only the base codebook and an algorithm to synthesize the virtual codebook.