Сжатие видеопотока или покадровое сжатие, с потерей или без потери качества

Сжатие видеопотока или покадровое сжатие, с потерей или без потери качества

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

Коэффициент сжатия. Этот показатель особенно важен для профессионалов, работающих с цифровым видео на компьютерах. Его ни в коем случае нельзя путать с коэффициентом асимметричности сжатия. Коэффициент сжатия - это цифровое выражение соотношения между объемом сжатого и исходного видеоматериала. Для примера, коэффициент 200:1 означает, что если принять объем полученного после компрессии ролика за единицу, то исходный оригинал занимал объем в 200 раз больший

Типы сжатия Существует два базовых типа сжатия:
  • покадровое сжатие 
  • временное сжатие.
 Покадровое сжатие берет всю картинку для каждого кадра, сжимает ее, и затем отправляет каждую картинку в потоке одну за одной. Самым популярным покадровым сжатием является Motion JPEG (MJPEG). Он нашел широкое применение благодаря максимально высокому качеству видео, он очень прост в декодировании и является несобственническим. “Ахиллесова пята” MJPEG, несмотря на достигаемое высокое качество каждого кадра, заключается в том, что он выдает файлы значительного размера, а это подразумевает под собой большую загрузку канала при передаче и больший объем дискового пространства для записи.
Алгоритмы временного сжатия были разработаны для передачи видео с меньшей загрузкой канала с несколько худшим качеством изображения, и во многих приложениях, степени загрузки канала и пространства. Говоря простым языком, временное сжатие работает следующим образом: там где MJPEG обработает 50 “полных изображений” чтобы выдать 5 секунд видео со скоростью 10 кадров в секунду (5 секунд х 10 к/с = 50), алгоритмы временного сжатия обработают 10 или менее “полных” изображений, обычно называемых Ключевыми Кадрами, чтобы выдать 5 секунд временного сжатого видео скоростью 10 к/с. Это выполняется посредством математических вычислений для предсказывания того, что может измениться между ключевыми кадрами, и затем отправляется только та часть кадра, которая изменилась, вместо отправления “всей” картинки. Если в кадрах отсутствовало либо происходило незначительное движение, временное сжатие будет просто повторять Ключевые Кадры, которые в приведенном выше примере имеет коэффициент соотношения 10:50 что на 80% эффективнее чем MJPEG. Эффективность временного сжатия также имеет следующую поправку: требования к загрузке канала и пространства на диске значительно изменяются в зависимости от сцены. Чтобы представить данную ситуацию, представьте себе камеру, которая производит панорамирование, наклон или зумирование: 100% сцены изменяется с каждым кадром, вынуждая временное сжатие работать сверхурочно для выяснения изменений и дальнейшего вычисления, какие изображения нужно отправить. Результатом этого будет значительное увеличение загрузки канала и дискового пространства с предельным качеством видео для его отображения. Будет ли временное сжатие лучше чем покадровое в вашем приложении? Это зависит от ряда параметров, но прежде чем рассмотреть данные параметры, следует взгянуть на самый многообещающий алгоритм кодирования, Н.264.
Что такое Н.264? Про данный алгоритм уже написано множество статей. Следует заметить, что это самый сложный алгоритм временного сжатия, доступный на сегодняшний день на рынке. В некоторых случаях, он может выдавать изображения с качеством MJPEG. Это достигается путем использования более сложных математических алгоритмов по сравнению со своими предшественниками как MPEG-2, MPEG-4 и H.263. Данные математические алгоритмы лушче справляются с предсказыванием движения между Ключевыми кадрами, поэтому видео передается более точно с меньшей размытостью и распадом на квадраты по сравнению с другими методами временного сжатия. Каждый производитель изменяет свой профиль Н.264 для удовлетворения своих требований. Это говорит о том, что два созданных профиля Н.264 будут одинаковыми. Решение, которое нужно предпринять, зависит от трех составляющих:
  • желаемое качество изображения
  •  доступный канал/дисковое пространство
  •  доступная производительность системы
Рассмотрите данные составляющие и они в конечном итоге повлияют на ваше решение по выбору наиболее подходящего метода компрессии для вашего приложения. Большинство производителей камер Н.264 используют либо Базовый (Baseline), Ограниченный Базовый (Constrained Baseline), или в некоторых случаях, профиль со сниженной производительностью и попросту отключенными “функциями”, так как производитель не может обеспечить достаточной производительности в камере для поддержки функций с более высоким качеством. Все понимают, что когда речь идет о технологиях, то здесь нет однозначно “верного решения”. Если алгоритм сжатия использует меньше пространства на диске или мощности для обработки он будет несколько хуже работать в иных областях, и эксперты, которые понимают соотношение выгод и потерь, учатся обходить их стороной. После того как в камерах IQeye была значительно улучшена производительность, IQinVision выбрал требовательный к высокой производительности Основной Профиль (Main Profile) для кодирования в формате Н.264, который обеспечивает превосходное качество видео при той же скорости передачи 
Разрешение   Вам нужно постоянное качественное видео? Если этому требованию соответствует высококачественное видео, высокая детализация или доказательные возможности являются первостепенными, то в этом случае MJPEG будет правильным выбором, так как качество видеоизображений будет постоянным в большинстве сцен. Если вы рассматриваете Н.264 для достижения лучшего качества видео, это позволит вам выбрать вам постоянный битрейт (CBR) или переменный битрейт (VBR) в попытке достигнуть данную цель. По существу CBR является “горлышком бутылки” канала передачи и при его использовании Н.264 будет жертвовать качеством изображения для снижения загрузки канала передачи. IQinVision рекомендует всегда использовать VBR для приложений видеонаблюдения, в противоположном случае вы можете превратить высококачественное видео в размытое изображение, распавшееся на квадраты, в особенности при большом разрешении HD/мегапиксельных камер. С использованием Н.264 по мере увеличения разрешения качество изображения может сильно изменяться. Те же значительные изменения будут характерны и для загрузки канала передачи данных, поэтому вам нужно убедиться, что при проектировании сети будут учтены худшие варианты загрузки канала при изменениях в сцене, где загрузка может значительно возрасти.
Скорость кадров  Какая скорость кадров нужна вам? Это очень важный параметр, так как неверное решение может привести к нежелательному исходу. В прошлом многие спецификации проектов были основаны на возможностях камеры, а не требованиях клиентов. Сегодня, многие клиенты ставят все больше требований. “Если у меня произошел инцидент, что я хочу увидеть?” Давайте предположим, что клиент захочет видеть качественные изображения человека, идущего по улице, и исходя из установленных объектива и камеры, человек будет находиться в поле зрения в течение 10 секунд. При записи со скоростью 30 к/с в итоге получится 300 изображений того человека.
Прогнозирование загрузки канала передачи и дискового пространства при изменении скорости кадров является несложным, так как они связаны напрямую. Существует множество калькуляторов, которые могут помочь с данным вычислением: нужно просто умножить средний размер файла на количество кадров. В случае с Н.264 это более сложно и до некоторой степени трудно для понимания. Так как Н.264 интерпретирует изменения между Ключевыми кадрами, он более эффективен при высокой скорости кадров, так как от кадра к кадру присутствуют незначительные изменения, поэтому камера работает более эффективно. В противоположном случае при меньшей скорости кадров между Ключевыми кадрами происходит больше изменений, что потребует большей ширины канала передачи и больше места на диске для обработки, и что самое важное, при этом ухудшится качество изображения. Поскольку ухудшение качества изображения значительно зависит от того, как производитель применил свою версию Н.264, основной принцип заключается в том, что Н.264 может быть применен в приложениях, которые требуют 15 к/с или более в зависимости от других Пользовательских требований и внешних условий.
В заключение, ниже даны несколько основных правил для двух первых параметров, рассмотренных выше:
  •  выбирайте Н.264, когда ваши требования диктуют потребность в экономии канала передачи, и это является более важным чем постоянное качество изображения или предсказуемость в пропускной способности либо дисковом пространстве
  •  выбирайте Н.264, когда вам требуется вести запись со скоростью 15 к/с или выше и вместе с этим Пользовательские требования и Оборудование поддерживают ваш выбор
  •  выбирайте MJPEG, когда вам нужно очень высокое качество с постоянными и предопределенными загрузками канала передачи и дискового пространства.