Сжатие видео данных, основные методы и суть
В середине сороковых годов прошлого века, сразу после окончания Второй мировой войны, группа молодых инженеров, среди которых были Ален Тьюринг, Джон Атанасов, Джон Мошли и Преспер Эккман, начала разрабатывать первые электронные компьютеры. Пионерам-изобретателям компьютеры представлялись быстрыми и надежными устройствами для совершения вычислений над числами. Однако очень скоро многие разработчики компьютеров осознали, что их можно применять не только в узковычислительных целях. Первые нечисловые приложения, разработанные в пятидесятые годы, обрабатывали тексты, потом пришла очередь изображений (шестидесятые годы), компьютерной анимации (семидесятые годы) и оцифрованного звука (восьмидесятые годы).
В настоящее время компьютеры в основном используются для коммуникаций и развлечений, поэтому они выполняют всевозможные мультимедийные приложения, в которых приходится обрабатывать тексты, изображения, видео и звук. Все эти оцифрованные массивы приходится отображать, редактировать и передавать по линиям связи другим пользователям. Любые типы компьютерных данных могут только существенно выиграть от применения эффективного сжатия. Однако, особенно полезной компрессия становится при работе с файлами, содержащими видео. Уже файл единичного изображения имеет достаточно большой объем. Что же говорить о видеофайле, который состоит из тысяч изображений? При обработке изображений, как мы знаем, часто применяется сжатие с потерями. При работе же с видео это становится просто необходимым. Сжатие изображений основывается на корреляции пикселов, а компрессия видео может использовать не только корреляцию близких пикселов каждого кадра, но и корреляцию между последовательными кадрами.
Основные принципы. Сжатие видео основано на двух важных принципах. Первый - это пространственная избыточность, присущая каждому кадру видеоряда. А второй принцип основан на том факте, что большую часть времени каждый кадр похож на своего предшественника. Это называется временная избыточность. Таким образом, типичный метод сжатия видео начинает с кодирования первого кадра с помощью некоторого алгоритма компрессии изображения. Затем следует кодировать каждый последующий кадр, находя расхождение или разность между этим кадром и его предшественником и кодируя эту разность. Если новый кадр сильно отличается от предыдущего (это происходит, например, с первым кадром последовательности), то его можно кодировать независимым образом. В литературе по сжатию видеоданных, кадр, кодируемый с помощью своего предшественника называется внутренним. В противном случае он называется внешним кадром.
Сжатие видео, обычно, допускает частичную потерю информации. Кодирование кадра Fi с помощью его предшественника вносит определенные искажения. Затем кодирование кадра Fi+\ на основе кадра Fi добавляет еще большее искажение. Даже при использовании сжатия без потерь, это может привести к потере некоторых битов данных. То же может случиться при передаче файла или после долгого хранения ленты на полке. Если кадр Fi потерял некоторые биты, то все последующие кадры будут иметь искажения вплоть до следующего внешнего кадра. Это приводит к нежелательному накапливанию ошибок. Поэтому необходимо регулярно использовать внешние кадры при кодировании последовательного видеоряда, а не только в его начале. Внешние кадры обозначаются символом /, а внутренние кадры - символом Р (от «предсказанный»).
Если эта идея принимается, то возможно дальнейшее обобщение данной концепции внутренних кадров. Такой кадр можно кодировать с использованием одного из его предшественников, а также с помощью некоторого последующего кадра. Очевидно, кодер не должен использовать информацию, недоступную декодеру, но сжатие видео имеет определенные особенности, поскольку оно вовлекает большие объемы данных. Для зрителя не важно, если кодер работает медленно. Важно, чтобы декодер работал быстро. Обычно сжатые видеоданные записываются на жесткий диск или на DVD для дальнейшего воспроизведения. Кодер может затратить часы на кодирование, а декодер должен работать со скоростью, не меньшей чем стандартная скорость смены кадров (довольно большое число кадров должно появиться на экране за секунду времени для нормального восприятия). Поэтому типичный видеодекодер работает в параллельном режиме, то есть, одновременно в работе находится несколько кадров.
Имея это в виду, представим себе, что кодер кодирует кадр 2 с помощью кадров 1 и 3, а затем записывает сжатую информацию в выходной поток в последовательности 1, 3, 2. Декодер читает их в этом порядке, параллельно декодирует кадры 1 и 3, а потом декодирует кадр 2 на основе кадров 1 и 3. Конечно, эти кадры должны быть правильно помечены. Кадры, которые кодируются с применением прошлых и будущих кадров обозначаются буквой В (bidirectional, двунаправленный). Предсказание кадров с помощью их предшественников имеет смысл, если движение объектов на картинке постепенно открывает фон изображения. Такие области могут быть лишь частично отображены на текущем кадре, а более подробная информация может быть получена из следующего кадра. Поэтому этот кадр является естественным кандидатом для предсказания этой области на текущем кадре.
Идея кадров типа В настолько полезна, что большинство кадров сжимается с помощью этого приема. Итак, мы имеем дело с кадрами трех типов: I, Б и Р. Кадр I кодируется независимо от всех остальных кадров. Кадр Р кодируется на основе кадров I или Р. Наконец, кодирование кадра типа В использует предыдущий кадр и следующий кадр типа I или Р. Ясно, что кадр с номером 2 должен быть отображен ранее кадра 5. Следовательно, каждый кадр должен иметь две метки, а именно, время кодирования и время отображения.
- RSS
Наши услуги: