MSC (media streams compressor)

MSC (media streams compressor) 0.0.6.4

Нет прав для скачивания
Пакер/препроцессор для мультимедиа данных. На данный момент поддерживаются данные следующих типов: dds (raw,dxt), bmp, wav (pcm), mp3. Т.к. этот препроцессор затачивается под работу с freearc'ом, то обработка данных осуществляется с одним входным файлом. На выходе получается так же один архив собственного формата.
Текущая версия пока не доведена до ума, в частности не доделана обратная упаковка извлеченных медиаданных в архив (команда i), команда "e" пока работает без возможности удаления исходных данных.

Краткое описание команд и опций пакера:

[Команды]:
  • с - команда на упаковку входных данных. Эта команда является дефолтной, т.е. если не была указана ни одна команда, программа будет работать в режиме упаковки. Эта единственная команда, для которой кроме входного файла надо указывать так же и выходной.
  • s - просто сканирование входного файла с целью детекта различного рода медиаданных. В конце выводится подробная статистика найденных готовых к упаковке данных, а так же валидных, но по той или иной причине не годных для упаковки.
  • e - извлекает все найденные медиаданные в папку с названием схожую с названием входного файла. Задумано для извлечения неупаковываемых данных, типа bik, ogg, последующим ручным их lossy сжатием и вставлением обратно в исходный архив командой "i" с обнулением данных оставшейся области после каждого файла длиной равной разности исходного размера файла и lossy сжатого, что при последующем сжатии в lzma (или в любой другой конечный алгоритм) даст некий выигрыш.
  • ec - аналогичен предыдущей команде, но извлекает только готовых к упаковке данных.
  • i - пока не рабочая.
[Общие опции]:
  • -h или -? - показывает хелп на (ломаном) английском;
  • -log=xxx - логгирует все выводимое на экран в файл xxx;
[Опции детекта]:
  • -wav=N - включает (если N=1) или выключает (N=0) детект RIFF WAVE файлы. По умолчанию -wav=1;
  • -raw=N - задает уровень детекта raw (без заголовков) аудио потоков. При N=0 фильтр выключается, при N=1 включается быстрый режим поиска (~20мб/с на 4х ядерном проце), при N=2 включается улучшенный поиск с lzma-взвешиванием (исключаются некоторые "шумные" данные и двухбайтные таблицы (каждый элемент которых является двухбайтам целым числом). Скорость 20-5мб/с, при увеличении % содержания аудио данных приближается к меньшей скорости). По умолчанию -raw=0;
  • -bmp=N - включает (если N=1) или выключает (N=0) детект BMP файлов. По умолчанию -bmp=0;
  • -dds[DXT,RAW]=N - включает (если N=1) или выключает (N=0) детект DDS DXT или DDS RAW файлов. По умолчанию -ddsDXT=1 и -ddsRAW=0;
  • -mp3=N - задает уровень детекта mp3 фреймов. При N=0 выключает поиск mp3, при N=1 ищет только последовательно идущие mp3 фреймы, при N=2 ищутся фреймы с возможным некоторым небольшом расстоянии друг от друга (помогает искать "кривые" mp3 и другие нестандартные расположения mp3 фреймов). При -mp3=2 (для -mp3=1 это не распростаняется) выключается поиск RAW аудио блоков, т.к. оба искать контента не представляется возможным. По умолчанию -mp3=1;
  • -minMP3Frames=N - минимальное количество найденных фреймов, при котором определяется, что это на самом деле и есть mpeg файл, а не удачно расположенный мусор. По умолчанию -minMP3Frames=20;
  • -maxMP3Block=N - задает максимальный размер найденного mp3 блока, после которого файл режется. Т.е. если попался mp3 файл размером 6мб, а -maxMP3Block=1mb, то этот файл разрежется на 6 кусков и каждый зажмется по отдельности. Это необходимо для более плавной распаковки. А размер особо не страдает, если вообще меняется (не измерял). По умолчанию -maxMP3Block=1m;
  • -lzma:x:y:... - задает параметры компрессии для lzma-взвешивания, необходимого при детекте DXT DDS (только при -dxt=2) и RAW аудио блоков (при -raw=2). Возможны следующие параметры алгоритма: bt4/hc4, lc, lp, pb, fb и mc. Указываются те же, что будут использованы для конечного сжатия lzma во фриарке. Без указания каких-либо параметров или вообще наличия данной опции они принимают следующие значения: -lzma:bt4:lc3:lp0:pb2:fb32:mc32 (Вместо двоеточий могут быть любые знаки).
[Опции сжатия]:
  • -bmf=N - уровень сжатия bmf кодера [1..9] для raw dds и bmp. При задании уровня так же можно добавить символ "s" (например -bmf=9s), который включит усиленное сжатие, но упаковка и, что главное, распаковка будет занимать гораздо больше времени (на порядок). Значение по умолчанию -bmf=9;
  • -frog=N и -tak=N - взаимоисключающие опции для задания уровня сжатия wav pcm данных [1..9] OptimFrog'ом и TAK'ом соответственно. Если устанавливается одна опция, вторая автоматически выключается. Значения по умолчанию -frog=(off); -tak=9;
  • -dxt=N - уровень оптимизации DDS DXT текстур. При N=0 любая оптимизация отключена, текстуры сохраняются в архив в исходном виде. При N=1 для всех dxt включается простая перестановка сходных по содержимому данных вблизи друг с другом. При N=2 включается lzma взвешивание - если исходный файл сожмется лучше, чем оптимизированный (не всегда перестановка улучшает конечное сжатие), то в выходной поток он пройдет без изменения. В будущем планирую добавить еще кучку моделей транформации индексов и цветов, соответственно и добавятся уровни сжатия. По умолчанию N=2;
[Опции фильтрации по размеру]:
  • -f - выключает фильтры по размерам данных.
  • -maxDDS[RAW,DXT,MIP]=N , -minDDS[RAW,DXT,MIP]=N - задает сответственно максимальный и минимальный размер для DDS файлов различных подтипов. Если найденный файл превысит или будет меньше указанных величин, то он исключится из обработки. RAW - размер для фильтра RAW DDS текстур. DXT - размер для фильтра DXT DDS текстур. MIP - при сжатии RAW DDS тестур с помощью bmf компрессора из текстур по одному извлекаются и сжимаются все mip уровни, так вот этот фильтр устанавливает минимальный и максимальный размер мип-уровня, который сожмется компрессором, остальное скопируется в исходном виде;
  • -max[BMP,WAV,RAW]=N - задает максимальный размер для соответствующих типов данных. Максимальный размер для mp3 не задается, они все равно режутся на куски опцией -maxMP3Block;
  • -min[BMP,WAV,MP3,RAW]=N - задает максимальный размер для соответствующих типов данных.
[Другие опции]:
  • -t=N - задает число используемых потоков. При значении равном 0 число потоков определяется по числу ядер процессора. По умолчанию N=0;
  • -v - вывод подробной информации о происходящих процессах, а так же подробной конечной информации о найденных данных (для команды s она автоматом включена). Рекомендую всегда юзать, т.к. так легче понять в чем проблема при какой-либо ошибке в программе.
  • -vv - показывает так же некоторую инфу о найденных RAW аудио блоках и их смещения относительно начала сканируемого файла.

Эта версия пока не умеет распаковывать упакованные в bmf данные (raw dds, bmp).
Анпакер сделан пока только в виде ехе файла (для более простого отлова багов), когда все доделаю он будет так же и в виде CLS фильтра для фриарка с параллельной распаковкой относительно основного алгоритма сжатия фриарка (например lzma).

MSC v0.0.1(24.06.2011)
Эта версия пока не умеет распаковывать упакованные в bmf данные (raw dds, bmp).
Анпакер сделан пока только в виде ехе файла (для более простого отлова багов), когда все доделаю он будет так же и в виде CLS фильтра для фриарка с параллельной распаковкой относительно основного алгоритма сжатия фриарка (например lzma).

MSC v0.0.2(13.08.2011)
  • чего-то то там правил в пакере, но уже не помню , надо записывать :)
  • добавил распаковку данных, упакованных с bmf (dds raw, bmp). В библиотеке распаковки bmf'а обнаружился баг - он иногда переворачивал изображения, но благодаря помощи kampasterДмитрию Шкарину был отправлен багрепорт, который в свою очередь подправил это дело и выслал рабочую библиотеку.
  • зашил все дллки в анпакер. Для распаковки можно выбрать ехе файл с необходимой комбинацией анпакеров (не люблю кучу дллок рядом с прогой).
Думаю к следующей версии добавляю cls фильтр для распаковки msc и можно выходить в свет.

MSC v0.0.3(18.10.2011)
  • пофиксил некоторые баги, добавил новые;
  • переписал все под чистый винапи;
  • в режиме оптимизации DXT DDS заменил zlib взвешивание на lzma (включается через -dxt=2) с заданием через двоеточие (или любой другой знак) параметров для алгоритма (lc,lp.pb,fb)
  • добавил детект нестандартных mp3 файлов (с некоторым возможным расстояние между фреймами и неверным выравниванием), которые более или менее нормально жмутся пакером.
  • больше не помню чего менял.

MSC v0.0.4(24.10.2011)
  • пофиксил баг с падением проги при отображении нестандартных частот дискретизации;
  • исправил некоректное извлечение файлов опций e/ec;
  • перековырял весь код с целью все той же оптимизиции.

MSC v0.0.5(03.12.2011)
Изменения:
  • добавил поблочный (на данный момент блоки только по 16кб) детект 16-ти битных raw аудио потоков. До идеала пока явно не дотягивает, но все же довольно корректно находит аудио данные без заголовков. Надо будет сделать еще некоторое "сглаживание" найденных блоков, а то местами в реально одном звуковом стерео файле находятся блоки с моно содержанием. Так же нужно будет чтобы сглаживались резкие смены содержимого (например в 20 блоках детектятся аудио, потом 1 блок якобы мусора, а далее снова аудио). Поиск raw аудио включается опцией -raw=N, где N=1 или 2. В первом режиме скорость скана на 4хядерном проце порядка 20мб/с, во втором - 5-20мб/с. При чем не обязательно второй режим даст лучший детект, скорее он отсекает некоторые "шумные" и "тихие" данные, а так же некоторые другие последовательности данных;
  • исправил зависание при некорректном размере в заголовке любого сканирумого подтипа (при превышении размера, полученного из заголовка найденных медиаданных, размера самого сканируемого файла);
  • при возрате системой ошибки открытия или создания временного файла сделал циклический повтор на определенный промежуток времени. Все из-за того, что в некоторых случаях при работе с одинаковыми именами временных файлов система возращает отрицательный результат (я так думаю винда просто не успевает обработать удаление старого файла, или индексирование косячит);
  • для LZMA-взвешивания добавил параметры bt4/hc4 (Match Finder), mc=N (Match Finder Cycles);
  • отключил проверку частоты дискретизации для RIFF WAVE;
  • в парсере командной строки добавил обработку значений размерностей байт/кбайт/мбайт/гбайт;
  • всякие мелкие исправления и добавления.

Небольшое исправление:
  • Разделил опцию -dds на -ddsraw и -ddsdxt;
  • подкорректировал взаимосвязи опций -mp3 и -raw;

Еще одно исправление:
  • Исправил утечку памяти при lzma-взвешивании, приводившую через какое-то время к нехватке памяти приложению;
  • чуть ускорил взвешивание dxt dds;

Изменения (относительно v0.0.5c):
v0.0.6
  • исправил детект при расположении целевого субфайла впритык с концом архива;
  • добавил обработку ATI2 текстур в dds (преобладают в crysis 2);
  • исправил ошибку при детекте raw audio (криво детектилось при -raw=1). Вообще пока в моих тестах -raw=1 дает лучший конечный результат нежели -raw=2;
  • сделал сглаживание резких переходов в детекте raw audio;
  • опции -ddsraw и -bmp теперь по умолчанию равны 0;
v0.0.6.1
  • исправил детект wav'ок с валидным заголовком, но нулевой длиной данных;
v0.0.6.3 (05.03.2013г)
  • добавил вывод информации в лог-файл (опция -log=file);
  • исправил неверную обработку опций начинающихся на "min.." и "max.." (на них выдавало ошибку);
  • исправил вылет cls фильтра при деинициализации, если он не был использован в инсталле;
v0.0.6.4 (26.08.2013г)
  • исправил ошибку при использовании опции -log;
  • обновил ТАК до версии 2.3.0;
Автор
ProFrager
Скачивания
368
Просмотры
3,287
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Другие ресурсы пользователя ProFrager

Последние рецензии

В цепочке pzlib+msc+lzma2 дает великолепный результат сжатия!
Сверху