1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

MSC (media streams compressor) 0.0.6.4

Пакер/препроцессор для мультимедиа данных.

  1. ProFrager
    Пакер/препроцессор для мультимедиа данных. На данный момент поддерживаются данные следующих типов: 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;