Выложил новые версии программки сжатия и проигрывателя. В предыдущей версии был один недостаток: в зависимости от объема изменений на экране, сильно менялся квантователь, или, по-русский, базовый коэффициент сжатия.
В результате качество записанного видео "штормило" вместе с квантователем.
В моем алгоритме сжатия используется два типа кадров: полный и разностный. Полный кадр - это просто сжатое с использованием вейвлет-преобразования изображение. А в разностном кадре храниться разница между предыдущим и текущим кадром, сжатая с помощью того же преобразования.
Полный кадр является опорным. С него всегда начинается видеопоследовательность. Также в случае вещания в сети полные кадры могут вставляться через некоторые промежутки времени, для того, что бы на принимающем конце можно было возобновить воспроизведение в случае сбоев передачи данных.
А вот разностный кадр несет на себе две независимых функции: он обеспечивает более сильное сжатие, а также, при малых изменениях в динамической сцене, улучшает текущее качество изображения.
В предыдущей версии программы эти две функции не были четко разделены между собой, что и приводило к существенной потери в некоторых ситуация качества изображения, а также к ненужным затратам вычислительной мощности процессора. В новой версии эти функции разделены по более формальному критерию. В зависимости от степени изменения изображения между кадрами происходит выбор, какой же кадр использовать: полный, разностный для сжатия, или разностный для улучшения качества.
В результате удалось поднять качество записанного изображения и увеличить производительность кодека. Теперь он позволяет записывать 2 кадра в секунду.
Пока писал предыдущий пост, записал 30 минут видео с экрана. Оно сжалось до 74 Мбайт. Это очень хороший результат, особенно, с учетом того, что сам алгоритм сжатия у меня пока еще далек от идеала.
Так что в ближайших планах повысить коэффициент сжатия за счет оптимизации алгоритма. Ну и есть еще маленький резерв по повышению производительности, так как это все еще тестовые версии программки, на чисто посмотреть. Потом уже попытаюсь хоть немного очеловечить интерфейс.
Также добавил возможность сжатия видео из последовательности bitmap'ов, а также возможность сохранения стоп-кадра в формате bitmap'а из проигрывателя.
В стандарте MPEG используется не два, а три типа кадров. Реализовать третий тип в случае вейвлет преобразования на тех же принципах, что и MPEG, затруднительно из-за разности подходов при осуществлении преобразования. Есть идея, как можно сделать 3-ий тип кадра, но пока не ясно, нужно ли. Требуется провести дополнительные эксперименты.
Комментариев нет:
Отправить комментарий