Россия, г. Смоленск ул. Николаева д. 19а кв. 56 |
Алгоритмы сжатия видео
Возможности по распараллеливанию
Даже беглый взгляд на этот обобщенный алгоритм позволяет заметить, что он сравнительно легко распараллеливается. Изображение 320х288 содержит 330 макроблоков, которые можно кодировать и декодировать независимо. Каждый макроблок, в свою очередь, содержит шесть блоков данных для ДКП. Распараллелить ДКП очень важно, так как, не считая поиска векторов смещения, это самая медленная операция. Заметим также, что остальные преобразования легко конвейеризуются. В результате мы получаем параллельно-конвейерную схему обработки потока видеоданных.
Достаточно заманчиво выглядит возможность распараллелить обработку различных кадров, но здесь мы сталкиваемся со сложностями. Как правило, компрессор строится таким образом, чтобы после сжатия изображение подвергалось обратным преобразованиям. Таким образом, мы получаем кадр с потерями и архивируем остальные кадры, отталкиваясь от него. Это позволяет не накапливать ошибки, получаемые еще при квантовании. Таким образом, если на экране между кадрами наблюдались большие изменения, и качество изображения пришлось понизить, то при стабилизации изображения качество быстро повышается практически до качества исходного видеоряда. Неприятный эффект, порождаемый этим приемом, заключается в том, что появляется мерцание отдельных точек (или областей) изображения, значение цвета в которых округляется то в большую, то в меньшую сторону.
При распаковке наши возможности по параллельной обработке различных кадров достаточно ограничены, поскольку велика зависимость между кадрами в потоке (велик процент P- и B-кадров ).
Другие пути повышения степени сжатия
Описанный выше алгоритм в целом крайне близок большинству применяемых сейчас на практике алгоритмам сжатия видео. Однако новые (или хорошо забытые старые) идеи появляются ежегодно. Если для алгоритмов сжатия без потерь можно говорить о росте степени сжатия на 1% в год (относительно предыдущего года) для достаточно большого тестового массива данных, то для алгоритмов сжатия видео речь обычно идет о 3-5% прибавки степени сжатия для достаточно большого видеофрагмента при том же визуальном качестве.
Однако старое доброе "правило рычага", изобретенное еще Архимедом, соблюдается и здесь. И если с одной стороны повышается степень сжатия, то с другой стороны приходится пройти, прилагая ту же силу, гораздо больший путь. В данном случае растет сложность программы и падет скорость работы, как при компрессии, так и при декомпрессии.
Перечислим основные пути повышения степени сжатия:
- Изменение алгоритма сжатия I-кадров. Выше приведен алгоритм, основанный на ДКП. Сегодня все чаще используются алгоритмы, основанные на вэйвлетах (см. описание JPEG-2000).
- Изменение алгоритма сжатия без потерь. Выше приведен алгоритм, использующий сжатие по алгоритму Хаффмана. Однако недавно закончился основной патент на арифметическое сжатие (дающее преимущество 2-15%) и, соответственно, все чаще используется именно оно.
- Изменение алгоритма работы с векторами смещения блоков. Подбор векторов смещений блоков по наименьшему среднеквадратичному смещению не является оптимальным. Cуществуют алгоритмы, дающие лучший результат при некоторых дополнительных затратах времени при сжатии.
- Применение обработки коэффициентов. Можно пытаться получить больше информации об изображении из сохраненных коэффициентов. Например, возможно быстрое сравнение коэффициентов после ДКП в соседних блоках и их усреднение по достаточно сложным алгоритмам. Этот прием заметно снижает количество артефактов вносимых в изображение ДКП, при этом допуская реализацию, работающую в реальном времени.
- Применение обработки получающихся кадров. Известная беда алгоритмов сжатия изображений - неизбежная "блочность" (хорошо заметные границы макроблоков). В принципе существуют алгоритмы, работающие с кадров совсем без применения блоков (даже без векторов смещения блоков), но такой подход пока не оправдывает себя ни по степени сжатия, ни по скорости работы декодера. Однако можно построить достаточно быстрые алгоритмы постобработки, которые достаточно аккуратно уберут видимые границы между блоками, не внося существенных помех в само изображение. Существуют также алгоритмы, устраняющие на лету эффект Гиббса (см. описание JPEG) и т.п. Таким образом, существенно улучшается визуальное качество изображения. Это также означает, что можно повысить степень сжатия при том же визуальном качестве.
- Улучшение алгоритмов масштабирования изображений. Как правило, видео на компьютере просматривают во весь экран. При этом даже применение очень простого и быстрого кусочно-линейного масштабирования способно кардинально снизить скорость проигрывания ролика. То есть примитивная операция масштабирования изображения будет работать заметно дольше, чем сложный алгоритм декодера. Однако скорости современных компьютеров быстро растут и те алгоритмы, что вызывали падение скорости до 7 кадров в секунду на Celeron-300 дают живое видео - больше 30 кадров на P4-1200 (начинает использоваться расширенный набор команд и т.п.). Т.е. появляется возможность использовать более сложные и качественные алгоритмы масштабирования на весь экран, получая более высокое качество, чем для использовавшейся ранее билинейной интерполяции (в большинстве видеокарт реализованной аппаратно).
- Применение предварительной обработки видео. Если мы хотим получить достаточно высокую степень сжатия, то можно заранее предсказать, что в нашем изображении пострадают высокие частоты. Оно станет сглаженным, пропадут многие мелкие детали. При этом, как правило, появляются дополнительные артефакты в виде полосок, ореолов у резких границ, волн. Значительно повысить качество изображения после кодирования позволяет предобработка с удалением высоких частот. При этом существуют алгоритмы, обрабатывающие поток таким образом, что визуально качество изображения не изменяется, однако после декодера мы получаем существенно более качественное изображение.
Выше перечислены лишь отдельные направления работ. Фактически за 90-е годы изменения и улучшения коснулись всех модулей алгоритма, построенного по классической схеме. Свою лепту в этот процесс вносят также производители микропроцессоров и в особенности Intel. Процессоры, начиная с P4, специально предназначены для обработки потоковых данных. Особенности архитектуры процессора (в частности небольшой по сравнению с процессорами AMD кэш первого уровня), дают значительное преимущество одним алгоритмам и делают неэффективными другие. Однако общее совершенствование алгоритмов сжатия видео идет очень быстро и в ближайшее время можно ожидать только увеличения скорости появления новых разработок.