Современные алгоритмы сжатия видео отличаются от алгоритмов сжатия изображений, с которыми вы, возможно, знакомы. Дополнительные размеры и время означают, что к видеофайлу применяются различные математические и логические методы для уменьшения размера при сохранении качества видео.
В этом посте мы используем H.264 в качестве основного стандарта сжатия. Хотя это уже не новейший формат сжатия видео, он по-прежнему предоставляет достаточно подробный пример для объяснения общих концепций сжатия видео.
Что такое сжатие видео?
Алгоритмы сжатия видео ищут пространственную и временную избыточность. Закодировав избыточные данные минимальное количество раз, можно уменьшить размер файла. Представьте себе, например, минутный снимок лица персонажа, медленно меняющего выражение. Нет смысла кодировать фоновое изображение для каждого кадра: вместо этого вы можете закодировать его один раз, а затем возвращаться к нем
Contents
Что такое сжатие видео?
менилось. Это кодирование с межкадровым прогнозированием является причиной тревожных артефактов сжатия цифрового видео: части старого изображения перемещаются неправильно, потому что что-то в кодировании пошло не так.I-кадры, P-кадры и B-кадры
I-кадры — это полностью закодированные изображения. Каждый I-кадр содержит все данные, необходимые для представления изображения. P-кадры p прогнозируются на основе того, как изображение меняется по сравнению с последним I-кадром. B-кадры прогнозируются b i-направленно с использованием данных как из последнего P-кадра, так и из следующего I-кадра. P-кадрам необходимо хранить только ту визуальную информацию, которая уникальна для P-кадра. В приведенном выше примере ему необходимо отслеживать перемещение точек по кадру, но Pac-Man может оставаться на месте.
В-кадр рассматривает P-кадр и следующий I-кадр и «усредняет» движение по этим кадрам. Алгоритм имеет представление о том, где изображение «начинается» (первый I-кадр) и где изображение «заканчивается» (второй I-кадр), и он использует частичные данные для кодиров
I-кадры, P-кадры и B-кадры
я все избыточные данные. статические пиксели, которые не нужны для создания изображения.Внутрикадровое кодирование (I-кадры)
I-кадры сжимаются независимо, точно так же, как сохраняются неподвижные изображения. Поскольку I-кадры не используют прогнозные данные, сжатое изображение содержит все данные, используемые для отображения I-кадра. Они по-прежнему сжимаются с помощью алгоритма сжатия изображений, такого как JPEG. Это кодирование часто происходит в цветовом пространстве YCbCr, которое отделяет данные яркости от данных цвета, позволяя кодировать движение и изменения цвета отдельно.
Для непредсказывающих кодеков, таких как DV и Motion JPEG, на этом мы и остановимся. Поскольку прогнозируемых кадров нет, единственное сжатие, которого можно добиться, — это сжатие изображения в пределах одного кадра. Это менее эффективно, но позволяет получить файл необработанного изображения более высокого качества.
В кодеках, использующих кадры с прогнозированием, таких как H.264, I-кадры периодически отображаются для «обновления» потока данных путем установки нового опорного кадра. Чем дальше друг от друга I-кадры, тем меньше может быть видеофайл. Однако если I-кадры расположены слишком далеко друг от друга, точность прогнозируемых кадров видео будет постепенно снижаться до неразборчивости. Приложение, оптимизированное по полосе пропускания, будет вставлять I-кадры как можно реже, не прерывая видеопоток. Для потребителей частота I-кадров часто определяется косвенно настройкой «качества» в программном обеспечении кодирования. Программное обеспечение профессионального уровня для сжатия видео, такое как ffmpeg, обеспечивает явный контроль.
Читайте также: Внутрикадровое кодирование (I-кадры)но знать о кодировании видео
Межкадровое предсказание (P-кадры и B-кадры)
Видеокодеры пытаются «предсказать» изменения от одного кадра к другому. Чем точнее их предсказания, тем эффективнее алгоритм сжатия. Именно это создает P-кадры и B-кадры. Точное количество, частота и порядок прогнозируемых кадров, а также конкретный алгоритм, используемый для их кодирования и воспроизведения, определяются конкретным используемым вами алгоритмом.
Давайте рассмотрим, как работает H.264, на обобщенном примере. Кадр разделен на разделы, называемые макроблоками, обычно состоящие из 16 x 16 выборок. Алгоритм не кодирует необработанные значения пикселей для каждого блока. Вместо этого кодер ищет аналогичный блок в более старом кадре, называемом опорным кадром. Если найден действительный опорный кадр, блок будет закодирован с помощью математического выражения, называемого вектором движения, которое описывает точный характер изменения опорного блока на текущий блок. При воспроизведении видео видеопроигрыватель правильно интерпретирует эти векторы движения и «ретранслирует» видео. Если блок вообще не меняется, вектор не нужен.
Вывод: сжатие данных
После того как данные рассортированы по кадрам, они кодируются в математическое выражение с помощью кодировщика преобразования. H.264 использует DCT (дискретное косинусное преобразование) для преобразования визуальных данных в математическое выражение (в частности, сумму косинусных функций, колеблющихся на различных частотах). Выбранный алгоритм сжатия определяет кодировщик преобразования. Затем данные «округляются» квантователем. Наконец, биты проходят через алгоритм сжатия без потерь, чтобы еще раз уменьшить размер файла. Это не меняет данные: оно просто организует их в максимально компактную форму. Затем видео сжимается до меньшего размера, чем раньше, и готово к просмотру.
Изображение предоставлено: Демо-версия VC, Делфт