Термин

Motion vector

Англ.: MV
Короткое определение

2D-смещение (часто с sub-pixel точностью), означающее «этот блок похож на тот блок reference-кадра, сдвинутый на (Δx, Δy)».

Motion vector – крошечный кусок данных, обычно всего два числа: смещение по X и смещение по Y, – который говорит декодеру: «этот блок пикселей похож на блок, который был вон там в предыдущем кадре, сдвинутый на столько». Именно так видео получается таким маленьким: вместо переописания всего движущегося объекта кадр за кадром энкодер записывает горстку motion vectors плюс несколько байт коррекции, а декодер восстанавливает движение из уже декодированного материала.

Современные кодеки используют sub-pixel-точность motion vectors, адресуя дробные позиции вроде «3.25 пикселя вправо, 1.75 вниз». Декодер синтезирует эти дробные позиции встроенным интерполяционным фильтром. Эта sub-pixel-точность критична для плавных пановорамных кадров и медленно движущихся объектов – без неё были бы видны дёрганья на границах, потому что объекты прыгали бы по целым пикселям. H.264 использует quarter-pixel, AV1 – до eighth-pixel, VVC – переключаемые точности.

Для большинства продуктовых задач motion vectors невидимы – они внутри bitstream. Но две вещи стоит знать. Первое: именно поэтому видеосжатие так хорошо на медленном движении и так плохо на хаотичном – драка с быстрой тряской камеры порождает motion vectors во все стороны с плохими совпадениями, и энкодер вынужден отступать к прямому хранению большего количества пиксельных данных. Второе: motion vectors часто используются за пределами сжатия – стабилизация видео, frame interpolation, трекинг объектов и «умный» выбор thumbnail переиспользуют те же motion vectors, что уже посчитал кодек, получая эту работу практически бесплатно.

Считаете параметры для своего продукта?

Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.