Все о сжатии. Авторский проект.
Форум сервера "Все о сжатии" >>
Сайт о сжатии >> Новинки | О сервере | Статистика
Книга "Методы сжатия" >> Без потерь | Изображений | Видео

>> Cтатьи+исходники | Видео | Arctest | Ссылки | Ru.compress
---------------------------------------------------------

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Мультимедиа-сжатие в современных архиваторах
СообщениеДобавлено: Сб июн 16, 2007 16:22 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
Мультимедиа-сжатие – это использование специальных алгоритмов для упаковки «сырых» графических и звуковых данных. Это достаточно популярная среди пользователей возможность современных архиваторов. Хотя сам я не разделяю энтузиазма по поводу её важности (много ли народа имеет дело с *несжатыми* графикой и звуком?), тем не менее я предпринял изучение этой области и публикую здесь результаты в надежде, что кому-нибудь ещё это может оказаться полезным.

Во-первых, наиболее известные архиваторы, в которых оно реализовано: RAR, SBC, UHARC, CCM, WinRK. Сравнить степень сжатия ими мультимедийных данных можно на страницах тестов, приведённых ниже.

Во-вторых, как его реализовать в своей программе: для начала нужен детектор мультимедийных данных. В самом простом виде это можно делать по расширениям, несколько сложнее – по заголовкам файлов, универсальный способ – анализом самих данных. Универсальный детектор MMDET входит в мой пакет http://www.haskell.org/bz/mm.zip ; трудности корректного обнаружения мультимедии описаны на странице http://www.encode.ru/forums/index.php?a ... &topic=391

Далее, есть простой путь – после определения типа мультимедии просто вычесть последовательные элементы данных в каждом канале (я называю это дискретным дифференцированием) и передать обычному алгоритму сжатия. Как показывает опыт, наилучшие результаты при этом показывают алгоритмы группы BWT/ST (это один из секретов успехов SBC в сжатии мультимедии), на втором месте – PPMD 3-5 порядка, и на последнем – LZMA.

Более приличные результаты даёт, конечно, использование специализированных lossless кодеков, к рассмотрения которых мы и переходим.

ЗВУК
Ориентироваться в результатах специализированных алгоритмов сжатия звука удобно по страничкам:
http://squeezechart.freehost.ag/audio.html
http://uclc.info/lossless_audio_compression_test.htm
Из всех этих программ я прокомментирую только open-source, в порядке уменьшения максимальной степени сжатия:
MPEG-4 ALS: очень медленно работает. Лицензия позволяет использовать его только в MPEG4 продуктах.
APE (Monkey’s Audio): определённой лицензии нет, надо договариваться с автором. Асимметричен, т.е. достаточно медленно сжимает, но быстро распаковывает.
TAK: очень многообещающий кодек, исходники которого пока закрыты, но есть обещания их открыть. Если и когда это произойдёт – станет вероятно наилучшим выбором. Ассиметричен. Сжатие близко к APE, но упаковка/распаковка afair идёт быстрее.
WAVPACK: BSD лицензия, ассиметричен, поддерживает 24/32-битные форматы.
TTA 2.0: GPL лицензия, симметричен, поддерживает 24/32-битные форматы, но имеет с ними небольшие проблемы. По сжатию близок к WAVPACK, по сравнению с ним куда быстрее пакует и медленнее распаковывает. Я использовал именно его в http://www.haskell.org/bz/mm.zip, поскольку он имеет наименьший размер исходников (в несколько раз меньше WAVPACK) и в нём оказалось проще всего разобраться и задействовать в своей программе.
TTA 3.3 от TTA 2.0 отличается двумя вещами: исправлена проблема с вылетом на 24-битном формате и убраны более мощные уровни сжатия, оставлен только один, самый быстрый.
FLAC: BSD лицензия, ассиметричен

ГРАФИКА
Ориентироваться в результатах специализированных алгоритмов сжатия графики удобно по страничкам:
http://squeezechart.freehost.ag/bitmap.html
http://uclc.info/kodak_grey-scale_image ... n_test.htm
Страница http://uclc.info/win32_compressor_builds.htm содержит ссылки на исходники некоторых из упомянутых там программ.

Из этих программ я прокомментирую опять же только open-source, в порядке уменьшения максимальной степени сжатия, и приведу для ориентации время сжатия ими 2 мб файла на 1.2 ГГц процессоре:
MRP: время упаковки – где-то в районе часа, распаковки – несколько секунд, 890 кб
BMFg: время упаковки/распаковки – 5.7 секунды, 907 кб. Правда, исходников на самом деле нет 
MRP: 30/1.3секунд, 950 кб. Использовались опции “-I 1 -h -K 10 -M 2 -V 1”
SLP: 3 секунды, 952 кб. Исходники:
http://web.archive.org/web/200412121212 ... s/slpenc.c
http://web.archive.org/web/200412121210 ... s/slpdec.c
CALIC: 1.9 секунды, 958 кб. Вероятно, разнице в скорости с SLP мы обязаны только более удачному использованию арифметического кодирования. Комментарии в исходники упоминают LOCO-LS, так что возможно это некая производная JPEG-LS
COBALP: 4 секунды, 964 кб.
SLP-RICE: 0.55 секунды, 976 кб. Более быстрая версия SLP, использующая тот же предиктор, но Rice coding вместо арифметики. Вероятно, «арифметическую» версию можно значительно ускорить, использовав более быстрый арифметический кодер. Исходники:
http://web.archive.org/web/200412301602 ... s/enc_0r.c
http://web.archive.org/web/200412301602 ... s/dec_0r.c
JPEG-LS: 0.27 секунд, 990 кб. Принято считать, что JPEG-LS работает довольно медленно, но сжимает лучше JPEG-2000, видимо в данном случае расхождение вызвано тем, что я тестировал код, не использующий арифметического дожатия. Лицензия допускает свободное использование в некоммерческих целях. Исходники:
http://kt.ijs.si/aleks/jpeg-ls/jpeg_ls_v1.1.tar.gz
http://kt.ijs.si/aleks/jpeg-ls/jpeg_ls_v2.2.tar.gz
JPEG-2000 lossless (JASPER): 1.8 секунды, 991 кб. BSD лицензия
FreeArc 0.37 (MM+GRZipII): 3.6 секунд, 1153 кб. Для сравнения – результаты обычного архиватора.

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мультимедиа-сжатие в современных архиваторах
СообщениеДобавлено: Вс июн 17, 2007 11:08 
Не в сети
Site Admin

Зарегистрирован: Вт сен 28, 2004 13:45
Сообщения: 236
Откуда: Санкт-Петербург
Булат писал(а):
CALIC: 1.9 секунды, 958 кб. Вероятно, разнице в скорости с SLP мы обязаны только более удачному использованию арифметического кодирования. Комментарии в исходники упоминают LOCO-LS, так что возможно это некая производная JPEG-LS


calic должен отличаться от loco предиктором (GAP вместо MED), контекстами и некоторыми трюками. Исторически это два разных алгоритма, хотя, насколько помню, были взаимные заимствования.
Для calic авторы также делали вариант с interframe кодированием, т.е., фактически, адаптацию под видео (статическое).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 17, 2007 12:05 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
спасибо за информацию

что меня ещё очень интересует - как можно беспотерьно преобразовать RGB изобраджение, чтобы добиться высокой степени сжатия? я знаю две программы, которые этого добиваются - jasper jpeg-2000 и http://squeezechart.freehost.ag/WaveletCoBALP.wav

на примере последней - один и тот же файл по умолчанию кодируется в 3 мб, с включенной опцией "colorspace conversion" - в 2.6 мб. при этом распакованные данные бит в бит аутентичны

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2007 17:36 
Не в сети
Завсегдатай

Зарегистрирован: Пн сен 04, 2006 12:41
Сообщения: 71
Какие из вышеперечисленных программ для сжатия графики могут сжимать 24-битные цветные изображения? В частности MRP, afaik умеет только 8-битные в оттенках серого сжимать.
Можно для примера привести степень сжатия компрессора UDA - у него есть модели для 24-битных .bmp .tiff и сжимает он относительно PAQ8l быстро и почти так же эффективно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2007 17:59 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
Цитата:
я знаю две программы, которые этого добиваются - jasper jpeg-2000 и http://squeezechart.freehost.ag/WaveletCoBALP.wav


а исходники UDA есть?

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 10:16 
Не в сети
Site Admin

Зарегистрирован: Вт сен 28, 2004 13:45
Сообщения: 236
Откуда: Санкт-Петербург
Булат писал(а):
что меня ещё очень интересует - как можно беспотерьно преобразовать RGB изобраджение, чтобы добиться высокой степени сжатия? я знаю две программы, которые этого добиваются - jasper jpeg-2000 и http://squeezechart.freehost.ag/WaveletCoBALP.wav


По умолчанию практически всегда кодируют G, R-G, B-G, т.е. зеленка выполняет роль люмы (по понятным причинам, см., например, байеровский паттерн).

Есть также более точное преобразование, но оно требует 9-битного представления результата и возиться с ним неудобно:
Y = |_ (R+2G+B)/4 _|
U = B - G
V = R - G

G = Y - |_ (U+V)/4 _|
R = V + G
B = U + G


Можно также несколько точнее приблизить один из разностных каналов к U или V за счет весов. Тоже может стрелять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 12:19 
Не в сети
Завсегдатай

Зарегистрирован: Пн сен 04, 2006 12:41
Сообщения: 71
Цитата:
а исходники UDA есть?

http://wex.cn/dwing/mycomp.htm
http://wex.cn/dwing/download/uda0301s.7z


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 21:02 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
спасибо за ответы. важность праивльного перекодирования RGB можно продемонстировать на cobalp. в grey редиме он сжимает на 20% лучше, чем diff+grzip. в rgb редиме - всего на 5% лучше в режиме по умолчанию, и на те же 20% лучше, если включить "colorspace conversion" при кодировании. так что без правильного кодирования цветов смысл в специальном кодеке для графики практически теряется

насчёт простого вычитания цветовых каналов друг из друга я слышал что это не даёт выигшрыша. поскольку корреляция между соседними точками в одном канале более выражена, чем между каналами

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 21:19 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
nimdamsk писал(а):
Какие из Можно для примера привести степень сжатия компрессора UDA - у него есть модели для 24-битных .bmp .tiff и сжимает он относительно PAQ8l быстро и почти так же эффективно.


посмотрел. он сжимает каждый канал независимо

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 20, 2007 10:45 
Не в сети
Уровень: эксперт

Зарегистрирован: Вс окт 03, 2004 14:52
Сообщения: 272
Откуда: High Wycombe, UK
Булат писал(а):
насчёт простого вычитания цветовых каналов друг из друга я слышал что это не даёт выигшрыша. поскольку корреляция между соседними точками в одном канале более выражена, чем между каналами


а как насчет проверить это в ж2к - насколько я помню выигрыш заметен.
тем более, что предикторы (например MED) же вычисляются по каждому каналу отдельно. одно другому никак не мешает

_________________
sergey.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 20, 2007 14:01 
Не в сети
Завсегдатай

Зарегистрирован: Пн сен 04, 2006 12:41
Сообщения: 71
[quote="Булат"]
посмотрел. он сжимает каждый канал независимо[/quote]
А всё-таки, какой результат он показывает на в Вашем вышеприведённом тесте?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 20, 2007 15:05 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
nimdamsk писал(а):
А всё-таки, какой результат он показывает на в Вашем вышеприведённом тесте?


2.9 mb, 138 sec. т.е. в 10 раз медленней и на 300 кб хуже, чем cobalp с "convert colorspace"

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 20, 2007 15:20 
Не в сети
Завсегдатай

Зарегистрирован: Пн янв 17, 2005 16:05
Сообщения: 417
sergey писал(а):
Булат писал(а):
насчёт простого вычитания цветовых каналов друг из друга я слышал что это не даёт выигшрыша. поскольку корреляция между соседними точками в одном канале более выражена, чем между каналами


а как насчет проверить это в ж2к - насколько я помню выигрыш заметен.
тем более, что предикторы (например MED) же вычисляются по каждому каналу отдельно. одно другому никак не мешает


как именно проверить? я даже не понял, что такое ж2к. и мои поптыки найти colorspace conversion в jasper оказались безуспешны

насчёт "не мешает" - я тоже не понял. предсказания делаются по R, а кодируется R-G, к примеру?

_________________
bulat_z##mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 20, 2007 18:03 
Не в сети
Уровень: эксперт

Зарегистрирован: Вс окт 03, 2004 14:52
Сообщения: 272
Откуда: High Wycombe, UK
Булат писал(а):
sergey писал(а):
Булат писал(а):
насчёт простого вычитания цветовых каналов друг из друга я слышал что это не даёт выигшрыша. поскольку корреляция между соседними точками в одном канале более выражена, чем между каналами


а как насчет проверить это в ж2к - насколько я помню выигрыш заметен.
тем более, что предикторы (например MED) же вычисляются по каждому каналу отдельно. одно другому никак не мешает


как именно проверить? я даже не понял, что такое ж2к. и мои поптыки найти colorspace conversion в jasper оказались безуспешны

насчёт "не мешает" - я тоже не понял. предсказания делаются по R, а кодируется R-G, к примеру?


ж2к это я так jpeg2000 обозвал. в нем есть возвожность кодировать как rgb, так и yuv. Для случая песпотерьного сжатия преобразование rgb <-> yuv соответственно тоже беспотерьное. Причем оно очевидно совпадает с тем, что привел Максим во втором варианте.
Ищи, у меня сорцов под рукой нет, может к вечеру освобожусь и покажу где это происходит.

Насчет не мешает - предсказание делается по каналу, которые кодируется - если кодируем rgb, то и предсказываем отдельно r, g, b, а если кодируем yuv, то соответственно y, u, v. Приближенное отображение rgb->yuv ничем особенным не отличается. Внутри каждого канала между пикселами остаются почти те же зависимости.

_________________
sergey.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 21, 2007 07:42 
Не в сети
Уровень: эксперт

Зарегистрирован: Вс окт 03, 2004 14:52
Сообщения: 272
Откуда: High Wycombe, UK
Булат писал(а):
как именно проверить? я даже не понял, что такое ж2к. и мои поптыки найти colorspace conversion в jasper оказались безуспешны


jpc_mct.c/h:
jpc_rct(), jpc_irct() - беспотерьное преобразование
jpc_ict(), jpc_iict() - потерьное преобразование

_________________
sergey.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Поиск по сайту:
Поиск по форуму | Справка | Детальный запрос

Сайт о сжатии >>
  Новинки | О сервере | Статистика

  Книга "Методы сжатия данных" >>
     Универсальные | Изображений | Видео


  Разделы >> Download (статьи+исходники) | Ссылки | Ru.compress | Arctest | Видео | Форум | Старый Форум

  Проекты >> А.Ратушняка | М.Смирнова | В.Юкина | Е.Шелвина | А.Филинского | Д.Шкарина | С.Оснача | Д.Ватолина
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB