Пока суть на дело, я немного покопался в изменениях. И вот что нашёл интересное.
Появился Grunt и произошли весьма заметные изменения в Ависинте. Начну с последнего, AVS+.
Появилась естественная для программирования интерпретация IF, FOR безо всяких ScriptClip, появилась команда (часть функции по сути) выхода из модулей условия или цикла при достижении некоторых условий return.
Пример (http://avisynth.nl/index.php/GScript#Avisynth.2B).
BlankClip(width=240, height=160)
Subtitle("GScript AVS+ test", align=8)
for (i=0, 5) {
Subtitle(String(i), y=18*i)
if (i>=3) {
Subtitle("i>=3", align=5)
return Last
}
}
return Subtitle("(exit)", align=3)
/*
Loop IS terminated by 'return Last' statement;
"(exit)" line NOT executed
*/
Что примечательно, это работает с Prefetch. Сами попробуйте, у кого есть AviSynth+.
Печалит то, что мой старый пример точно так же показывает зависимость от многопоточности, когда слетает юстировка. И это независимо от того GScriptClip или ScriptClip.
Таким образом, скрипт можно реализовать в терминах привычной логики, что особенно интересно при наличии дубликатов.
Дополнено.
Для полной работоспособности функций типа
YDifferenceToNext(clip [, int offset = 1])
UDifferenceToNext(clip [, int offset = 1])
VDifferenceToNext(clip [, int offset = 1])
RGBDifferenceToNext(clip [, int offset = 1])
необходимо использовать gruntx64.dll (в оригинале называется grunt-x64.dll, что недопустимо для модулей в 7-ке) и можно использовать хоть GScriptClip, что ScriptClip - всё едино. Почему ссылки на него нет у самого автора на форуме Doom9 - не знаю. Есть только х32 - версия. 64-бит версия есть только на справочном сайте AviSynth, в разделах AVS+, с неправильным названием. Но название легко исправить.
Достаточно его кинуть в папаку C:\Program Files (x86)\AviSynth+\plugins64+
Одна неприятность - при работе в редакторе AvsPmod (х64) иногда происходит его фатальное зависание при попытке перемотать кадры в начало ролика. Пока буду продолжать тестирование.
Но уже радует, что с Prefetch работает пример ниже, хоть и со слетающей юстировкой. Но юстировка мне побоку, мне циферки давай.
scriptclip(""" Subtitle("dY=" + string(yDifferenceFromPrevious(last)) +
\ " dU=" + string(uDifferenceFromPrevious(last)) +
\ " dV=" + string(vDifferenceFromPrevious(last))
\,align=5) """)
Prefetch(2)
Важно!
Чтобы не мучиться и не заниматься ручным подбором свойств многопоточности, сообщество создало импорт-клип, в котором известные модули уже расписаны как нужно. Я тут выложу файлик, ибо он погребён в недрах англоязычного Doom9, в теме обсуждения MT-режимов. Для начала достаточно, но кто захочет - найдёт на оригинальном форуме.