Как H.264 или видеокодеры в целом вычисляют остаточное изображение двух кадров? - PullRequest
5 голосов
/ 06 июля 2011

Я пытался понять, как работает кодирование видео для современных кодеров, в частности H264. В документации очень часто упоминается, что остаточные кадры создаются из различий между текущим p-кадром и последним i-кадром (при условии, что в прогнозировании не используются следующие кадры). Я понимаю, что используется цветовое пространство YUV (возможно, YV12), и что одно изображение «вычитается» из другого, а затем формируется остаток. То, что я не понимаю, как именно работает это вычитание. Я не думаю, что это абсолютная величина разницы, потому что это было бы неоднозначно. Какова формула на пиксель, чтобы получить эту разницу?

1 Ответ

6 голосов
/ 14 июля 2011

Вычитание - это всего лишь один маленький шаг в кодировании видео ;Основным принципом, лежащим в основе современного кодирования видео, является оценка движения , за которой следует компенсация движения .В основном, процесс оценки движения генерирует векторы, которые показывают смещения между макроблоками в последовательных кадрах.Однако в этих векторах всегда есть небольшая ошибка.

Итак, что произойдет, кодер выведет как смещения вектора, так и "остаточный" - это то, что осталось.Остаток - это не , а просто разница между двумя кадрами;это разница между двумя кадрами после учета оценки движения.См. Изображение «Разница с компенсацией движения» в статье в Википедии о компенсации, чтобы наглядно продемонстрировать это - обратите внимание, что разница с компенсацией движения значительно меньше, чем «тупой» остаток.

Вот достойныйPDF, который охватывает некоторые основы .

Несколько других примечаний:

  • Да, YUV всегда используется, и обычно большинство кодировщиков работают в YV12 или некоторых других цветахсубсэмплированный формат
  • Вычитание должно происходить отдельно для кадров Y, U и V (представьте их как три отдельных канала, каждый из которых необходимо кодировать - тогда становится достаточно ясно, как должно происходить вычитание).Оценка движения может происходить или не происходить на плоскостях Y, U и V;иногда кодировщики делают это только для значений Y (яркости), чтобы сэкономить немного ресурсов ЦП за счет качества.
...