# MVTools

## Общая информация

Авторы:Manao, Fizick(Александр Балахнин), Tsp, TSchniede, SEt
Версия: 2
Загрузка: http://avisynth.org.ru/
Категория: плагины разного назначения (Misc Plugins)
Требования: YV12, YUY2 цветовые форматы

## Содержание:

- I) О MVTools
- Ia) О MVTools версии 2
- II) Описания функций
- III) Примеры
- IV) Отказ от гарантий (Disclaimer) (не игнорируйте эту часть, хоть мы и не настаиваем на ее изучении)
- V) Ревизии
- VI) Скачать (Download)

## I) О MVTools

MVTools плагин для AviSynth 2.5 - это коллекция функций для оценки и компенсации движения объектов в видео клипах. Компенсация движения может быть использована для сильного временного понижения шума, продвинутых преобразований частоты кадров, реставрации изображений и других задач.

Плагин содержит серверную функцию оценки движения MAnalyse (сервер) для нахождения векторов движения и несколько клиентских функций компенсации движения (MCompensate, MMask и других), которые используют эти векторы.

Плагин использует метод сличения блоков (block-matching) для оценки движения (подобные методы используются в MPEG2, MPEG4 и т.д). На стадии анализа плагин разделяет кадры на малые блоки и пробует найти для каждого блока в текущем кадре наиболее подобный (соответствующий) блок во втором кадре (предыдущем или последующем). Относительное смещение этих блоков и есть вектор движения. Основной мерой подобия блоков является сумма абсолютных разностей (SAD) всех пикселов этих двух сравниваемых блоков. SAD это величина, показывающая, насколько хороша оценка движения.

Выходом функции MAnalyse является специальный клип с информацией о векторах движения в некотором формате.

На стадии компенсации клиентские функции плагина читают вектора движения и используют их, чтобы передвинуть блоки и сформировать кадр с компенсированным движением (или реализуют какую-либо другую функцию полной или частичной компенсации или интерполяции). Каждый объект (блок) в этом (полностью) скомпенсированном кадре помещен в ту же позицию, как этот объект в текущем кадре. Таким образом, мы можем (например) использовать сильное временное понижение шума даже для достаточно быстро движущихся объектов без производства раздражающих артефактов и призраков (особенности и края объектов совпадают, если компенсация совершенна). Плагин может создать компенсированные соседние кадры для каждого текущего кадра и снизить его шум с помощью внутренней функции. Альтернативно, вы можете использовать использовать компенсированные кадры, чтобы создать клип с их чередованием, понизить его шум с использованием любого внешнего фильтра, и выбрать для выхода центральные очищенные кадры (смотри примеры).

Конечно, оценка компенсация движения не идеальна и не точна. В некоторых сложных случаях (видео с затуханием, сверх-быстрым движением, периодическими структурами) оценка движения может быть полностью неверна, и компенсированный (особенно интерполированный) кадр будет блочным и (или) уродливым. Трудности также представляют заслонение одного объекта другим или наоборот, открытие. Сложные AviSynth скрипты со многими функциями компенсации движения могут съесть огромное количество памяти и привести к очень медленной обработке. Это не простой, а достаточно сложный плагин. Используйте его только для подходящих случаев, и попытайтесь настроить его параметры. Есть много обсуждений по поводу использования компенсации движения на (англоязычном) форуме doom9 по AviSynth. В частности смотрите старую ветку по MVTools, ветку по true motion, новую ветку по MVTools и несколько других. Попробуйте почитать сообщения как дополнения к данной документации и спрашивайте там поддержку. Если вы действительно заинтересовались вопросами оценки и компенсации движения, вы легко найдете многочисленные научные публикации (используйте WWW поиск).

Замечания. Данный плагин еще в стадии разработки. Текущая версия имеет некоторые ограничения. Поддерживается только прогрессивное видео цветового формата YV12, YUY2. Используйте преобразование цветовых форматов и попробуйте использовать (разумный) BOB-деинтерлейс для чересстрочного видео (может также работать разделение на поля SeparateFields с или без SelectEven/SelectOdd). Некоторые сложные скрипты (MVBOB, MCBOB, TempGaussMC) используют MVTools для деинтерлейса с компенсацией движения.
Альтернативно вы можете попробовать использовать плагин Motion от mg262.

## Ia) О MVTools версии 2

MVTools версии 2 является значительным внутренним и внешним обновлением. Главными целями MVTools v2.x являются ясность и стабильность (в частности для многопоточного окружения с многоядерными процессорами), и конечно улучшение производительности и использования памяти.

Основное средство достижения целей - удаление внутреннего буфера MVTools с мистическим (для многих людей) индексом (idx) и некоторых других внутренних трюков (смотри ветку MVTools without idx). Чтобы реализовать это без ухудшения производительности, мы используем нормальный эффективный кадровый кэш Avisynth и вводим новую обязательную подготовительную стадию (перед оценкой движения `MAnalyse`). На этой стадии новая функция `MSuper` будет получать клип-источник и готовить специальный супер клип "super" с многоуровневыми (иерархически масштабированными) данными по кадрам (в предыдущих версиях MVTools 0.X-1.X эти многоуровневые данные готовились, хранились и кэшировались внутренне с idx как индексом псевдоклипа этих "суперкадров"). Суперклип затем используется как функцией `MAnalyse`, так и клиентскими функциями компенсации движения.

Соответствующие изменения синтаксиса: некоторые параметры (pel, sharp) функции `MAnalyse` перемещены в функцию `MSuper`.

Другое существенное внешнее изменение - замена всех именованных клиповых параметров на неименованные (обязательные, без двойных кавычек в описании) для нормальной работы подразумеваемого клипа "last" в Avisynth.

Также в v2.0 введена более быстрая планарная обработка для YUY2.

С версии 2.2 MVTools.dll переименована в MVTools2.dll, и с версии 2.3 все функции переименованы из MVxxx в Mxxx (например из MVAnalyse в MAnalyse), так вы можете продолжать использовать старый MVTools 1.x с вашими старыми скриптами, и Вы способны создавать и использовать новые скрипты с MvTools 2.x без изменения загружаемых dll.

Я также имею намерение удалить (не переносить) некоторые устаревшие функции типа MVDenoise, MVFlowFps2 (пожалуйста, голосуйте).

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

Вообще говоря, новая MVTools 2.0 должна давать результаты, подобные версии 1.11.4. Улучшения алгоритмов планируется в версии v2.1 и позже.

Примечание: Версия 2 пока имеет альфа (бета?) статус (она должна быть вполне стабильна для обработки, но некоторый синтаксис может поменяться). Приветствуются сообщения о возможных ошибках и предложения (запросы).

Последнее замечание: версии MVTools ветви 1.x больше не разрабатываются и не поддерживаются (Fizick).

## II)Описания функций

### Общие параметры

Фильтры, использующие вектора движения (MV), имеют ряд общих параметров. Это пороги детектирования сцен и флаги использования mmx/isse. Кроме того, фильтры используют один или несколько потоков векторов.

thSCD1 (int): порог определения, изменился ли блок в текущем кадре относительно предыдущего. Если блок изменился, это значит, что предварительный прогноз движения для него в целом некорректен. Это происходит, например, при смене сцен. То есть это один из порогов, используемых для отладки механизма детектирования смены сцен. Его увеличение уменьшит количество блоков, определяемых как измененные. Это может быть полезно для шумного или мерцающего видео. Порог сравнивается со значением SAD (Sum of Absolute Differences - суммой абсолютных различий, значение погрешности, говорящее о степени несоответствия рассчитанного прогноза движения). Для строго идентичных блоков мы имеем SAD=0. Но реальные блоки всегда отличаются из-за сложного движения объектов (приближение, вращение, деформация), дискретности отсчета пикселов, и шума. Предположим мы имеем два сравниваемых блока 8х8 с каждым из пикселов отличающихся на 5. В этом случае SAD будет 8x8x5 = 320 (блок будет зарегистрирован как неизменившийся при thSCD1=400). Если используются блоки 4x4, величина SAD будет 320/4. Если используются блоки 16x16, величина SAD будет 320/4. На самом деле этот параметр масштабируется внутренне, и Вы должны всегда использовать величину, приведенную к размерам блока 8x8. По умолчанию задано 400 (с версии 1.4.1).

thSCD2 (int): порог, задающий количество блоков, которые должны измениться, чтобы принять решение о смене сцен. Его диапазон 0...255, 0 соответствует 0 %, 255 - 100 %. По умолчанию задано 130 (что соответствует 51 %).

isse (bool): флаг использования ISSE, MMX и других оптимизирующих иннструкций процессора. Установка в false позволяет отключить оптимизацию для отладки. По умолчанию: true (включенв). Если Ваш процессор не поддерживает оптимизацию, она все равно будет отключена (и активировать ее не удастся)

planar (bool): логический флаг использования специального планарного цветового формата для YUY2 клипов как на входе, так и на выходе функций. Это использует специальный трюк для хранения кадров с планарной цветовой организацией данных (отдельные плоскости Y, U, V в памяти) в нормальном чередующемся формате YUY2 кадров как контейнере. Таким способом мы можем избежать многочисленных внутренних преобразований из чередующегося в планарный формат и увеличить скорость. Вы можете преобразовать нормальный чередующийся YUY2 исходный клип в планарный формат функцией `Interleaved2planar` из плагина RemoveGrain от kassandro, и преобразовать конечный результат функцией `Planar2interleaved`. Этот специальный планарный YUY2 также поддерживается плагином Removegrain от Kassandro, плагином MaskTools2 от Manao и некоторыми другими. Данный трюк не будет нужен в Avisynth v2.6 с внутренней поддержкой планарного формата YV16. Данный параметр игнорируется для клипов в формате YV12. Примечание: суперклип всегда планарный. По умолчанию planar=false.

### MSuper

`MSuper` (clip, int "hpad", int "vpad", int "pel", int "levels", bool "chroma", int "sharp", int "rfilter", clip "pelclip", bool "isse", bool "planar")

Получает исходный клип и готовит специальный "super" клип с многоуровневыми (иерархически масштабированными) данными по кадрам. Суперклип используется как функцией `MAnalyse`, так и клиентскими функциями компенсации движения.
Для хранения и передачи его параметров мы используем аудио свойства суперклипа (а именно, num_audio_samples) в качестве трюка. Аудио в суперклипе убито. Это является одной из причин, почему мы дополнительно используем исходный клип в клиентских функциях. Вы можете посмотреть суперклип сами (он использует обычный формат).

hpad : горизонтальное дополнение (бордюр), добавляемый к исходному кадру (слева и справа). Небольшое дополнение добавляется для более корректной оценки движения вблизи границ кадра. (В MVTools до версии v2.0, всегда внутренне использовалась величина дополнения, равная размеру блока. Теперь это не строго, а рекомендация). По умолчанию 8.

vpad : вертикальное дополнение (бордюр), добавляемый к исходному кадру. По умолчанию 8.

pel : точность прогнозирования движения. 1 означает точность до целого пиксела, 2 - до полу-пиксела, 4 - до четверти пиксела (более точное, но медленнее и не всегда лучше из-за большого шага масштаба между уровнями). По умолчанию: 2 с версии 1.4.10.

levels : число иерархических уровней в кадрах супер клипа. MAnalyse нуждается во всех уровнях, но для других клиентских функций достаточно одного самого тонкого уровня (более грубые не используются). По умолчанию : 0 (авто, создаются все возможные уровни).

chroma : установка в true позволяет готовить и цветовую информацию в суперклипе (false - только яркостную). По умолчанию true.

sharp: метод субпиксельной интерполяции для pel=2,4.
Используйте 0 для мягкой (билинейной) интерполяции, 1 для бикубической (по 4 точкам, Catmull-Rom), 2 для резкой типа Wiener (по 6 точкам, подобно Lanczos).
По умолчанию 2.

rfilter: фильтр сглаживания и сокращения (пополам) иерархических уровней.
0 - простое усреднение 4 пикселов подобно нефильтрованной SimpleResize (старый метод);
1 - треугольный (смещенный) фильтр подобно ReduceBy2 для большего сглаживания;
2 - треугольный фильтр подобно BilinearResize для еще большего сглаживания;
3 - квадратичный фильтр для еще большего сглаживания;
4 - кубический фильтр подобно BicubicResize(b=1,c=0) для еще большего сглаживания.
По умолчанию 2 (с версии 2.3.1). Вы можете также попытаться применить некоторый внешний фильтр к суперклипу или его грубой нижней части (соответствующей вырезкой и наложением).

pelclip: опциональный увеличенный исходный клип для использования вместо внутренней субпиксельной интерполяции (для pel>1).
Пикселы в строках и столбцах кратных pel (0,2,4,... для pel=2) должны быть оригинальными пикселами источника, другие пикселы должны быть интерполированы.
Пример для pel=2: LanczosResize(width*2,height*2,src_left=0.25, src_top=0.25)
(Недавнее замечание: это справедливо для яркостного канала, но не строго соответствует позициям пикселов цветности внутренней интерполяции в MVTools. Тем не менее, вектора и компенсация движения вполне подобны для обычных клипов, Строго та же цветность была бы при src_left=0.5 для YUY2 и дополнительно src_top=0.5 для YV12).
Другой полезный пример - интерполятор EEDI2 с направленностью вдоль краев.
По умолчанию не определен.

### MAnalyse

`MAnalyse` (clip super, int "blksize", int "blksizeV", int "level", int "search", int "searchparam", int "pelsearch", bool "isb", int "lambda", bool "chroma", int "delta", bool "truemotion", int "lsad", int "plevel", bool "global", int "pnew", int "pzero", int "pglobal", int "overlap", int "overlapV", string "outfile", int "dct", int "divide", int "sadx264", int "badSAD", int "badrange", bool "isse", bool "meander", bool "temporal", bool "trymany")

Получает подготовленный многоуровневый суперклип, оценивает движение методом сличения блоков и производит специальный выходной клип с данными по векторам движения (используемый другими функциями).
Реализованы некоторые иерархические многоуровневые методы поиска (от грубого масштаба изображения к тонкому). Функция использует нулевой вектор и векторы соседних блоков как предикторы (начальные приближения) для текущего блока. Сначала оценивается разница (SAD) для предикторов, затем пробный вектор изменяется на некоторую величину в некотором направлении, оценивается SAD, и так далее. Принятый новый вектор для блока - это вектор с минимальной разностью (SAD) (с некоторой поправкой-штрафом для согласованности движения)

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

blksize: Размер блока (горизонтальный). Возможны только значения 4, 8, 16, 32 (по умолчанию 8). БОльшие блоки менее чувствительны к шумам, и обрабатываются быстрее, но более грубы.

blksizeV : вертикальный размер блока. По умолчанию равен горизонтальному. Дополнительные варианты: 4 для blksize=8, 2 и 8 для blksize=16, 16 для blksize=32.

levels: Положительная величина - это количество уровней, используемых при иерархическом анализе во время нахождения векторов движения.
Отрицательная или нулевая величина - это количество грубых уровней, НЕ используемых при иерархическом анализе во время нахождения векторов движения. Чем оно меньше, тем обычно лучше (находятся вектора любой длины). Переменная оставлена главным образом для учебных (тестовых) целей. Иногда levels полезна для предотвращения очень длинных (ложных) векторов (компьютерной графики и т.п.). По умолчанию = 0 с версии 2.5 (используются все уровни).

search, searchparam, pelsearch : search определяет тип поиска, а searchparam - дополнительный параметр (шаг, радиус) поиска, а pelsearch - этот параметр радиуса для самого тонкого (pel) уровня:

- search = 0 : 'Однопроходный Поиск' (OneTimeSearch). searchparam - шаг между каждыми пробуемыми векторами (если searchparam больше 1, шаг будет постепенно уменьшаться).
- search = 1 : 'N-проходный Поиск'(NStepSearch). N задается параметром searchparam. Это наиболее хорошо известный алгоритм поиска векторов движения.
- search = 2 : Логарифмический поиск, также называемый Бриллиантовый поиск (Diamond Search). Параметр searchparam определяет начальный шаг поиска, и он (шаг) также постепенно уменьшается.
- search= 3 : Исчерпывающий поиск, searchparam - это радиус поиска (сторона квадрата 2*searchparam+1). Метод медленнее, но дает лучшие результаты по значению SAD.
- search = 4 : поиск шестиугольниками (Hexagon), параметр searchparam определяет диапазон. (подобно x264).
- search = 5 : поиск Нечетными мульти шестиугольниками (UMH), параметр searchparam определяет диапазон. (подобно x264).
- search = 6 : чисто Горизонтальный исчерпывающий поиск, searchparam это радиус (ширина 2*radius+1).
- search = 7 : чисто Вертикальный исчерпывающий поиск, searchparam это радиус (высота 2*radius+1).

По умолчанию: search=4, searchparam=2, pelsearch=pel.

isb : позволяет выбрать прямое направление поиска (от предыдущего к текущему кадру) для isb=false либо обратное (от последующего к текущему кадру) для isb=true (это реализовано и названо именно таким образом, не переспрашивайте :-). По умолчанию isb =false.

chroma : установка в true позволяет учитывать и цветовую информацию при оценке движения (false - только яркостную). По умолчанию true.

delta : устанавливает кадровый интервал между указанным и текущим кадром. По умолчанию он равен 1, что означает, что вектора движения ищутся между текущим и предыдущим (или следующим) кадром. Установка в 2 позволит искать mvs между кадром n и n-2 или n+2 (в зависимости от значения isb).

Существуют дополнительные параметры, которые устанавливают согласованность векторов движения для оценки так называемого истинного движения (true motion). Некоторые найденные поиском блоки другого кадра могут быть наиболее подобны образцовым блокам текущего блока по критерию интенсивности (SAD), но не отвечать истинному движению объекта. Например, они могут принадлежать другому подобному объекту в другом углу кадра, или относиться к некоторой периодической структуре. Параметры "истинного движения" (true motion) пытаются поддерживать поле движения согласованным, слаженным, вместо некоторого случайного распределения векторов. Это особенно важно для частичной компенсации и интерполяции движения. Некоторые параметры являются экспериментальными и могут быль удалены (заменены) из последующих версий после тестирования. Пожалуйста, сообщайте ваши заключения.

truemotion это предварительно созданный набор значений этих параметров. Он позволяет легко переключать значения по умолчанию сразу всех параметров "истинного движения". Установите его равным true для поиска истинного движения (высокой согласованности векторов), Установите его равным false для поиска векторов движения с наилучшей SAD. По умолчанию - true c версии v1.4.10. В любом случае вы можете настроить каждый параметр индивидуально.

lambda : устанавливает согласованность (слаженность, coherence) поля векторов. Чем выше, тем больше согласованность. Однако, если задать его слишком высоким, некоторые 'правильные' вектора движения могут быть пропущены. Величины около 400 - 2000 (для размера блока 8х8) настоятельно рекомендуются. Внутренне это коэффициент для штрафа к SAD от квадратичной разности вектора от предиктора (соседей), масштабированный на 256.
По умолчанию 0 для truemotion=false и 1000*blksize*blksizeV/64 для truemotion=true.

lsad: порог SAD для использования lambda. Локальная lambda уменьшается (плавно с версии 1.10.2) если величина SAD предиктора вектора (сформированного из соседей) больше чем порог. Это предотвращает использование плохих предикторов, но снижает согласованность движения. Величины выше 1000 рекомендуются для истинного движения. Величина приводится к блоку 8x8 (с версии 2.0.11).
По умолчанию 400 для truemotion=false и 1200 для truemotion=true.

pnew: относительный штраф (в масштабе 256) к погрешности (SAD) для нового вектора-кандидата. Пробный вектор будет принят как новый вектор, только если его SAD со штрафом (SAD + SAD*pnew/256) будет лучше, чем погрешность (SAD) предиктора. Величины около 50-100 (для размера блока 8х8) рекомендуются для истинного движения. Это предотвращает замену вполне хороших предикторов на новый вектор с немного лучшей SAD, но другой длиной и направлением.
По умолчанию 0 для truemotion=false и 50 для truemotion=true.

plevel: режим масштабирования штрафного коэффициента lambda от уровня. Величина =0 - без масштабирования, 1 - линейная, 2 - квадратичная зависимость от размера иерархического уровня. Заметьте, что длина вектора меньше на более низком уровне.
По умолчанию 0 для truemotion=false и 1 для truemotion=true.

global: оценить глобальное движение (на каждом уровне) и использовать его как дополнительный предиктор. Оценивается только панорамное смещение (ни зум, ни вращение). Величина = false означает отменить, true - разрешить. По умолчанию false для truemotion=false и true для truemotion=true.

pzero: относительный штраф (в масштабе 256) к погрешности (SAD) для нулевого вектора. Это предотвращает замену вполне хороших предикторов на нулевой вектор с немного лучшей SAD (lambda не используется для нулевого вектора). По умолчанию равен pnew с версии 1.11.

pglobal: относительный штраф (в масштабе 256) к погрешности (SAD) для глобального предиктора. (lambda не используется для глобального вектора). По умолчанию равен 0.

overlap: величина перекрытия блоков (горизонтальная). Должна быть четной и меньше размера блока (до blksize/2 для MCompensate). Шаг между блоками для оценки движения равен (blksize-overlap). N блоков покрывают размер ((blksize-overlap)*N + overlap) на кадре. Попробуйте значения перекрытия от blksize/4 до blksize/2. Чем больше перекрытие, тем больше число блоков, и меньше скорость обработки. Величина по умолчанию 0.
Функции, поддерживающие режим перекрытия: MFlow, MFlowInter, MFlowFps, MShow, MMask, MCompensate, MDeGrain1, MDeGrain2, MDeGrain3.

overlapV: вертикальная величина перекрытия блоков. По умолчанию равна горизонтальной. Должна быть четной для YV12 и меньше размера блока.

outfile: имя файла для вывода данных по векторам движения. Эти данные могут быть использованы некоторыми внешними программами или может быть следующими версиями MVTools для кодирования второго прохода и т.п.
Производимый двоичный файл имеет заголовок (структура MVAnalysisData, смотри исходный код MVInterface.h), и последовательность данных:
номер кадра, данные вектора (Vx, Vy, SAD) каждого блока, номер следующего пригодного кадра, данные векторов этого кадра, и т.д.
По умолчанию - пустая строка, не записывать файл.

dct: использование DCT (частотный спектр) блоков для расчета отличия блоков (SAD). Это может в том числе улучшить оценку векторов движения при мерцаниях и затуханиях яркости.
0 - обычные пространственные блоки, не использовать DCT;
1 - использовать DCT блоков вместо пространственной информации (медленно для 8x8, и очень медленно для других размеров);
2 - смешанный режим с весами пространственной и DCT информации, зависящими от разности средней яркости кадров;
3 - адаптивное поблочное переключение от пространственного к равно смешанному (экспериментальный, чуть быстрее).
4 - адаптивное поблочное переключение от пространственного к смешанному с большим весом DCT (экспериментальный, чуть быстрее).
добавленные в 1.9.5.3 режимы: (требуют sadx264 0-7, используют быструю SATD функцию, только яркость!)
5 - SATD вместо SAD для яркости
6 - аналогично 2, но используя SATD
7 - аналогично 3, но используя SATD
8 - аналогично 4, но используя SATD
9 - подобно 2, используя SATD и вес диапазон от только SAD до равных SAD и SATD
10 - подобно 3/4, использовать SATD вес на SAD, только на сильных изменения яркости
По умолчанию = 0.

divide: пост-обработка векторов движения путем деления каждого блока на 4 одинаковых меньших подблока.
0 - не делить;
1 - делить блоки и присвоить оригинальный вектор всем 4 подблокам;
2 - делить блоки и присвоить подблокам медианные (с 2 соседними) вектора;
По умолчанию = 0. Размеры блоков и перекрытия должны быть выбраны подходящими после внутреннего деления.

sadx264: использовать SAD функции из кодека x264 если они доступны для данного размера блока
0 - (по умолчанию) автоматически детектировать процессор и выбрать оптимальный алгоритм SAD.
1 - использовать MMX 16x16, 16x8, 8x8, 8x4, 4x4 (8x16, 4x8 используются только для цветности)
2 - использовать MMX 16x16, 16x8, 8x8, 8x4 (8x16, используются только для цветности) с выравниванием блоков до 32 байт
3 - использовать MMX 16x16, 16x8, 8x8, 8x4 (8x16, только цветность) с выравниванием блоков до 64 байт, лучший для Pentium M
4 - использовать SSE2 16x16, 16x8 (без специального выравнивания)
5 - использовать SSE2 16x16, 16x8, выравнивание блоков до 64 байт (хорошо для Core)
6 - использовать SSE3 16x16, 16x8 (кажется работает быстрее только на Pentium 4E или Core1)
7 - использовать SSSES3 16x16, 16x8, выровненные до 64 байта блоки (хорошо на Core2)
Режимы 8-12 предназначены для отладки - используйте dct >4 вместо них.
Использование sadx264 > 7 означает: использовать выбранный вместо SAD для любой яркостной/цветностной SAD, где возможно!
for SAD / SATD mix and luma only use dct
8 - использовать SSD mmx, работает аналогично 1
9 - использовать SATD mmx, работает аналогично 1
10 - использовать SATD SSE2, работает аналогично 2
11 - использовать SATD SSSE3, работает аналогично 2
12 - использовать SATD SSSE3 с PHADD для 8xY, работает аналогично 2
По умолчанию 0, используйте -1 или >=13, чтобы использовать старый v1.9.4 код вместо функций SAD из x264

badSAD: порог SAD для более широкого повторного поиска для плохих блоков. Величина приводится к блоку 8х8. По умолчанию 10000 (отключающая величина), рекомендованные значения около 1000-2000.

badrange: диапазон (радиус) широкого поиска для плохих блоков. По умолчанию 24 (в единицах пикселов изображения). Используйте положительные величины для поиска UMH и негативные величины для Исчерпывающего поиска.

meander: Менять ли направление просмотра рядов блоков попеременно слева направо и справа налево. По умолчанию True с версии 2.5.1.

temporal: использовать ли временной предиктор из векторов движения предыдущего кадра. По умолчанию False. (несовместим с SetMTmode)

trymany: попробовать начать поиски вокруг нескольких предикторов (кроме самого токого уровня). По умолчанию false.

Попробуйте использовать функцию `MShow` для контроля оцененного поля движения и настройки параметров.

Замечание: MAnalyse (если Pel=2) учитывает признак разделенного на поля видео (после SeparateFields) и автоматически производит коррекцию векторов с учетом вертикального смещения полей разной четности. Попробуйте использовать AssumeFrameBased, если вам это не нужно.

### MCompensate

`MCompensate` (clip source, clip super, clip vectors, bool "scbehavior", float "recursion", int "thSAD", bool "fields", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Выполняет полную компенсацию движения кадра. Это означает, что блоки указываемые векторами движения в предыдущем кадре (или последующем, в зависимости от установок `MAnalyse`) будут двигаться вдоль векторов с целью достичь своих мест в текущем кадре.

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

vectors (неименованный) клип с векторами движения, произведенный функцией MAnalyse.

scbehavior (по умолчанию true), определяет, какой кадр будет сохранен при смене сцен. Если true, кадр оставляется неизменным. Иначе указанный кадр копируется в текущий. Аналогично для дополнения на правом и нижнем краях.

recursion - это процентный вес ранее компенсированных кадров в новую компенсацию в специальном рекурсивном режиме. Остальной вес берется (однородно) из заданного опорного кадра (используемого в обычном режиме). Recursion=100 - это полная рекурсия, подобно кольцевому режиму mode=2 старых версий MVTools v0.9.x. Не используйте рекурсивный режим, если вы не знаете, что вы делаете. По умолчанию recursion=0.

thSAD - это порог SAD для безопасной (фиктивной) компенсации. Если SAD блока выше чем thSAD, то плок плохой, и мы используем блок из источника source вместо компенсированного блока. По умолчанию 10000 (практически отменена).

fields: если true и pel=2 или 4, добавляет соответствующий вертикальный сдвиг (на полпиксела) полей основанного на полях видео. Попробуйте использовать это для деинтерлейса (не для понижения шума)
По умолчанию false.

Обработка перекрывающихся блоков реализована как оконное суммирование блоков (аналогично FFT3DFilter, величина overlap до blksize/2) для снижения артефактов блочности.

### MMask

`MMask` (clip source, clip vectors, int "ml", float "gamma", int "kind", int "Ysc", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Создает клип масок из исходного клипа на основе данных векторов движения vectors. Маска определяется данными по блокам, но интерполируется до полного размера кадра. Маска создается как в яркостном канале, так и в плоскостях цветности. Величины в маске могут быть от 0 (мин) до 255 (макс).

Параметр kind определяет разновидность маски.

Режим kind=0 создает маску движения исходя из длины векторов движения. Функция строит маску лучше, чем функция `MotionMask` плагина MaskTools, так как вектора движения намного более достоверны, чем алгоритм в MotionMask. Значение маски 0 означает отсутствие движения вообще (длина вектора нулевая). Чем больше длина вектора, тем больше величина маски (насыщается до 255), масштаб определяется параметром ml.

kind=1 позволяет построить маску из величин SAD (суммы абсолютных разностей) вместо длин векторов. Это может быть полезно, чтобы выявить проблемные области с плохой оценкой движения. (Используется внутренний коэффициент blocksize*blocksize/4 для нормализации масштаба ml.)

kind=2 позволяет построить маску окклюзий (разрывности, заграждения, occlusion) (плохих блоков из-за разрыва, растяжения). В настоящей версии используется некоторая нормализованная сумма положительных разностей движения блоков. Она может масштабироваться ml.

kind=3 позволяет построить маску из величин горизонтальной составляющей векторов движения в единицах pel плюс 128. Масштабные коэффициенты не используются.

kind=4 позволяет построить маску из величин вертикальной составляющей векторов движения в единицах pel плюс 128. Масштабные коэффициенты не используются.

kind=5 - цветная карта движения как x,y компоненты векторов, показанные на цветовых плоскостях U, V (в единицах pel, плюс 128, масштабные коэффициенты не используются).

gamma используется для определения показателя степени зависимости выхода от входа. gamma = 1.0 подразумевает линейную зависимость, а gamma = 2.0 дает квадратичную. И наконец, Ysc есть величина, принимаемая маской при смене сцены.

По умолчанию: kind=0, ml = 100, gamma = 1.0, и Ysc = 0.

### MSCDetection

`MSCDetection` (clip source, clip vectors, int "Ysc", int "thSCD1", int "thSCD2", bool "isse")

Создает клип маски смены сцены на основе данных векторов движения vectors. Маска создается для каналов яркости и цветоразности. Выход без смены сцены равен 0.

Ysc - это величина, принимаемая маской при смене сцены, по умолчанию 255.

### MShow

`MShow` (clip super, clip vectors, int "scale", int "sil", int "tol", bool "showsad", int "number", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Показывает вектора движения vectors на дополненном бордюрами клипе, загружая суперклип (с версии 2.0.11).
Параметр scale позволяет увеличить вектора движения, например для увеличения точности (когда pel > 1 и scale = 1, невозможно увидеть изменения менее чем на 1 пиксель).
sil позволяет увидеть различные уровни анализа (когда для поиска векторов движения задан иерархический анализ и интересно увидеть что произойдет при более высоких уровнях).
tol - порог допуска (толерантности). Если искажения, вызванные вектором движения больше tol, то вектор не показывается.
Наконец, showsad позволяет показать среднее (приведенное к блоку 8х8) значение SAD картинки после компенсации и количество (ThSCD2) плохих (ThSCD1) блоков.

number позволяет пометить заданный блок (с данным номером) как белый. По умолчанию =-1.

По умолчанию: scale = 1, sil = 0, tol = 20000 и showsad = false (что обеспечивает показ всех векторов).

### MDepan

`MDepan` (clip, clip vectors, clip "mask", bool "zoom", bool "rot", float "pixaspect", float "error", bool "info", string "log", float "wrong", float "zerow", int "range", int "thSCD1", int "thSCD2", bool "isse", bool planar)

Получает вектора движения vectors, оценивает глобальное движение и помещает данные в выходной кадр в специальном формате для плагина DePan (от Fizick).

Меж-кадровое глобальное движение (панорамирование, зум, вращение) оценивается итерационной процедурой, с использованием только хороших блоков.

Отвергаемые блоки: 1) вблизи границ кадра или по маске; 2) с большим SAD (по параметру thSCD1); 3) с движением, отличающимся от соседей и глобального.

mask клип (если задан) используется для задания весов векторов блоков равными соответствующим значениям пикселов кадра маски в центре блока (используйте полностью черный, чтобы отвергнуть блок). Если клип маски не задан, то отвергаются 4 блока у каждой границы (старый до v2.4.3 алгоритм.)

Параметры zoom и rot включают оценку зума и вращения, pixaspect это аспект пиксела (1.094 для стандартного PAL, 0.911 для стандартного NTSC), error это максимум отличия от среднего движения.

Оцениваемое глобальное движение кадра выключается в нулевое для больших ошибок движения error или на смене сцены (по параметрам thSCD1, thSCD2).

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

Параметр log позволяет задать имя лог-файла для вывода значений в формате DeShaker, DePan.

wrong определяет предел для отброса блоков очень отличных от соседей.

zerow определяет вес нулевых векторов движения (для уменьшения их влияния).

range - число предыдущих (и также последующих) кадров (полей) соседних с запрошенным кадром, для которых оценивается движение.

Значения по умолчанию: zoom = true, rot = true, pixaspect = 1.0, error = 15.0, info = false, wrong=10, zerow=0.05, range=0.

Для оценки глобального движения чересстрочного видео, вы должны разделить поля (как для MAnalyse, так и MDepan).

### MFlow

`MFlow` (clip source, clip super, clip vectors, float "time", int "mode", bool "fields", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Делает компенсацию движения кадра не по блокам (как MCompensate), а по пикселам. (Flow - течение). Вектор движения каждого пиксела вычисляется путем билинейной интерполяции векторов движения текущего и соседних блоков (в соответствии с положением пиксела). Это означает, что пикселы, указываемые вектором в опорном кадре будут двигаться (течь) вдоль вектора, чтобы достичь их мест в текущем кадре. Данный метод компенсации движения течением не производит блочных артефактов, и хорош для понижения шума, но иногда может создать очень странные деформированные картины :). Оценка истинного движения настоятельно рекомендуется для этой функции. Компенсация движения может быть полной или частичной (в промежуточное время).
Ограничение: вектора с компонентами выше 127 будут сброшены к нулевой длине.

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

vectors (неименованный) клип с векторами движения, произведенный функцией MAnalyse.

time: процент компенсации движения (по умолчанию=100.0, полная компенсация), определяет временной момент между опорным и текущим кадром.

mode: режим может быть или 0 (по умолчанию), или 1.
mode=0 - поднести пикселы к каждому месту целевого кадра. Это основной рабочий режим.
mode=1 - сдвинуть пикселы от каждого места источника (опорного). Это отладочный (учебный) режим с некоторыми пустыми местами (с нулевой интенсивностью). Он может быть использован для генерации маски окклюзий.

fields: если true и pel =2 или 4, добавляет соответствующий вертикальный сдвиг (на полпиксела) полей основанного на полях видео. Попробуйте использовать это для деинтерлейса (не для понижения шума)
По умолчанию false.

### MFlowInter

`MFlowInter` (clip source, clip super, clip mvbw, clip mvfw, float "time", float "mL", bool "blend", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Функция интерполяции движения. Это не то же самое (но подобное) функции MVInterpolate более старых версий MVTools. Она использует обратные "mvbw" и прямые "mvfw" вектора движения, чтобы создать изображение в некоторый промежуточный момент времени между текущим и следующим (на delta) кадром. Она использует по-пиксельную компенсацию движения (методом MFlow) из обоих кадров. Используются внутренние прямая и обратная маски окклюзий - разрывности (методом MMask kind=2) и временные взвешивающие факторы, чтобы произвести выходное изображение с минимальными артефактами. Оценка истинного движения настоятельно рекомендуется для этой функции.

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

mvbw, mvfw (неименованные) клипы с обратными и прямыми векторами движения, произведенный функцией MAnalyse.

time: положение интерполяционного момента времени между кадрами (в процентах, по умолчанию=50.0, посредине)

ml: масштабный параметр маски. Меньшие величины соответствуют более сильной маске окклюзий (как в функции MMask, используйте ее для настройки и отладки). По умолчанию=100.

pelclip: увеличенный исходный клип для использования вместо внутренней субпиксельной интерполяции (для pel=2) (как в MAnalyse).
По умолчанию не определен.

blend: если True, то смешивать кадры на сменах сцен подобно `ConvertFps`, а если False, то повторять последний кадр подобно `ChangeFps`. По умолчанию = True.

### MFlowFps

`MFlowFps` (clip source, clip super, clip mvbw, clip mvfw, int "num", int "den", int "mask", float "ml", bool "blend", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Будет изменять частоту кадров (fps) клипа (и число кадров). Функция может быть использована для преобразования частоты, эффектов замедления движения и т.п. Она использует обратные "mvbw" и прямые "mvfw" вектора движения чтобы создать интерполированные изображения в некоторые промежуточные моменты времени между кадрами. Функция использует по-пиксельный метод компенсации движения (как MFlow, MFlowInter). Используются внутренние прямая и обратная маски окклюзий - разрывности (методом MMask kind=2) и временные взвешивающие факторы, чтобы произвести выходное изображение с минимальными артефактами. Оценка истинного движения настоятельно рекомендуется для этой функции.

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

mvbw, mvfw (неименованные) клипы с обратными и прямыми векторами движения, произведенный функцией MAnalyse.

num: fps числитель выходной частоты кадров. По умолчанию = 25.

den: fps знаменатель (по умолчанию = 1). Результирующая частота кадров fps = num/den. В частности для удвоенной NTSC fps=2*29.97 используйте num=60000, den=1001, а для удвоенной NTSC FILM fps=2*23.976 используйте num=48000, den=1001.

Причем если num или den равны нулю, подразумевается удвоенная частота входного клипа (с версии 1.8).

mask: режим обработки:
mask=0 для простых прямой и обратной масок разрывности (использовался в версиях до 1.4.x, самый быстрый);
mask=1 для подобных масок с дополнительным переходом к статическим нулевым векторам в областях разрывности (подобный v1.5.x);
mask=2 для использования дополнительных векторов из смежных кадров для снижения ореолов движущихся объектов в областях разрывности (v1.8, медленный). ПО умолчанию =2.

ml: масштабный параметр маски. Большие величины соответствуют более слабой маске разрывности (как в функции MMask, используйте ее для настройки и отладки). По умолчанию=100.

blend: если True, то смешивать кадры на сменах сцен подобно `ConvertFps`, а если False, то или повторять последний кадр подобно `ChangeFps`. По умолчанию = True.

### MBlockFps

`MBlockFps` (clip, clip super, clip mvbw, clip mvfw, int "num", int "den", int "mode", float "thres", bool "blend", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Данная функция использует основанную на блоках частичную компенсацию блоков для изменения частоты кадров (fps) клипа (и число кадров). Она использует обратные "mvbw" и прямые "mvfw" вектора движения чтобы создать интерполированные изображения в некоторые промежуточные моменты времени между кадрами. Некоторые внутренние прямые и обратные маски и временные взвешивающие факторы используются для производства выходного изображения. (алгоритм основан на функции MVInter старой версии MVTools 1.9.12.) Это обычно быстрее, чем MFlowFps, но может дать блочность и другие артефакты. Оценка истинного движения настоятельно рекомендуется для этой функции. Некоторые пикселы справа и внизу, не полностью покрытые блоками, будут произведены путем смешения кадров.

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

mvbw, mvfw (неименованные) клипы с обратными и прямыми векторами движения, произведенный функцией MAnalyse.

num: fps числитель выходной частоты кадров. По умолчанию = 25.

den: fps знаменатель (по умолчанию = 1). Результирующая частота кадров fps = num/den. В частности для удвоенной NTSC fps=2*29.97 используйте num=60000, den=1001, а для удвоенной NTSC FILM fps=2*23.976 используйте num=48000, den=1001.

Причем если num или den равны нулю, подразумевается удвоенная частота входного клипа.

mode: режим обработки:
0 - среднее от приведенных прямой и обратной частичных компенсаций движения (быстрый, по умолчанию).
1 - статическая медиана.
2 - динамическая медиана.
3 - взвешенная по времени комбинация принесенных прямых блоков, маскированных смещенными обратными, и принесенных обратных, маскированных смещенными прямыми.
4 - режим 3, смешанный с простым статическим усреднением по маске разрывности смещенных блоков.
5 - маска разрывности (для отладки).

thres: порог количества разрывов на блок, для бинаризации маски. По умолчанию=0, что внутренне = blksize*blksizeV/4.

blend: если True, то смешивать кадры на сменах сцен подобно `ConvertFps`, а если False, то повторять последний кадр подобно `ChangeFps`. По умолчанию = True.

### MFlowBlur

`MFlowBlur` (clip, clip super, clip mvbw, clip mvfw, float "blur", int "prec", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Экспериментальная простая функция размытия движения (motion blur). Она может быть использована для создания эффекта Фильма (чтобы имитировать конечное время открытия затвора кинокамеры). Она использует обратные "mvbw" и прямые "mvfw" вектора движения для создания и наложения многих копий частично компенсированных пикселов в промежуточные моменты времени в некотором интервале размытия вокруг текущего кадра. Используется по-пиксельная компенсация (метод MFlow). Оценка истинного движения настоятельно рекомендуется для этой функции.

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

mvbw, mvfw (неименованные) клипы с обратными и прямыми векторами движения, произведенный функцией MAnalyse.

blur: временной интервал размытия между кадрами, время открытия затвора (в процентах, по умолчанию=50.0)

prec: точность размытия в единицах пикселов. Максимальный шаг между компенсированными размытыми пикселами. По умолчанию =1 (наиболее точно).

pelclip: увеличенный исходный клип для использования вместо внутренней субпиксельной интерполяции (для pel=2) (как в MAnalyse).
По умолчанию не определен.

### MDeGrain1, MDeGrain2 и MDeGrain3

`MDeGrain1` (clip, clip super, clip mvbw, clip mvfw, int "thSAD", int "thSADC", int "plane", int "limit", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

`MDeGrain2` (clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2, int "thSAD", int "thSADC", int "plane", int "limit", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

`MDeGrain3` (clip, clip super, clip mvbw, clip mvfw, clip mvbw2, clip mvfw2, clip mvbw3, clip mvfw3,int "thSAD", int "thSADC", int "plane", int "limit", int "limitC", int "thSCD1", int "thSCD2", bool "isse", bool "planar")

Производит динамическое понижение шума с компенсацией движения. Блоки опорных предыдущих и последующих кадров компенсируются и затем усредняются с текущим кадром с весовыми факторами зависящими от разницы блоков от текущего (SAD). Функции поддерживают режим перекрытия блоков (overlap). Обработка перекрывающихся блоков реализована как оконное суммирование блоков (аналогично FFT3DFilter, величина overlap до blksize/2) для снижения артефактов блочности.

MDeGrain1 имеет временной радиус 1 (использует вектора предыдущего mvfw и последующего mvbw кадров).

MDeGrain2 имеет временной радиус 2 (использует вектора двух предыдущих mvfw2, mvfw и двух последующих mvbw, mvbw2 кадров). MDeGrain3 имеет временной радиус 3 (использует вектора трех предыдущих mvfw3, mvfw2, mvfw и трех последующих mvbw, mvbw2, mvbw3 кадров). Он медленнее, но дает чуть лучшие результаты (более сильное подавление шума).

source : (неименованный) исходный клип, обычно last.

super : (неименованный) многоуровневый суперклип, подготовленный функцией MSuper.

mvbw, mvfw (неименованные) клипы с обратными и прямыми векторами движения, произведенный функцией MAnalyse.

Параметр "thSAD" определяет мягкий порог суммы абсолютных разностей блоков (SAD), выше которого блоки не дают вклад при усреднении. Блоки с малым SAD имеют наибольший вес. Вы должны ввести величину thSAD приведенную к блоку 8x8. Малые величины могут привести к шахматному понижению шума, большие величины могу привести к призракам и артефактам.
По умолчанию : thSAD=400.

"thSADC" есть аналогичный порог для каналов цветности.
По умолчанию, если не определен, то одинаковые для яркости и цветности thSADC=thSAD. Если определен, то thSADC используется для цветности, а thSADдля яркости.

Параметр plane устанавливает обрабатываемые цветовые плоскости:
0 - яркость, 1 - цветность U, 2 - цветность V, 3 - обе цветности, 4 - все. По умолчанию 4.

limit: предел изменения яркости пиксела (пост-обработка подобно плагину DeGrainMedian и функции LimitChange плагина SSETools, для предотвращения некоторых артефактов). По умолчанию 255 (нет предела).

limitC: предел изменения цветности пиксела. По умолчанию = limit.

### MRecalculate

`MRecalculate` (clip super, clip vectors, int "thSAD", int "smooth", int "blksize", int "blksizeV", int "search", int "searchparam", int "lambda", bool "chroma", bool "truemotion", int "pnew", int "overlap", int "overlapV", string "outfile", int "dct", int "divide", int "sadx264", bool "isse")

Уточняет ранее оцененные (MAnalyse) вектора движения vectors (и остальные данные) для другого клипа super или для новых параметров (например меньших размеров блоков), после деления divide, и т.п. Этот двух-стадийный метод может также быть полезным для более стабильной (устойчивой) оценки движения. Уточнение производится только на самом тонком уровне. Интерполированные вектора старых блоков используются как начальные приближения для новых векторов, с пересчетом SAD. Новые векторы только плохого качества, с SAD выше порога "thSAD", будут уточняться поиском. Вы должны ввести величину thSAD, приведенную (масштабированную) к размерам блока 8x8. По умолчанию thSAD=200.

smooth - задает метод деления грубых облоков на меньшие. 0 - использовать вектор движения ближайшего блока, 1 - билинейная интерполяция 4 соседних. По умолчанию 1.

Другие параметры - те же, что в MAnalyse (но вы можете изменить значения параметров). Значения по умолчанию - те же, что значения по умолчанию MAnalyse.

## III) Примеры

Показать вектора движения (вперед) :

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    vectors = MSuper().MAnalyse(isb = false)
    MShow(vectors)

Показать аналогичное назад:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    vectors = MSuper().MAnalyse(isb = true)
    MShow(vectors)

Использование MMask :

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    vectors = MSuper().MAnalyse(isb = false)
    MMask(vectors)

Чтобы использовать MDepan с плагином Depan для чересстрочного видео (пример функции DepanStabilize):

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    AssumeTFF().SeparateFields() # установи корректный порядок полей
    vectors = MSuper().MAnalyse(isb = false)
    globalmotion = MDepan(vectors, pixaspect=1.094, thSCD1=400)
    DepanStabilize(data=globalmotion, cutoff=2.0, mirror=15, pixaspect=1.094)
    Weave()

Чтобы сгладить проблемные (блочные) области компенсированного кадра с маской заграждения:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    super = MSuper()
    vectors = MAnalyse(super, isb = false, lambda = 1000)
    compensation = MCompensate(super, vectors) # или используйте MFlow функцию здесь
    # приготовим размытый кадр с некоторой сильной функцией блюра или deblock:
    blurred = compensation.DeBlock(quant=51) # используем функцию DeBlock
    badmask = MMask(vectors, kind = 2, ml=50)
    overlay(compensation,blurred,mask=badmask) # или используйте более быструю MaskedMerge

Чтобы восстановить испорченные кадры интерполяцией c MFlowInter:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    super = MSuper()
    backward_vectors = super.MAnalyse(isb = true, delta=2)
    forward_vectors = super.MAnalyse(isb = false, delta=2)
    inter = MFlowInter(super, backward_vectors, forward_vectors, time=50, ml=70)
    # Предположим плохие кадры 50 и 60
    trim(0,49) ++ inter.trim(49,-1) \
     ++ trim(51,59) ++ inter.trim(59,-1) ++ trim(61,0)

Чтобы изменить частоту кадров с MFlowFps:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    # предполагаем прогрессивный PAL 25 fps источник
    super = MSuper(pel=2)
    backward_vec = MAnalyse(super,isb = true)
    forward_vec = MAnalyse(super, isb = false)
    MFlowFps(super, backward_vec, forward_vec, num=50, den=1, ml=100) # получили 50

Чтобы удвоить частоту видео кадров с MFlowFps для самой быстрого проигрывания (почти) в реальном времени:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    # предполагаем прогрессивный PAL 25 fps или NTSC фильм 23.976 источник
    super = MSuper(pel=1,hpad=0,vpad=0,chroma=false)
    backward_vec = MAnalyse(super, blksize=32, isb = true, chroma=false, searchparam=1,search=0)
    forward_vec = MAnalyse(super, blksize=32, isb = false, chroma=false, searchparam=1,search=0)
    MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(last), \
       den=FramerateDenominator(last), mask=0)

Чтобы удвоить частоту видео кадров с MFlowFps для 'наилучших' результатов (но медленной обработки):

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    # предполагаем прогрессивный PAL 25 fps или NTSC фильм 23.976 источник
    super = MSuper(pel=2)
    backward_vec = MAnalyse(super, overlap=4, isb = true, search=3)
    # используем перекрытие блоков, полупиксельную точность и исчерпывающий поиск
    forward_vec = MAnalyse(super, overlap=4, isb = false, search=3)
    MFlowFps(super, backward_vec, forward_vec, num=2*FramerateNumerator(), \
       den=FramerateDenominator())

Чтобы генерировать приятное размытие движения с MFlowBlur:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    super = MSuper()
    backward_vectors = super.MAnalyse(isb = true)
    forward_vectors = super.MAnalyse(isb = false)
    MFlowBlur(super, backward_vectors, forward_vectors, blur=15)

Понижение шума с некоторым внешним фильтром (который использует три кадра: предыдущий, текущий, следующий):

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    super = MSuper()
    backward_vectors = MAnalyse(super, isb = true)
    forward_vectors = MAnalyse(super, isb = false)
    forward_compensation = MFlow(super, forward_vectors, thSCD1=500) # или используйте MCompensate
    backward_compensation = MFlow(super, backward_vectors, thSCD1=500) # или используйте MCompensate
    # создадим чередующиеся трех-кадровые последовательности
    interleave(forward_compensation, source, backward_compensation)

    DeGrainMedian() # поместите  предпочитаемый Вами временной (пространственно-временной) фильтр здесь

    selectevery(3,1) # возвращает фильтрованные только центральные (не компенсированные) кадры

Чтобы использовать предварительно отфильтрованный клип для более надежной оценки движения, но компенсировать движение нефильтрованного клипа (на примере подавления шума):

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    super = MSuper()
    # Используем некий шумоподавитель (блюр) или стабилизатор яркости для предварительной фильтрации
    prefiltered = blur(1.0)
    super = MSuper(levels=1) # одного уровня достаточно для MCompensate
    superfilt = MSuper(prefiltered) # все уровни для MAnalyse
    backward_vectors = MAnalyse(superfilt, isb = true)
    forward_vectors = MAnalyse(superfilt, isb = false)
    # используем нефильтрованный оригинальный (super) клип для компенсации движения
    forward_compensation = MCompensate(super, forward_vectors)
    backward_compensation = MCompensate(super, backward_vectors)
    # создадим чередующиеся трех-кадровые последовательности
    interleave(forward_compensation, last, backward_compensation)

    DeGrainMedian() # поместите предпочитаемый Вами временной (пространственно-временной) фильтр здесь

    selectevery(3,1) # возвращает фильтрованные только центральные (не компенсированные) кадры

Чтобы подавить шум функцией MDegrain2 с перекрывающимися блоками и субпиксельной точностью :

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    super = MSuper(pel=2, sharp=1)
    backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4)
    backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4)
    forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4)
    forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4)
    MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)

Чтобы подавить шум чересстрочного источника функцией MDegrain1 с перекрывающимися блоками и субпиксельной точностью:

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    fields=AssumeTFF().SeparateFields() # или AssumeBFF
    super = MSuper(fields)
    backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=2)
    forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=2)
    MDegrain1(fields, super, backward_vec2,forward_vec2,thSAD=400)
    Weave()

Чтобы подавить шум чересстрочного источника функцией функцией MDegrain2i2 :

    function MDegrain2i2(clip source, int "overlap", int "dct")
    {
    overlap=default(overlap,0) # величина перекрытия (от 0 до 4 для blksize=8)
    dct=default(dct,0) # используйте dct=1 для клипов с некоторыми мерцаниями
    fields=source.SeparateFields() # разделим на поля
    super = fields.MSuper()
    backward_vec2 = super.MAnalyse(isb = true, delta = 2, overlap=overlap, dct=dct)
    forward_vec2 = super.MAnalyse(isb = false, delta = 2, overlap=overlap, dct=dct)
    backward_vec4 = super.MAnalyse(isb = true, delta = 4, overlap=overlap, dct=dct)
    forward_vec4 = super.MAnalyse(isb = false, delta = 4, overlap=overlap, dct=dct)
    fields.MDegrain2(super, backward_vec2,forward_vec2,backward_vec4,forward_vec4,thSAD=400)
    Weave()
    }

    AVISource("video.avi")
    mdegrain2i2(4,0)

Как использовать внешний клип субпиксельной интерполяции:

    # Загрузим Eedi2 плагин (от tritical) с функцией интерполяции с учетом направлений краев
    LoadPlugin("Eedi2.dll")
    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    # создадим увеличенный клип из источника
    ups = LanczosResize(2*width(last), 2*height(last), src_left=0.25, src_top=0.25)
    super = MSuper(pel=2, pelclip=ups)
    bv = MAnalyse(super, isb = true, overlap=4)
    MCompensate(super, bv)

Как использовать с MT фильтром и специальной многопоточной версией AviSynth:

    # Загрузим плагин MT от TSP
    LoadPlugin("MT.dll")
    avisource("some.avi")
    MT("""
    super = MSuper(pel=2, sharp=1)
    backward_vec2 = MAnalyse(isb = true, delta = 2, overlap=4)
    backward_vec1 = MAnalyse(isb = true, delta = 1, overlap=4)
    forward_vec1 = MAnalyse(isb = false, delta = 1, overlap=4)
    forward_vec2 = MAnalyse(isb = false, delta = 2, overlap=4)
    MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)
    """,2) # два потока

Замечание: Режим SetMTMode(2) многопоточного AviSynth также поддерживается MVTools с версии 1.8.4.1 (бета тестирование). MVTools версии 2 должна работать надежнее. Некоторый пример с SetMTMode:

    SetMTMode(5)
    FFmpegSource("some.avi") # avisource не работает с SetMTMode на моих машинах - TSchniede

    SetMTMode(2)
    super = MSuper(pel=2)
    backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4)
    backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4)
    forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4)
    forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4)
    MDegrain2(super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400)

Как использовать предварительно фильтрованный клип и пересчитать данные движения для исходного клипа (пример MFlowFPS)

    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    prefiltered = DeGrainMedian() # некоторое сглаживание
    super = MSuper(hpad=16, vpad=16, levels=1) # одного уровня достаточно для MRecalculate
    superfilt = MSuper(prefiltered, hpad=16, vpad=16) # все уровни для MAnalyse
    backward = MAnalyse(superfilt, isb = true, blksize=16)
    forward = MAnalyse(superfilt, isb = false, blksize=16)
    # пересчитать для оригинального клипа и другого размера блоков
    forward_re = MRecalculate(super, forward, blksize=8, thSAD=100)
    backward_re = MRecalculate(super, backward, blksize=8, thSAD=100)
    MFlowFps(super, backward_re, forward_re, num=50, den=1)

Как использовать опцию planar для более быстрой обработки YUY2 (MDegrain3 пример):

    LoadPlugin("SSEToolsS.dll") # для функций преобразования
    AVISource("c:\test.avi") # или MPEG2Source, DirectShowSource, некоторый предыдущий фильтр
    Interleaved2Planar() # преобразуем клип в планарный
    super = MSuper(planar=true)
    bv1 = MAnalyse(super, isb = true, delta = 1, overlap=4)
    fv1 = MAnalyse(super, isb = false, delta = 1, overlap=4)
    bv2 = MAnalyse(super, isb = true, delta = 2, overlap=4)
    fv2 = MAnalyse(super, isb = false, delta = 2, overlap=4)
    bv3 = MAnalyse(super, isb = true, delta = 3, overlap=4)
    fv3 = MAnalyse(super, isb = false, delta = 3, overlap=4)
    MDegrain3(super,bv1,fv1,bv2,fv2,bv3,fv3,thSAD=400,planar=true)
    Planar2Interleaved() # преобразуем обратно в обычный чередующийся YUY2

## IV) Отказ (от гарантий)

Плагин распространяется на условиях лицензии GNU GPL, без всяких гарантий. Смотрите 'gpl-rus.txt'.
Документация распространяется на условиях лицензии CreativeCommons BY-SA 3.0 license.

Прошу рассмотреть возможность финансовой поддержки.

MVTools использует части кода из следующих проектов:
Увеличение маски (Resizer) (SimpleResize.cpp) из плагина SimpleResize для Avisynth от Tom Barry. http://www.trbarry.com
Быстрое DCT (fdct_mmx.asm) из XVID MPEG-4 VIDEO CODEC. http://www.xvid.org
DCT общее преобразование (смотри fftwlite.h) из библиотеки FFTW (как вызов DLL). http://www.fftw.org
SATD (pixel-32.asm, pixel.asm) и альтернативная SADx264 (sad-a.asm, x86inc.asm, x86inc-32.asm, cpu-32.asm) из проекта x264. http://www.videolan.org/developers/x264.html (Loren Merritt, Laurent Aimar, Alex Izvorski et al).

## V) Ревизии

2.5.11.2 beta (20.03.2011 by Fizick)

- MCompensate: исправлен крах со слишком малыми npad, vpad (спасибо '-Vit-').

2.5.11.1 beta (22.12.2010 by Fizick)

- MAnalyse, MRecalculate: исправил чисто Горизонтальный и Вертикальный типы поиска (поправка от 'cretindesalpes').

2.5.11 beta (17.10.2010 by Fizick)

- MAnalyse, MRecalculate: добавил чисто Горизонтальный и Вертикальный типы поиска (просил 'Null Null').
- MRecalculate: исправил Hexagon и UMH типы поиска (обрабатывались как Logarithmic).

2.5.10.1 beta (25.06.2010 by Fizick)

- MFlowInter: Исправлена некорректная передача последних параметров (blend, etc). Спасибо Laurent de Soras 'Firesledge'. Другие интересные обновления его модификации MVTools v2.5.10 beta mod16b (http://ldesoras.free.fr/src/dither-avsi-1.2.zip) рассматриваются.
- MDepan: исправлена ошибка: если range=1 в MDepan, то отладочный текст (с info=true) отображался толлько для первого кадра при загрузке скрипта. Спасибо Boulder за сообщение.
- MRecalculate: исправлена ошибка при отличающихся значениях pel. Спасибо Boulder за сообщеие.

2.5.10 beta (8.11.2009 by Fizick)

- MAnalyse: trymany - пробовать искать вокруг многих предикторов
- MAnalyse: заменил третий правый верхний предиктор на правый нижний
- MAnalyse: исчерпывающий тип поиска на всех грубых уровнях всегда, удалил параметр full

2.5.9 (4.11.2009 by Fizick)

- MAnalyse: восстановил lambda для самого грубого уровня
- MAnalyse: исправил full=0 по умолчанию согласно документации

2.5.8.1 (26.10.2009 by Fizick)

- MDegrain2: исправлен limitC (спасибо Terranigma за доклад)

2.5.8 (18.10.2009 by Fizick)

- MAnalyse: исправлены некоторые неверные векторы (спасибо shon26 за доклад)

2.5.7 (09.10.2009 by Fizick)

- MAnalyse: исправлена ошибка (крах для некоторых размеров кадра) (спасибо Mark за доклад)

2.5.6 (08.10.2009 by Fizick)

- MAnalyse: исправлена ошибка (крах для pad>0 и некоторых размеров кадра) с levels (спасибо Mark за доклад)

2.5.5 (28.09.2009 by Fizick)

- MAnalyse: исправлена ошибка (крах для hpad=0) с levels (спасибо Boulder и LaTo за доклад)
- MSuper: уточнена интерполяция на краях плоскостей
- MDegrain1,2,3: добавил параметр limitC

2.5.4 (27.09.2009 by Fizick)

- MAnalyse: установил по умолчанию temporal=false в соответствии с документацией (о проблемах с SetMTMode(2) сообщил MAG79)

2.5.3 (08.09.2009 by Fizick)

- MAnalyse: добавил темпоральный предиктор вектора движения
- MRecalculate: исправил несправную версию 2.5.2

2.5.2 (11.08.2009 by Fizick)

- MSuper: последовательное по ширине и высоте редуцирование с ассемблерной iSSE оптимизацией
- MAnalyse: ограничено число уровней

2.5.1 (07.08.2009 by Fizick)

- MAnalyse: Добавил параметр meander для просмотра рядов блоков попеременно слева направо и справа налево
- Небольшая оптимизация функций преобразования YUY2

2.5.0 (01.08.2009 by Fizick)

- MSuper: Более полный размер подуровней
- MAnalyse: Увеличил число подуровней (для более длинных векторов)
- MAnalyse: Заменил имя параметра level на levels, изменил обработку его положительных и отрицательных величин
- MAnalyse:Отменил lambda для самого грубого уровня
- MAnalyse: Полный поиск с большим радиусом для самого грубого уровня

2.4.7 (28.07.2009 by Fizick)

- MBlockFPS: Окончательно исправил ошибку для ненулевых дополнений кадра, нецелого числа блоков

2.4.6 (26.07.2009 by Fizick)

- MBlockFPS: Исправил ошибку (справа и внизу, сообщил Shon26) для ненулевых дополнений кадра, нецелого числа блоков
- Исправил возможные ошибки с интерполяцией пикселов для низких подуровней иерархии
- Более корректный размер подуровней (четная люма для YV12)
- MShow: изменил ститль рисования векторов на градиентный

2.4.5 (11.07.2009 by Fizick)

- Добавил размер блока 32x32
- Заменил avisynth.h на версию 2.5.8MT от SEt

2.4.4 (08.07.2009 by Fizick)

- Включил все модификации кода от SEt, но:
- Заменил avisynth.h с версии 2.5.5 на версию 2.5.8

2.4.2_mod2 (30.06.2009 by Pavel Skakov aka SEt)

- Исправил проблемы потоков, небольшие оптимизации (avisynth.h от avisynth2.5.8MT бета, инициирование векторов как 0)

2.4.2_mod (22.06.2009 by Pavel Skakov aka SEt)

Некоторая очистка исходников, проекта, и оптимизация главным образом MDegrain1/2/3 - в зависимости от ваших установок вы вероятно увидите ускорение 2-15%, результаты с точностью до бита идентичны оригинальной версии 2.4.2:
- добавлена Average2 iSSE версия для pel=4,
- Degrain1/2/3 MMX и SSE2 версии,
- небольшая оптимизация copy8x8 MMX и Horizontal_Wiener SSE,
- поправлено детектирование cpu

2.4.3 beta (26.04.2009 by Fizick)

- MDepan: добавил параметры mask (как просил djonline) и planar.

2.4.2 (07.04.2009 by Fizick)

- MAnalyse: Исправил допустимый диапазон векторов для случая бордюров меньших чем размер блока, с крахом программы (спасибо FuPP за доклад об ошибке).

2.4.1 beta (24.01.2009 by Fizick)

- MDegrain: Исправил вес для высоких порогов и больших размеров блоков.

2.4.0 beta (09.01.2009 by Fizick)

- MDegrain: изменил метод взвешивания degrain на более сильный, некоторые внутренние переписывания.
- Исправлена документация.

2.3.1 (14.12.2008 by Fizick)

- MSuper: добавил более сглаживающие сокращающие (деление пополам) фильтры rfilter=2,3,4, по умолчанию 2.
- MAnalyse: исправил ошибку параметра plevel (версии 2.3.0).

2.3.0 (06.12.2008 by Fizick)

- Переименовал все функции из MVxxx в Mxxx (некоторое переименование запросили LaTo, Mystery Keeper, Sagekilla). Сообщения об ошибках пока не обновлены.
- MAnalyse: добавил параметр pglobal (и небольшие изменения), изменил level=1 по умолчанию.

2.2.2 (30.11.2008 by Fizick)

- MVCompensate: исправил ошибку на сменах сцены (спасибо AVIL за сообщение об ошибке YUY2).
- MVShow: изменил SAD на приведенный к блоку 8x8, добавил показ количества плохих векторов.
- MVAnalyse: исправлена chroma=false (спасибо LaTo за сообщение).
- Переименована в mvtools2.dll (по запросу Naito).

2.2.1 (27.11.2008 by Fizick)

- MVAnalyse: исправил неверное приведение LSAD к размеру блоков (спасибо Shon за сообщение).
- MVCompensate: убрал параметр mode, добавил recursion.

2.1.2 (23.11.2008 by Fizick)

- MVAnalyse: удалил опцию mc. Сократил размер данных блока (и увеличил версию потока векторов).
- MVDegrain: исправил ошибку с блоками 32x16.

2.1.1 (18.11.2008 by Fizick)

- MVBlockFps: Исправил ошибку левого края

2.1.0 (8.11.2008 by Fizick)

- MVFlowFps, MVBlockFps, MVFlowInter: добавил параметр blend для замены смешивания кадров на смене сцены на повтор.
- MVFlowFps, MVBlockFps: более безопасные для больших числителей и знаменателей частоты.

2.0.11.2 (6.11.2008 by Fizick)

- MVDegrain2,3: исправил аварии на сменах сцен.

2.0.11.1 (5.11.2008 by Fizick)

- MVAnalyse: добавил повторный широкий поиск для плохих блоков (параметры badSAD, badrange).
- MVAnalyse: добавил типы поиска Hexagon и Uneven Multi Hexagon (UMH). Изменил (непреднамеренно :) метод по умолчанию с Logarithmic на Hexagon.
- MVAnalyse: исправил исчерпывающий поиск от статического центра.
- MVAnalyse: lsad теперь масштабируется к блоку 8х8.
- MVShow: использует суперклип, дополненный бордюром выход, добавил опцию номера блока number.

2.0.9.2 (3.11.2008 by Fizick)

- Некоторое улучшение производительности

2.0.9.1 (20.10.2008 by Fizick)

- Более оптимальные по памяти функции MVFlowXXX для pel=1
- Отменил отладочный режим плагина
- Добавил русскую документацию для версии 2

2.0.9.0 альфа (13.10.2008 by Fizick)

- Реализовал больше функций без idx: MVSCDetection, MVDepan, MVFlowInter, MVBlockFps, MVFlowBlur, MVDegrain3, MVRecalculate
- Исправил аварию с MVSuper(chroma=false)
- Некоторые небольшие изменения и фиксы для v2.0, конечно :)
- Документация (английская) для v2.0

2.0.7.0 альфа (02.10.2008 by Fizick)

- Реализовал функции без idx: MVSuper, MVAnalyse, MVFlowFps, MVFlow, MVCompensate, MVShow, MVMask, MVDegrain1, MVDegrain2
- Все функции (кроме MVAnalyse) получили параметр planar для YUY2 планарного ввода и вывода. По умолчанию = false (то есть обычный чередующийся формат YUY2), медленнее.
- Все (обязательные) клиповые параметры потеряли свои имена, и mvbw=vb теперь является некорректным синтаксисом. Используйте неименованный синтаксис.

2.0.0.3 альфа (28.09.2008 by Fizick)

- Первая публичная альфа ветви 2.0 с функцией MVSuper, чтобы убить idx.
- Пока реализованы только новые MVAnalyse и MVDegrain1.

1.11.4.4 (15.10.2008 by Fizick)

- Восстановил старый размер приращения внутреннего кэша как перед версией v1.11.4.2 (есть сообщения о авариях).

1.11.4.3 (08.10.2008 by Fizick)

- MVDenoise: исправил ошибку v.1.11.4 с коррекцией яркости.
- MVCompensate: устранил потенциальную утечку памяти (в конструкторе).

1.11.4.2 (26.09.2008 by Fizick)

- MVAnalyse: сократил неиспользуемое компенсацией пространство памяти из клипа векторов (параметр mc).
- Уменьшил рост внутреннего кэша.
- Все MVFlow функции: исправлена старая ошибка с пикселами для pel=4.
- MVAnalyse: добавил параметр rfilter (сглаживающий метод)
- MVBlockFps: добавил поддержку YUY2 и pelclip.
- Маленькие изменения для стабильности с MT.

1.11.0.1 beta (08.09.2008 by Fizick)

- Новая MVBlockFps для простого поблочного изменения fps (почти в реальном времени :-).
- MVAnalyse: более сглаживающий метод сокращения иерархических уровней кадра (подобно ReduceBy2) для сглаживания на каждом уровне.
- MVAnalyse: добавил параметр pzero стоимости нулевого вектора для более согласованных векторов движения (теперь включено по умолчанию, установите в 0, если вам нужен старый алгоритм).
- MVAnalyse: понизил внутреннее ограничение снизу pelsearch с pel до 1 (кто-то просил для скорости в ущерб точности).
- MVFlowFps,MVFlowFps2, MVFlowInter: удалил параметр thSAD.
- Все функции: удалил параметр mmx.

1.10.2.1 (28.08.2008 jn Fizick)

- MVDegrain1-3: исправил старую ошибку округления, приводящую к некоторому изменению цвета (некоторая благодарность Didee за сообщение, хотя оно могло бы быть более настойчивое и в официальной ветке форума по MVTools :).
- Уточнил (надеюсь) документацию о pelclip.

1.10.2.0 публичная beta (27.08.2008 от Fizick)

- Отладил и переименовал MVRefine обратно в MVRecalculate :).
- MVAnalyse: изменил порог LSAD с резкого на плавный для немного более согласованного движения в плохих областях.
- MVAnalyse: исправил старую ошибку для (редко используемого случая) различных величин горизонтального и вертикального перекрытия блоков.

1.10.1.0 не публичная (22.08.2008 by Fizick)

- Заменил MVRecalculate более общей функцией MVRefine, которая может уточнять вектора.

1.10.0.0 не публичная (18.08.2008 от Fizick)

- Добавлена функция MVRecalculate для пересчета SAD (как просил Didee).
- Исправлены возможные утечки памяти (спасибо josey_wells за замечание)
- Другие изменения ветви v.1.9.6.x от josey_wells пока не включены - слишком много работы для анализа нового кода и многочисленных косметических переписываний, то есть основана на 1.9.5.7

1.9.6.x-1.9.7.x ветвь (01.08.2008-26.08.2008 от josey_wells)

- Добавлены MVAnalyseMulti, MVDegrain, MVMultiExtract функции с внутренней многопоточностью (которая не требует специального AviSynth, SetMTMode или MT)
- Некоторые исправления ошибок (утечки памяти), объединение кода (переписывание) для улучшений стабильности и производительности. Также есть многочисленные изменения из-за добавления класса потоков, семафора, критической секции, файлов потоков, для MVDegrain, MVAnalyseMulti, а также вынесение общего кода MVDegrain в отдельный базовый класс, перемещение общего кода и т.д. Нет изменений алгоритмов. Смотри сообщения форума после августа 2008 для загрузки, синтаксиса и обсуждения.

1.9.5.7 публичная бета (03.07.2008 от Fizick)

- Исправил Overlap_2xY_mmx
- Добавил (неполный?) список используемых проектов к документации.

1.9.5.6 (02.07.2008 от TSchniede)

- Улучшил Overlap_2xY_mmx, оптимизировал CheckMV2 и LumaSAD.

1.9.5.5 (28.06.2008 от TSchniede)

- Улучшил по умолчанию 2xY SAD и добавил более быстрый 2xY SAD.

1.9.5.4 (27.06.2008 by TSchniede)

- Перенес код авто-детектирования процессора из x264.
- Теперь используется x264 SAD автодетектирование по умолчанию
- Слил с 1.9.5.1, вновь разрешил режим 32x16 (только для функций не x264)

1.9.5.3 (26.06.2008 by TSchniede)

- Импортировал функции SSD & SATD.
- доступ к ним используя sadx264 > 7 или dct > 4.

1.9.5.2 (24.06.2008 by TSchniede)

- Буферировал блок источника в выровненной области перед вычисленем SAD. Это исправляет крахи если блок источника был невыровнен, из-за overlaped блоков. В худшем случае это на 1% медленнее, по большей части это увеличивает производительность.

1.9.5.1 public beta (21.06.2008 by Fizick)

- Включил изменения версии v.1.9.5 от TSchniede.

1.9.5 (21.06.2008 by TSchniede), основана на v.1.9.3

- MVAnalyse: добавил опцию sadx264.
- Внутренние модификации - выровнена память плоскостей яркости и цветности, и модифицирована MVTools для интерфейса SAD функций, используемых в x264.
- незначительные исправления (деактивировал DebugPrint возможные проблемы)

1.9.4.1 beta (12.06.2008 от Fiziick, выпущена 21.06.2008)

- Исправлено для pel=4 с sharp=2 (спасибо Pustovetov за сообщение и поправку).
- MVCompensate: добавлен размер блока 16x2 (сообщение AVIL).

1.9.4 бета (08.06.2008 от Fizick)

- MVAnalyse и др.: добавил размер блока 32x16 (запрос MAG79).

1.9.3.1 (05.06.2008 от Fizick)

- MVIncrease: была неработоспособна (спасибо MAG79 за выявление).

1.9.3 (20.04.2008 от Fizick)

- MVAnalyse: Исправлена ошибка для pelclip (глюк с версии 1.8.5).
- MVDegrain: добавил thSADC как порог для цветности (запрос Terranigma).

1.9.2 (29.01.2008 от Fizick, но все ошибки были найдены josey_wells)

- MVDegrain3: исправлена ошибка в коде для блока 16x8; исправлена опечатка (MVDegrain2 вместо MVDegrain3) в сообщениях.
- MVAnalyse: исправлена старая ошибка в NStepSearch.

1.9.1 бета (15.12.2007 от Fizick)

- MVAnalyse: увеличил скорость (на 20%) оценки глобального движения (другой метод).
- MVAnalyse: добавил ассемблерную оптимизацию для SAD малых блоков (скорость на 50%).
- MVMask: Добавил kind=5 цветную карту движения как x,y компоненты векторов, показанные на цветовых плоскостях U, V.

1.9.0 (04.12.2007 от Fizick)

- Добавил MVDegrain3.

1.8.6 (02.12.2007 от Fizick)

- Добавил маски составляющих x,y векторов движения к MVMask (как просил Terka).

1.8.5.1 (12.11.2007 от нас:)

- Слил изменения v1.8.4.3 и v1.8.5, добавил пример MT.

1.8.4.3 (05.10.2007 by Tsp)

- Реализовал детектирование пропусков внутреннего кэш-буфера с ростом буфера (как предложил IanB).

1.8.5 (05.11.2007 by Fizick)

- Добавил параметр pelsearch как параметр поиска (радиус) на самом тонком уровне (просил Terranigma).
- Уменьшил внутренний буфер для уменьшения используемой памяти, немного изменены критические секции.
- Добавил блоки 16x2 (просил ab_99).

1.8.4.2 (25.10.2007 by Tsp)

- Добавлена критическая секция в интерполяции кадров для исправления редкой ошибки при многопоточной обработке.

1.8.4.1 (23.10.2007 by Tsp)

- Реализован безопасный к потокам доступ к внутреннему буферу для корректной многопоточной обработки с SetMTmode(2) в версии Avisynth MT (для многоядерных процессоров).

1.8.4 (22.08.2007 by Fizick)

- divide теперь работает вместе с overlap.

1.8.3 (17-20.08.2007 by Fizick)

- MVFlowFps: переименовал параметр "mode" в "mask", mask=2 по умолчанию.
- MVFlowFps2: добавил параметр "mask".
- MVFlowFPS, MVFlowFPS2: Восстановил значения по умолчанию num=25, den=1 (как было в версиях 1.7 и ранее)
- MVDegrain1, MVGegrain2 - добавил параметр "limit".

1.8.2 beta (30.07.2007 by Fizick)

- MVAnalyse: исправил (увеличил) радиус поиска на самом детальном уровне для pel>1.
- Добавил возможность pel=4 для четверть-пиксельной точности.
- Переименовал параметр "clip2x" в "pelclip".

1.8.1 beta (28.06.2007 by Fizick)

- MVAnalyse: добавил пост-обработку векторов движения путем деления блоков на подблоки для снижения размера зоны интерполяции векторов движения.
- MVFlowFps: добавлен параметр "mode" для выбора метода обработки в разрыных областях (и скорости).
- Некоторые внутренние изменения (padding в MVAnalysisData, заголовок к кадрам векторных потоков и др.).

1.8.0 beta (22.06.2007 by Fizick)

- MVFlowInter, MVFlowFPS, MVFlowFPS2, MVMask: улучшил маску разрывности по протяженности
- MVFlowInter, MVFlowFPS, MVFlowFPS2: уменьшил ореолы объектов в областях разрывности использованием векторов движения смежных кадров
- MVFlowInter, MVFlowFPS, MVFlowFPS2: отменил маску SAD и параметр thSAD
- MVFlowFPS, MVFlowFPS2: изменил значение выходного fps на удвоенное от входного (num, den = 0)
- MVShow: исправил показываемое положение векторов
- Добавил сообщения об ошибке при пропущенных векторных клипах

1.7.0 beta (05.06.2007 by Fizick)

- MVAnalyse: добавил параметры blksizeV и overlapV для неквадратных блоков 8x4 и 16x8.

1.6.4 (30.05.2007 by Fizick)

- MVAnalyse: изменил порядок векторов для Исчерпывающего поиска (расширяющиеся квадраты).
- MVAnalyse: исправил ошибку с dct=3.
- MVFlowFps, MVFlowFPS2, MVFlowInter: теперь смешивают кадры с плохой оценкой движения (на сменах сцен, вспышках).
- MVFlowFps, MVFlowFPS2: исправил ошибку с параметром thSAD (и соответтствующей маской).

1.6.3 (06.05.2007 by Fizick)

- MVDepan: больше совместимости с DepanEstimate (параметр range и т.д.).

1.6.2 (11.11.2006 by Fizick)

- MVAnalyse: изменил режим DCT=2 на зависящий от глобальной яркости.

1.6.1 beta (25.10.2006 by Fizick)

- MVAnalyse: добавил экспериментальный режим DCT, чтобы улучшить оценку движения при мерцаниях и затуханиях яркости (быстрый только для blksize=8).

1.5.8 beta (14.10.2006 by Fizick)

- Многие функции: добавил параметр clip2x для использования 2X увеличенного клипа вместо внутренней субпиксельной интерполяции для pel=2
- MVFlowFps, MVFlowFps2: добавил параметр thSAD; используем локальное смешение пикселов соседних кадров в областях с плохими векторами движения
- MVFlowFps, MVFlowFps2: могут использовать вектора движения для произвольного расстояния между кадрами delta
- MVFlowFps, MVFlowFps2: исправил ошибку видео с большими делимыми и делителями (спасибо Trixter за доклад)
- MVCompensate: добавил экспериментальный параметр fields чтобы компенсировать вертикальное смещение полей основанного на полях видео для pel=2
- MVAnalyse: изменил параметр pnew на относительный к величине SAD

1.5.3 beta (01.10.2006 by Fizick)

- MVAnalyse: улучшил оценку нулевого движения для разделенного на поля видео для pel=2
- Временно вернул MVIncrease, MVChangeCompensation, MVDenoise (с хранением компенсации в клипе векторов)
- Присоединил v1.4.12-1.4.13 изменения

1.5.1 beta (05.09.2006 by Fizick)

- Присоединил v1.4.11 изменения

1.5.0 beta (23.08.2006 by Fizick)

- Скорректировал интерполяцию предикторов векторов (от грубой к тонкой шкале) для overlap>0.
- MVFlowInter: добавил параметр thSAD.
- MVFlowInter: локальное смешивание пикселов соседних кадров в регионах с плохими векторами движения.
- Удалил хранение компенсации в клипе векторов.
- Удалил функции MVIncrease, MVChangeCompensation, MVDenoise (она использовала компенсацию в клипе векторов, и не поддерживала перекрытие).
- Удалил режим петли mode=2 MVCompensation, режим mode=0 тепрь обрабатывается как mode=1.
- Добавил параметр thSAD к MVCompensation для безопасной (фиктивной) компенсации как просил Didee.

1.4.13 (28.09.2006 by Fizick)

- Исправлена ошибка с возможными ошибочными указателями кадров в ядре (MVClip.Update), маскируемая кэшированием (спасибо IanB за совет)

1.4.12 (25.09.2006 by Fizick)

- Вроде исправлена ошибка с кэшированием кадров в MVDenoise (и возможно в MVDegrain) (спасибо il9ad за доклад)

1.4.11 (06.09.2006 by Fizick)

- Подправил интерполяцию предикторов векторов (от грубого до тонкого масштаба) для overlap>0.
- Исправлена ошибка с шириной для overlap=0, YV12 в MVDegrain1 (спасибо Boulder за доклад)

1.4.10 (18.08.2006 by Fizick)

- Подправил обработку правого и нижнего края в MVCompensate для произвольных размеров кадра.
- Изменил значения по умолчанию в MVAnalyse: pel=2, truemotion=true, sharp=2.

1.4.9 (14.08.2006 by Fizick)

- Исправил ошибку в MMX оптимизации к режиму перекрытия в MVDeGrain, MVCompensate для YUY2 с blksize=8 (спасибо TSchniede за доклад).

1.4.8 (31.07.2006 by Fizick)

- Добавил некоторую MMX оптимизацию к режиму перекрытия в MVDeGrain, MVCompensate.
- Исправил ошибку с последними (не обрабатываемыми) строками в MVDeGrain.

1.4.7 (25.07.2006 by Fizick)

- Снизил сеточность перекрытия в MVDeGrain1, MVDeGrain2, MVCompensate.
- Добавил пример с MVDeGrain1 для чересстоочного

1.4.6 (24.07.2006 by Fizick)

- Снижено шумоподавление в MVDeGrain1, MVDeGrain2.
- Параметр plane в MVDeGrain1, MVDeGrain2 теперь работает :)

1.4.5 (22.07.2006 by Fizick)

- Добавлен параметр plane в MVDeGrain1, MVDeGrain2.

1.4.4 (19.07.2006 by Fizick)

- Исправил значение по умолчанию thSAD=400 в MVDeGrain1, MVDeGrain2.
- Исправил ошибку с цветовой плоскостью V в MVChangeCompensate.

1.4.3 (17.07.2006 by Fizick)

- Снизил сеточность перекрытия в MVDeGrain1, MVDeGrain2.

1.4.2 (16.07.2006 by Fizick)

- Исправил ошибку доступа к памяти в MVDeGrain1, MVDeGrain2. Спасибо krieger2005 за доклад.

1.4.1 (23.06.2006 by Fizick)

- Изменил режим MVDeGrain1, MVDeGrain2 на взвешивание по SAD.
- Изменил thSCD1 по умолчанию с 300 до 400.

1.4.0 (19.06.2006 by Fizick)

- Добавил MVDeGrain1, MVDeGrain2 ограниченные усредняющие шумоподавители.
- Исправил масштаб thSAD в MVDenoise.
- Исправил документацию о SAD.

1.3.1 (11.06.2006 by Fizick)

- Добавил бикубический метод субпиксельной интерполяции для pel=2 (с iSSE оптимизацией для sharp=1,2).
- Ассемблерная SSE оптимизация скорости для метода компенсации с перекрытием блоков.

1.3.0 (05.06.2006 by Fizick)

- Реализовал компенсацию движения перекрывающихся блоков в MVCompensation(mode=1).
- Изменил режим по умолчанию на mode=1 в MVCompensation как наиболее универсальный.
- Добавил метод резкой субпиксельной интерполяции для pel=2.
- Исправил ошибку для blksize=16 с YUY2.
- (Список на будущее: ассемблерная SSE оптимизация скорости для новых методов компенсации и интерполяции.)

1.2.6 beta (21.05.2006 by Fizick)

- Добавил опцию выводить данные по векторам движения в лог файл, как просил Endre.

1.2.5 (08.05.2006 by Fizick)

- Снижен вес нулевого вектора, погрешнось итераций в MVDepan

1.2.4 (07.04.2006 by Fizick)

- Исправлена ошибка v.1.2.3 в режиме info в MVDepan

1.2.3 (31.03.2006 by Fizick)

- Реализована обработка разделеного на поля чересстрочного видео в MVDepan;
- добавлена опция лог-файла в MVDepan.

1.2.2 beta (01.03.2006 by Fizick)

- Исправлена ошибка сдвига кадра v1.2.1 MMX YUY2 преобразования (спасибо WorBry за сообщение)

1.2.1 beta (20.02.2006 by Fizick)

- Fixed bug of v1.2,
- Скорость восстановлена,
- MMX YUY2 преобразование (из Avisynth 2.6 функции от sh0dan)
- Но режим overlap кажется все еще работает неверно

1.2 beta (17.02.2006 by Fizick)

- YUY2 формат (кроме MVIncrease), без оптимизации

1.1.1 (16.02.2006 by Fizick)

- Удалил фильтры DeBlock и Corrector (не используют вектора движения, будут отдельными плагинами)
- Документировал старую функцию MVSCDetection.
- Очистил проект от неиспользуемых исходных файлов.

1.1 (не публичный выпуск 9.01.2006 by Fizick)

- Достаточно большая ревизия (бета). Новая опция для оценки движения перекрывающихся блоков в MVAnalyse для использования в MVFlow, MVFlowInter, MVFlowFps для улучшенной компенсации движения.
- Таблицы для интерполяции движения.
- Небольшая коррекция величины смещения в MVFlowFps2.

1.0.3 (Выпущена 30.12.2005 by Fizick)

- Исправил ошибку смещения в MVFlowInter, MVFlowFps (введенную в v1.0.2).

1.0.2 (Выпущена 28.12.2005 by Fizick)

- Скорректровал величину смещения в MVFlow (немного).

1.0.1 (Выпущена 24.12.2005 by Fizick)

- Исправил утечку памяти в MVAnalyse с глобальным движением (спасибо AI за доклад).
- Удалил пенальти для нулевого вектора-предиктора в MVAnalyse (был введен в v1.0).
- Изменил chroma=true по умолчанию в MVAnalyse.
- Добавил пример предварительной фильтрации.

1.0 (Выпущена 29.11.2005 by Fizick)

- Восстановил нулевой вектор как предиктор в MVAnalyse.
- Изменил масштаб времени блюра в MVFlowBlur (100 это полностью открытый затвор теперь) как просил Mug Funky.

0.9.13.3 (Выпущена 27.11.2005 by Fizick)

- Добавил вектор глобального движения (простой метод) в качестве предиктора в MVAnalyse.
- Поиск векторов прекращается (для скорости), если найден хороший предиктор (с SAD < pnew).
- Параметр scale в MVShow теперь работает правильно.
- Отменил вывод некоторой отладочной и профилирующей инфомации (для увеличения скорости).
- Изменил значение по умолчанию prec=1 (было 2) в MVFlowBlur.

0.9.13.2 (Выпущена 22.11.2005 by Fizick)

- Исправил ошибку в MVFlowFps, MVFlowFps2 для нецелых частот.

0.9.13.1 (Выпущена 21.11.2005 by Fizick)

- Исправил ошибку в MVFlowFps, MVFlowFps2, MVFlowInter, MVFlowBlur (введенную в 0.9.13).
- Убрал параметр plen из MVAnalyse как бесполезный.

0.9.13 (Выпущена 20.11.2005 by Fizick)

- Добавил truemotion пресет к MVAnalyse.
- Добавил экспериментальную MVFlowFps2.
- Изменил метод округления при интерполяции вектора во всех MVFLow... функциях.
- Немного отредактирована документация, обновлена русская.

0.9.12.4 (Выпущена 15.11.2005 by Fizick)

- Изменил тип параметра ml в MVMask, MVFlowInter, MVFlowFps с int на float.
- Добавил проверки диапазона параметров ml, time, blur.
- Исправил малую возможную ошибку (emms).
- Частично обновил документацию. Но я не уверен, что sh0dan запрашивал имено такое обновление :). Это все еще не руководство пользователя, а справочник по функциям.

0.9.12.3 (Выпущена 14.11.2005 by Fizick)

- Исправлена ошибка для цветности для ширины не кратной 16 в MVMask (введена в v0.9.11).
- Некоторая оптимизация скорости MVFlowFps.
- Переустановил размер внутренего буфера кадров в превоначальную величину 10. Пробуйте разные версии.

0.9.12.2 (Выпущена 13.11.2005 by Fizick)

- Добавил экспериментальный точную но медленую функцию MVFlowBlur как запрашивал scharfis_brain.
- Временно изменил разиер внутреннего буфера на 5.

0.9.12.1 (Выпущена 12.11.2005 by Fizick)

- Добавил экспериментальную функцию MVFlowFps.
- Убрал функцию MVInter.
- Временно изменил размер внутреннего буфера кадров с 10 до 3 для снижения использования памяти. Скорость должна быть протестирована для сложных скриптов.

0.9.12 (Выпущена 09.11.2005 by Fizick)

- Добавлена функция MVFlowInter. Функция MVInter будет удалена из следующего выпуска (она хуже).
- Изменил масштаб ml для kind=2 MVMask до более оптимального умолчания.
- Исправил небольшую ошибку в Bilinear.asm (странные пикселы у правой границы для pel=2).

0.9.11.1 (Выпущена 06.11.2005 by Fizick)

- Добавил поддержку полу-пикселов pel=2 к MVFlow.
- Увеличен максимальный quant с 51 до 60 в DeBlock для очень сильного подавления блочности.
- Исправлена документация.

0.9.11 (Выпущена 04.11.2005 by Fizick)

- Улучшена MVMask: Заменен булевый параметр showsad на целый kind, добавил опцию маски окклюзий, изменил код билинейного масштабирования на более корректный и быстрый SimpleResize.

0.9.10.1 (Выпущена 01.11.2005 by Fizick)

- Исправил ошибку с малым изменением яркости и цветности в MVInter (ошибка округления).
- Интерполяция векторов в MVFlow и маски в MVInter теперь корректны (благодаря исправлению ошибки в SimpleResize).

0.9.10 (Выпущена 31.10.2005 by Fizick)

- Добавлены некоторые опции оценки истинного (сглаженного) движения к MVAnalyse
- Добавлена функция MVFlow для по-пиксельной компенсации
- Добавлена функция MVInter для интерполяции движения (очень экспериментальная).

0.9.9.1 (Выпущена 20.01.2005 by Manao)

- Больше нет необходимости в stlport_vcxxxx.dll

0.9.9

- Добавлена функция: Corrector
- Добавлена функция: MVIncrease
- Возможен новый размер блока: 16
- Новый параметр в MVAnalyse : chroma
- Изменения в ядре

0.9.8.5

- MVCompensate изменена: новый параметр idx, работающий как idx в MVAnalyse, и позволяющий увеличить скорость при многократной компенсации тех же кадров.

0.9.8.4

- Оценка движения (ME) теперь берет в расчет и цветовую информацию, как просил tsp.

0.9.8.3

- Добавлена функция Corrector, как просил scharfi.

0.9.8.2

- Новая функция MVDepan (добавлена Fizick) для плагина Depan.

0.9.8

- Вновь некоторые изменения в синтаксисе фильтров.Сильно изменено ядро, в основном с целью выигрыша по скорости где возможно. Однако, по умолчанию выигрыш в скорости не заметен, необходимо корректно сконфигурировать анализирующий фильтр с помощью параметра "idx" для выигрыша в скорости (в режиме "pel" = 2).
- Устранены ошибки в MVDenoise, и цветовом шумоподавлении в MVDenoise.
- Теперь фильтры, стоящие ниже по цепочке фильтров, говорят фильтру анализа, если нуждаются в компенсации, так что вы не должны об этом заботиться на стадии анализа.

0.9.7

- Вновь многое переписано. Отключены интерполирующие фильтры (на время), все другие фильтры работают и предположительно, стабильны. Слегка изменен синтаксис, и будет меняться до достижения версии 1.0 (если она однажды будет достигнута). Изменения затронули главным образом `MVAnalyse`. Новый фильтр: `MVChangeCompensate`.

0.9.6.2

- Исправлена ошибка в параметрах `MVMask`.

0.9.6.1

- Lot of bugfixes for the existing filters. MVMask, MVShow, MVCompensate, MVDenoise and MVSCDetection, and MVAnalyse should work . Other may crash unexpectedly.
- Now, for the three new filters. Two have nothing to do with motion compensation, but I didn't want to put them in separate binaries, since they'll mainly be used with filters from this package. The third one uses vectors, and integrates somehow the two others.
- QDeQuant(clip c, int quant, int level) : takes a clip and quantizes it, using an approximation of the H264 DCT. It filters the three planes ( 4x4 blocks for each of them, so the chroma isn't processed as in H264 ). It's not exactly the H264 DCT because at q1, it's lossless, and a q51 it's not that bad, but you can raise quant over 51. Level is the reference level of the picture. By default it's zero, but it can be set, for example, to 128. The picture is then treates as if pixels were ranging from -128 to 127, hence avoiding errors around 128.
- Deblock(clip c, int quant, int aOffset, int bOffset ) : takes a clip, and deblock it using H264 deblocking, as if the picture was made only of inter blocks. This time, quant ranges from 0 to 51 as in H264, and has the same impact. aOffset and bOffset allow to raise / lower the quant when deciding for some internal thresholds. They are set by default to 0. Be warned that the filter should do nothing at quant < 16, if aOffset and bOffset are both zero. It's a wanted behavior ( thus it respect the partially the norm ).
- EncDenoise(clip c, clip vectors, bool scbehavior, int quant, int aOffset, int bOffset, int thSCD1, int thSCD2) : it merges Deblock, QDeQuant and MVCompensate, taking from them the name and behavior of their parameters. It basically does a h264 encode as if all blocks were 8x8 inter blocks. Reference frame is the previous frame output by the filter ( if it is the correct one, else it's the previous frame of the source ), mvs are those given by mvanalyse on the source. The reference frame is compensated by the vectors, then the residual difference is quantized / dequantized and added to the result of the motion compensation. Finally, the frame is deblocked, and serves as reference for the next one.

0.9.5.3

- Mainly a bugfixe ( several filters were affected by a silly bug , and MVCompensate now do padded motion compensation, and compensate also the chroma ( though it rounds the vector to odd coordinates to do so )
- A new feature, as asked by Fizick, for mvcompensate : "scbehavior", a boolean set to true by default, will allow you to keep the previous frame over a scenechange if you set it to false.

0.9.5.2

- MVMask has two new parameters : showsad (bool) which allows to build the mask of the SAD values instead of the mask of the vectors' length. Ysc allows you to set the value taken by the mask on scene changes
- MVCompensate : behavior modification on scene changes. Now, the current frame is left untouched if a scene change was detected.
- New filter : MVSCDetection, with one parameter, Ysc, which works as previously.
- MVInterpolate, MVConvertFPS and MVBlur are enabled, but may be buggy ( though I wasn't able to make MVConvertFPS crash )

0.9.5

- Очень существенно переписано исполняемое ядро. Вектора теперь ищутся с точностью от пикселя и выше (в связи с тем, что никакой другой фильтр, кроме MVShow, еще не может работать с большей точностью). Механизм поиска сейчас быстрый (что не обязательно подразумевает, что и фильтры, использующие его информацию тоже быстрые)
- Новый параметр в MVAnalyse : lambda. Смотри документацию выше о том, как он работает
- MVDenoise работает лучше.

0.9.4

- Вектора можно сохранять в файле. С этой целью в фильтре MVAnalyse добавлен параметр filename="C:\foo.bar". Если файл не существует, вектора будут сохраняться в нем. Если он существует, то вектора будут из него читаться. Но обратите внимание:
  - Файл для целого фильма будет около 500 MБ
  - Сохранение / считывание файла требует в этот момент наличие прямого доступа к кадрам, потому его можно использовать только во время кодирования фильма, но не в процессе случайного доступа к его кадрам.
  - Прирост скорости не настолько велик, как я надеялся, так как SAD-ы не могут быть сохранены (это требует слишком много места) и должны пересчитываться.
- Фильтр MVDenoise теперь работает на 5 кадрах, и его параметры теперь "thT" и "sadT" (смотрите в документации как они работают). Он работает весьма приятно (очень хорошо для тяжелого шумоподавления)
- Порог детектирования смены сцен слегка изменен. Теперь блок изменяется, если его SAD больше thSCD1. По умолчанию thSCD1 = 300, и thSCD2 = 130. Работает хорошо (лучше, чем предыдущий SCD-механизм).

0.9.3

- Последние чистки в механизме поиска векторов.Теперь должно работать слегка быстрее
- Больше параметров поиска, устанавливаемых пользователем, особенно алгоритм поиска. Смотри документацию
- Обеспечивается работа клиент / сервер. Теперь сначала используется MVAnalyse, а потом уже желаемый фильтр. Смотри документацию и примеры, которые я изменил.
- MVCompensate отделена от MVShow (это более логично). На данный момент не работает с цветовыми компонентами (поведение аналогично MVShow в последних версиях)
- Некоторые чистки в MVBlur / MVInterpolate / MVConvertFPS, но работают они примерно так-же. Теперь MVBlur выполняет размытие в пределах кадра, а не между текущим и предыдущим кадром.
- Проделано половина работы для записи векторов в файл. Но результирующий файл будет больше (около 500 MБ - 1 ГБ, я думаю).
- MVDenoise слегка быстрее (по крайней мере - должен быть)
- Оптимизировано копирование в фильтре, благодаря функциям копирования AviSynth.
- MVShow может отображать средний SAD компенсации (с использованием showsad = true)

0.9.2.1

- Возвращена функция MVInterpolate.
- MVConvertFPS должна работать и на последних кадрах клипа

0.9.2

- MVInterpolate больше не существует.
- MVBlur и MVConvertFPS улучшены. Они так же обзавелись новыми параметрами, смотрите об этом в документации.
- в MVShow возвращен режим компенсации ( MVShow(cm = true) )

0.9.1 - 12.05.2004

- Первая версия переименованная в MVTools.

0.1-0.6 - Выпущена 24.01.2004 - 01.04.2004 by Manao

- Первые публичные версии MotionVectors (Motion.dll).

## VI) Скачать (Download)

### Download MVTools v2.5.11.1

Документация и ссылки для скачивания версий предыдущей ветви 1.X находятся по адресу http://avisynth.org.ru/mvtools/mvtools.html

Старая версия MVTools v.0.9.9.1 может быть скачена с сайта Manao

`$English Date: 2006/09/17 17:47:05 - более свежие версии пока не на CVS $
Русский перевод версии 0.9.9.1 08.07.2005 Turyst04 Turyst04@nextmail.ru
Редакция и дополнения 14.07.2005 Fizick http://bag.hotmail.ru
Подробное введение, добавленные функции и примеры 31.10.2005-2010 Fizick http://avisynth.org.ru`