Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
9th July 2008, 02:00 | #1 | Link |
Avisynth language lover
Join Date: Dec 2007
Location: Spain
Posts: 3,433
|
GRunT - Easier run-time scripting
Avisynth's run-time environment is very powerful, supporting complex video processing that would be difficult or impossible to perform in a normal script. But it's not easy to use - the behaviour of run-time scripts (especially in combination) can be hard to understand and there are usability problems concerning scope and lifetime of variables.
"Cond. filters are quite complex - and sometimes I am even surprised of the outcome" - sh0dan GRunT (Gavino's Run-Time ) is a plugin which addresses these and other problems, making the run-time system much easier to use. Features: - Simple, natural and robust way to pass variables into a run-time script from 'outside' - A run-time script can be evaluated in its own independent scope - Run-time functions can be called from a user function - Run-time functions can be applied to any frame (relative to the current one) - Additional variant of ConditionalFilter with single boolean expression - Fixes a fairly serious bug in the run-time system - Lightweight plugin extending the standard run-time environment, minimal time and memory overhead - 100% backwards compatible with existing scripts GRunT should be useful to anyone who uses the run-time filters, from those who make occasional use of ScriptClip to those who write complex functions based on run-time features (such as Restore24 or MRestore). Details The plugin provides extended versions of the following run-time filters: - ScriptClip - FrameEvaluate - ConditionalFilter - WriteFile - WriteFileIf The alternative names GScriptClip, GFrameEvaluate, GConditionalFilter, GWriteFile and GWriteFileIf may also be used. However, if running on version 2.57 or earlier of Avisynth, then only the alternative names may be used. (This restriction is necessary for technical reasons - sorry about that.) Each filter is 100% backwards compatible with its standard equivalent, but has two additional optional arguments:
Code:
function bracket_luma(clip c, float th1, float th2) { Assert(0 <= th1 && th1 < th2 && th2 <= 255, "Invalid thresholds!") ScriptClip(c, """ avl = AverageLuma() avl <= th1 ? last.BlankClip() : avl >= th2 ? last.BlankClip(color=color_white) : last """, args="th1,th2", local=true) } "I really do not like this global variable business with ScriptClip ..." - stickboy And because the run-time script is evaluated in its own scope, there is now no problem in calling bracket_luma more than once in the same script (previously the variables th1 and th2 of different instances could interfere with each other). Elements of the args string can also take the form 'name=expression' - the expression is evaluated in the current context and is used to set the value of the named variable in the run-time script. Example: args="x, y=n+1, c=c.Trim(2, 0)" will provide values for the variables x, y and c. Here y need not even exist in the current environment (although x, n and c must). The plugin also provides the following extensions to the run-time functions (eg AverageLuma):
Code:
ConditionalFilter(c, c1, c2, \ "AverageLuma(c1) > AverageLuma() && AverageLuma(c1) > AverageLuma(c2)") Finally, the plugin fixes a fairly serious bug I discovered in the run-time system. This fix is needed if you are running a version of Avisynth prior to build 080620 of 2.58. More detailed documentation and examples are provided in the attached download. EDIT 27-SEP-08: Updated to v1.0.1 to work with Avisynth 2.5.7 Comments and suggestions would still be very welcome. Last edited by Gavino; 27th April 2017 at 11:07. Reason: update wiki links |
Tags |
conditional, plugin, run-time, scriptclip |
Thread Tools | Search this Thread |
Display Modes | |
|
|