Я пытаюсь лучше понять, как работает сжатие видео, в частности, mp4.
Я понимаю концепцию использования оценки / компенсации движения для прогнозирования кадра.Однако это оставляет ошибки, которые сохраняются как остаточные кадры.
У меня есть две проблемы при попытке воссоздать концепции хранения этих остаточных кадров.
Первая проблема: Я предполагаю, что вы сжимаете остаточные кадры с помощью сжатия изображений, например jpg,
Если это правда, как бы вы хранили отрицательные значения?Чтобы получить остаточный кадр, вычтите предсказанный кадр из I-кадра, в некоторых случаях вычитание оставляет отрицательные числа.
Для иллюстрации скажем, что пиксель I-кадра равен 50, а P-кадр равен 55:
50 - 55 = -5;
Разница составляет -5.Вы не можете хранить отрицательные значения в JPG, поэтому я предполагаю, что вы сместили его на 127?(На полпути значение 255).
50 - 55 + 127 = 122
Но теперь вы можете записывать только изменения до 127. Что, если есть изменения, превышающие это?Нужно ли записывать отрицательные значения в одном jpg и положительные значения в другом?
Моя вторая проблема : опять же, если вы используете jpg для кодирования остаточных кадров, даже пустой JPG 1920x1080 сохраняет в45кб, используя самые низкие настройки качества в фотошопе.При 24 кадрах в секунду это будет 1 Мбит / с.
Итак, остаточные кадры разбиты еще дальше?Как сохраняются только необходимые макроблоки при нарушении определенного порога ошибки для этого блока?