Log in

View Full Version : Avisynth+


Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [61] 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

MysteryX
10th February 2017, 20:58
Why do you need a whole class simply to write a utility function? Just write a simple function that just uses a switch statement to return the value based on the integer.
Switch or if's is what I used to do, but with all the new data formats, it's getting very messy.

JoeyMonco
10th February 2017, 21:00
Switch or if's is what I used to do, but with all the new data formats, it's getting very messy.

I fail to see how it's less messy than your solution which is an over-engineered mess. The switch statement in C is entirely created to do what you want which is to map some action to an integeral value.

This isn't Java where you need an abstract factory factory builder simply to create a one-off utility function.

MysteryX
10th February 2017, 21:05
I fail to see how it's less messy than your solution which is an over-engineered mess. The switch statement in C is entirely created to do what you want which is to map some action to an integeral value.
I want to know BitsPerComponent of the destination format passed as a string. How am I to know whether it's 8-bit, 10-bit or 16-bit? It could be YV12, YUV444P10, YUVAP16... doing it the "if" or "switch" way is a direct road to hell. If you want to write long series of conditions each time you want to do such an operation, then go ahead, but I'm not going down that road.

JoeyMonco
10th February 2017, 21:41
And why do you need to pass the format as a string? What are you doing that you actually need the string for? What purpose is the string serving that can't be served by passing through the enum value? It sounds like you're inventing an over-complicated solution to an imaginary problem.

wonkey_monkey
10th February 2017, 21:45
So you want the integer output of BitsPerComponent to be turned into a string? Ok.

I think he meant "I want to know BitsPerComponent of the [destination format passed as a string]", not "I want to know [BitsPerComponent of the destination format] passed as a string."

JoeyMonco
10th February 2017, 21:49
I think he meant "I want to know BitsPerComponent of the [destination format passed as a string]", not "I want to know [BitsPerComponent of the destination format] passed as a string."

Okay. :o

Still failing to see the reason why strings need to be passed around instead of the enum value, though.

MysteryX
10th February 2017, 22:02
There are many standard functions that take a format as parameter ... or is there? Actually, there is ConvertToY8, ConvertToYV24, ConvertToYUV444, ConvertToRGB32... many different functions, sometimes taking only BitsPerComponent as a parameter. There's got to be other filters taking the format as a string ...

oh yeah, ColorBars, AviSource and CombinePlanes take pixel_type as a string.

MysteryX
10th February 2017, 22:19
Pinterf, ConvertFromDoubleWidth and ConvertToDoubleWidth don't support RGB24 and RGB32.

In ConvertToDoubleWidth, add

else if (vi.IsColorSpace(VideoInfo::CS_BGR48)) vi.pixel_type = VideoInfo::CS_BGR24;
else if (vi.IsColorSpace(VideoInfo::CS_BGR64)) vi.pixel_type = VideoInfo::CS_BGR32;


In ConvertFromDoubleWidth, add

else if (vi.IsRGB24())
vi.pixel_type = VideoInfo::CS_BGR48;
else if (vi.IsRGB32())
vi.pixel_type = VideoInfo::CS_BGR64;


I hope you don't mind if I copy/paste ConvertStacked.cpp into my project to avoid dependency?

MysteryX
10th February 2017, 23:49
Bug in ConvertBits. If I call ConvertBits(14, dither=-1), it says "dithering is allowed only for 8 bit targets". If I do not specify "dither=-1", then it works.

Also, ConvertFromDoubleWidth supports 10-16 bit, while ConvertToDoubleWidth only supports 16-bit. Code needs to be replaced with this:

if (vi.BitsPerComponent() < 10 || vi.BitsPerComponent() > 16)
env->ThrowError("ConvertToDoubleWidth: Input clip must be 10-16bit format");
else if (vi.Is420()) vi.pixel_type = VideoInfo::CS_YV12;
else if (vi.Is422()) vi.pixel_type = VideoInfo::CS_YV16;
else if (vi.Is444()) vi.pixel_type = VideoInfo::CS_YV24;
else if (vi.IsY()) vi.pixel_type = VideoInfo::CS_Y8;
else if (vi.IsColorSpace(VideoInfo::CS_BGR48)) vi.pixel_type = VideoInfo::CS_BGR24;
else if (vi.IsColorSpace(VideoInfo::CS_BGR64)) vi.pixel_type = VideoInfo::CS_BGR32;
else env->ThrowError("ConvertToDoubleWidth: Input clip must be 10-16bit format");

MysteryX
11th February 2017, 00:14
This code causes a crash: "cannot decompress video frame: the video data is too short"

ConvertToYV24()
AddAlphaPlane()
CombinePlanes(planes="RGBA", source_planes="YUVA", pixel_type="RGBAP8")
ConvertToYV24()

This also gives the same error

ConvertToPlanarRGBA()
CombinePlanes(planes="YUVA", source_planes="RGBA", pixel_type="YUVA444P8")


Also, is it normal that CombinePlanes doesn't only cast the planes but inverts the image? If so, that means I have to call FlipVertical again.

feisty2
11th February 2017, 09:31
In C# I could easily convert a string to its enumeration value but that won't work in C++.

http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum-in-c

Note that the performance of Enum.Parse() is awful, because it is implemented via reflection. (The same is true of Enum.ToString, which goes the other way.)
If you need to convert strings to Enums in performance-sensitive code, your best bet is to create a Dictionary<String,YourEnum> at startup and use that to do your conversions.


not that much different here, uh?

I also like dynamic features a lot cuz they are handy to use, but I would just go with a completely dynamic programming language like Python if I'm gonna use dynamic features throughout my program

MysteryX
11th February 2017, 15:47
not that much different here, uh?
Good to know.

Then, I could create a generic class that automatically builds a dictionary from specified Enum on first use (via reflection), and then does the conversion though the dictionary on all subsequent calls.

But in the case of AviSynth, the Enum is a bit more complicated than that, with combinations of fields, and with names that don't always match format values, so here there's no way around listing all valid formats manually. Plus, it's only 1 Enum, and it's unlikely to change much. If it were 100 Enums that could change and evolve regularly, then it would be a different story.

feisty2
11th February 2017, 15:51
But in the case of AviSynth, the Enum is a bit more complicated than that, with combinations of fields, and with names that don't always match format values, so here there's no way around listing all valid formats manually.

if you don't need portable C++ code, you could do reflection tricks in C++ as in C# with CLR under visual studio.

MysteryX
11th February 2017, 15:55
Perhaps, but it's kind of getting off-topic -- not providing any value to the topic of Avisynth+. I got the code working already.

vinnytx
12th February 2017, 10:54
I have problems with Avisynth+ latest versions and Potplayer.
I use this script to resize my videos while playing
SetMemoryMax(512)
SetFilterMTMode("DEFAULT_MT_MODE", 2)
ffdshow_source()
dispWidth = 1920
dispHeight = 1080
mWidth = float(last.width)
mHeight = float(last.height)
ratio = (mWidth/mHeight)
newHeight= round((dispWidth/ratio)/2)*2
newHeight > dispHeight ? Eval("""
newHeight=dispHeight
newWidth=round((newHeight*ratio)/2)*2
""") : Eval("""
newWidth=dispWidth
""")
spline64resize(newWidth,newHeight)
Prefetch(4)
Videos are "flashing" at the first seconds of reproduction, then they are showed correctly
Here an example. https://www.mediafire.com/?4t75s2m74wuvzj3
The only Avisynth+ version that works well is r1779



Another problem with Potplayer is that I can't hear audio unless I remove TimeStretch.dll plugin.
It appears this error message
http://i.imgur.com/RTyg9aR.jpg



Also, I had to remove ImageSeq.dll plugin because I had many Potplayer crashes with it

MysteryX
12th February 2017, 15:08
I'll also mention that I've been seeing an audio/video sync issue with the latest version.. not even sure if it's related to Avisynth version, but I'm just throwing it out there. Has anyone else experience audio/video sync issue? Might be related to VFR as I only have issues with a few videos, and I'm pretty sure it was working fine before. This is when I open the AVS script in MPC-HC to retune the audio to 432hz. That would require more investigation to identify where the issue comes from.

MysteryX
12th February 2017, 17:59
CombinePlanes acts weird with a non-planar source such as RGB32. It should instead return an error and require planar input.

amayra
12th February 2017, 21:55
I'll also mention that I've been seeing an audio/video sync issue with the latest version.. not even sure if it's related to Avisynth version, but I'm just throwing it out there. Has anyone else experience audio/video sync issue?
i try few video no problem have been found with latest version so far :confused:

pinterf
12th February 2017, 22:20
CombinePlanes acts weird with a non-planar source such as RGB32. It should instead return an error and require planar input.
Weird means ........ /fill the missing words/ :)

pinterf
12th February 2017, 22:25
Bug in ConvertBits. If I call ConvertBits(14, dither=-1), it says "dithering is allowed only for 8 bit targets". If I do not specify "dither=-1", then it works.
Thanks, fixed.

Converting String to VideoInfo:: pixel_type integer: Invoke this script function:
int ColorSpaceNameToPixelType (string ColorSpaceName)

pinterf
12th February 2017, 23:04
I have problems with Avisynth+ latest versions and Potplayer.
[...]
Another problem with Potplayer is that I can't hear audio unless I remove TimeStretch.dll plugin.
It appears this error message
[...]
Also, I had to remove ImageSeq.dll plugin because I had many Potplayer crashes with it
These Avisynth+ plugins that are normally found in plugins+ directory, are planned to be used together with specific avs+ version. From time to time, internal interface can change, not too frequently but changes. Since 17xx version there was two or three jumps in IScriptEnvirontment2 (this is that special interface), maybe these external plugins rely on that and break if e.g. an old external avs+ plugin is used with a new avs+ core.
That's why after a lot of dev build I made a release on r2420 and compiled those plugins again and have put them into the pack.

Well, but if you have handled the dll's together with avs+ core, and the problem still occurs then ... I don't know. Maybe Groucho's excellent AVSMeter tool can show you other issues with your plugins or installation.

MysteryX
13th February 2017, 00:21
Thanks, fixed.
Converting String to VideoInfo:: pixel_type integer: Invoke this script function:
int ColorSpaceNameToPixelType (string ColorSpaceName)
That function already exists? What versions of Avisynth support it?

Because I have to write code that works both on Avisynth 2.6 and Avisynth+.

Also need the opposite: int to string. I guess calling Clip.PixelType does the job, since VideoInfo only returns an int.

MysteryX
13th February 2017, 00:34
Out of curiosity, what is the performance cost of calling a function via env->Invoke, in comparison to, say, a conversion via reflection in .NET?

StainlessS
13th February 2017, 01:14
If env->Invoke called in your constructor then no problem, however if filter then it's constructor called at every invocation and so will
perform similar to within ScriptClip, with constructor overhead at every frame if called from within GetFrame().
No idea about .NET stuff.

EDIT: But without the script parsing overhead of ScriptClip.

real.finder
13th February 2017, 06:33
MysteryX

I think PixelType() is what you want, can work in avs26 and avs+ and return string

MysteryX
13th February 2017, 20:41
Weird means ........ /fill the missing words/ :)
It's hard to find the words but... I think "weird" is the right word.

https://s20.postimg.org/57pq6wqop/Combine_Planes1.jpg (https://postimg.org/image/57pq6wqop/)

ConvertToRGB24()
CombinePlanes(planes="YUV", source_planes="RGB", pixel_type="YUV444P8")

https://s20.postimg.org/l78dqgmqh/Combine_Planes2.jpg (https://postimg.org/image/l78dqgmqh/)

Destination format complains if you specify a non-planar format, so it would be consistent to apply the same restriction for the input format.

Converting String to VideoInfo:: pixel_type integer: Invoke this script function:
int ColorSpaceNameToPixelType (string ColorSpaceName)
I still don't know if Avisynth 2.6 supports this but this is not something that should need to be exposed to the script interface. Scripts work purely with format as string and never see the underlying int. Only the c++ interface needs to work with the int value, so the only place that makes sense to do such a conversion is in the header file or custom c++ code.

I think PixelType() is what you want, can work in avs26 and avs+ and return string
Yes this has been mentioned already. Converting the other way to get an int, however, is different.

Also, ConvertToYV24() on YUVA444P8 isn't converting it to YUV444P8.

By the way, CombinePlanes is making things a lot easier for me. I wasn't sure about the components order in AvisynthShader... it is RGBA in 8-bit and BGRA in 16-bit. Now that's easy to deal with.

pinterf
13th February 2017, 21:59
It's hard to find the words but... I think "weird" is the right word.

ConvertToRGB24()
CombinePlanes(planes="YUV", source_planes="RGB", pixel_type="YUV444P8")

Destination format complains if you specify a non-planar format, so it would be consistent to apply the same restriction for the input format.
Ahhh, thanks, good catch, never tried CombinePlanes with packed rgb inputs, while giving a different, but planar output type.
I decided that packed RGB inputs will be silently converted to planar rgb variant, to make the function transparent for the user. (The same logic is already working in ExtractR,G,B,A)

Groucho2004
14th February 2017, 12:13
@pinterf
I was doing some testing with AVS+ last night and noticed that some error messages thrown in case of plugin problems are still very cryptic and not helpful.
For example, the same error message ("There is no function named...") is thrown if:

A function from 64 bit plugin in the 32 bit auto-load directory is used
*or*
The runtimes for a specific plugin are not installed

Tracking the error can be difficult, especially for people who are not so technically versed. There are hundreds of posts on this forum that can be traced back to missing runtimes. It's not difficult to test for bitness and missing dependencies prior to Loadplugin()/LoadLibraryEx(). If you are interested in implementing these tests you are welcome to re-use the code I already have in AVSMeter.

LigH
14th February 2017, 12:48
Plus, I just had a case of an error 0xc1 loading LSMASHSource.dll in MeGUI (using AviSynth+ as internal copy) in the German doom9/Gleitz forum, which could be solved by forcing a re-installation of L-SMASH Works in the MeGUI updater; the reason was a bit unclear, may have been a manual substitution with a 64-bit version of the DLL while MeGUI uses a 32-bit environment.

Until now, I was not even successful in discovering which category of errors this code 0xc1 belongs to. (May it be similar to Pascal's DosError?)
_

P.S.: Searching for the decimal value (193): MSDN System Error Codes (https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx)

ERROR_BAD_EXE_FORMAT
193 (0xC1)

%1 is not a valid Win32 application.

Apparently confirms.

MysteryX
14th February 2017, 22:55
Now this is weird.

My script plays fine in MPC-HC or VirtualDub. When opening in Windows Media Player, however, it crashes.


LWLibavVideoSource("video.mp4", cache=False)
ConvertToShader()


Script error: Invalid arguments to function 'ConvertToShader'. !?? It plays perfectly fine in MPC-HC. What's going on here?

That error might be of something else going on within the filter as it was crashing on the constructor at this line so I commented it


if (!vi.IsY() && !vi.Is420() && !vi.Is422() && !vi.Is444() && !vi.IsRGB())
env->ThrowError("ConvertToShader: Source format is not supported.");


Source is YV12.

tormento
15th February 2017, 14:25
New Features

[…]

Video SDK 8.0

High-bit-depth (10/12-bit) decoding (VP9/HEVC)

Another mosaic tile?

shekh
16th February 2017, 18:50
After applying ConvertAudioToFloat the audio still appears as 16-bit integer in VirtualDub.
Can it output PCM_FLOAT format? Tried with r2375.

Groucho2004
16th February 2017, 18:54
After applying ConvertAudioToFloat the audio still appears as 16-bit integer in VirtualDub.
What does AVSMeter report (AVSMeter script.avs -i)?

shekh
16th February 2017, 19:07
What does AVSMeter report (AVSMeter script.avs -i)?


AVSMeter 2.4.9 (x86) - Copyright (c) 2012-2017, Groucho2004
Query Avisynth info...
AviSynth+ 0.1 (r2375, MT, i386) (0.1.0.0)
Query system info...
Loading script...
Number of frames: 720
Length (hh:mm:ss.ms): 00:00:30.030
Frame width: 720
Frame height: 400
Framerate: 23.976 (2500000/104271)
Colorspace: BGR64
Audio channels: 6
Audio bits/sample: 32 (Float)
Audio sample rate: 48000
Audio samples: 1441442

Groucho2004
16th February 2017, 19:23
It may be the same problem I had in AVSMeter where it did not return the correct audio bits/sample in some cases. I'm now using VideoInfo::sample_type which seems to work fine.

shekh
16th February 2017, 19:29
I am looking at vfw interface where format is described by WAVEFORMATEX.

StainlessS
16th February 2017, 20:08
After applying ConvertAudioToFloat the audio still appears as 16-bit integer in VirtualDub.
Can it output PCM_FLOAT format? Tried with r2375.

Shekh, is below what you are after ?


OPT_AllowFloatAudio
global OPT_AllowFloatAudio = True
This option enables WAVE_FORMAT_IEEE_FLOAT audio output. The default is to autoconvert Float audio to 16 bit.

OPT_UseWaveExtensible
global OPT_UseWaveExtensible = True
This option enables WAVE_FORMAT_EXTENSIBLE audio output. The default is WAVE_FORMAT_EX.
Note: The default DirectShow component for .AVS files, "AVI/WAV File Source", does not correctly implement WAVE_FORMAT_EXTENSIBLE
processing, so many application may not be able to detect the audio track. There are third party DirectShow readers that do work correctly.
Intermediate work files written using the AVIFile interface for later DirectShow processing will work correctly if they use the DirectShow "File
Source (async)" component or equivalent.

OPT_VDubPlanarHack
global OPT_VDubPlanarHack = True v2.60
This option enables flipped YV24 and YV16 chroma planes. This is an hack for early versions of Virtualdub with YV24/YV16 support.

OPT_dwChannelMask
global OPT_dwChannelMask(int v) v2.60
This option enables you to set ChannelMask. It overrides WAVEFORMATEXTENSIBLE.dwChannelMask[[1] which is set according to this table
0x00004, // 1 -- -- Cf
0x00003, // 2 Lf Rf
0x00007, // 3 Lf Rf Cf
0x00033, // 4 Lf Rf -- -- Lr Rr
0x00037, // 5 Lf Rf Cf -- Lr Rr
0x0003F, // 5.1 Lf Rf Cf Sw Lr Rr
0x0013F, // 6.1 Lf Rf Cf Sw Lr Rr -- -- Cr
0x0063F, // 7.1 Lf Rf Cf Sw Lr Rr -- -- -- Ls Rs


On Wiki:-
http://avisynth.nl/index.php/Internal_functions#OPT_AllowFloatAudio

EDIT: Snippet from TwriteAVI doc

See also Avisynth settings for WaveExtensible and Float output for compatible players (otherwise audio may be converted to 16bit on output
from avisynth to a player).

# For Float/WaveExtensible player eg MPC-HC (Else comment out below if Player not capable)
Global OPT_UseWaveExtensible = (AudioChannels>2||AudioBits>16) # If more than 2 channels or > 16 bit, set true (Also Float, ie > 16 bits).
Global OPT_AllowFloatAudio = (IsAudioFloat) # Must be set true to play in eg Media Player Classic - Home Cinema

shekh
16th February 2017, 20:25
OPT_AllowFloatAudio


Cool, problem solved :)

bxyhxyh
18th February 2017, 23:10
Hello. I'm not always online, so I don't know the progress of AVS+ with AvsPmod. Please tell me about it.

AvsPmod from this post (https://forum.doom9.org/showpost.php?p=1733655&postcount=1148) gives error and crashes when it's starting to launch.Traceback (most recent call last):
File "run.py", line 49, in <module>
File "avsp.pyo", line 18881, in main
File "wx\_core.pyo", line 7981, in __init__
File "wx\_core.pyo", line 7555, in _BootstrapApp
File "avsp.pyo", line 18868, in OnInit
File "avsp.pyo", line 5229, in __init__
File "avsp.pyo", line 6290, in defineFilterInfo
File "avsp.pyo", line 6648, in getFilterInfoFromAvisynth
IndexError: string index out of range

Normal AvsPmod doesn't crash. But it either gives me error "Error loading Avisynth" or red frame when I call ConvertTo16bit()
Is it how it is now? Or there is problem on my end?

Reel.Deel
18th February 2017, 23:20
Hello. I'm not always online, so I don't know the progress of AVS+ with AvsPmod. Please tell me about it.

AvsPmod from this post (https://forum.doom9.org/showpost.php?p=1733655&postcount=1148) gives error and crashes.Traceback (most recent call last):
File "run.py", line 49, in <module>
File "avsp.pyo", line 18881, in main
File "wx\_core.pyo", line 7981, in __init__
File "wx\_core.pyo", line 7555, in _BootstrapApp
File "avsp.pyo", line 18868, in OnInit
File "avsp.pyo", line 5229, in __init__
File "avsp.pyo", line 6290, in defineFilterInfo
File "avsp.pyo", line 6648, in getFilterInfoFromAvisynth
IndexError: string index out of range

Normal AvsPmod doesn't crash. But it either gives me error "Error loading Avisynth" or red frame when I call ConvertTo16bit()
Is it how is it now? Or there is problem on my end?

Maybe because AvspMod has not been updated to support AVS+ high bit depth colorspaces. Does your script work if the output is 8-bit.

---

A while back on IRC, Line0 mentioned something about adding high bit depth support to AvsPmod but I don't know if there's been any progress made. Here's an old pull request: https://github.com/AvsPmod/AvsPmod/pull/28

bxyhxyh
19th February 2017, 00:09
Yeah it works ok if output is 8-bit.

Reel.Deel
19th February 2017, 00:21
Yeah it works ok if output is 8-bit.

Ok, well until AvsPmod gets updated the output video needs to be 8-bit (for preview purposes).

pinterf
19th February 2017, 10:32
@pinterf
I was doing some testing with AVS+ last night and noticed that some error messages thrown in case of plugin problems are still very cryptic and not helpful.
For example, the same error message ("There is no function named...") is thrown if:

A function from 64 bit plugin in the 32 bit auto-load directory is used
*or*
The runtimes for a specific plugin are not installed

Tracking the error can be difficult, especially for people who are not so technically versed. There are hundreds of posts on this forum that can be traced back to missing runtimes. It's not difficult to test for bitness and missing dependencies prior to Loadplugin()/LoadLibraryEx(). If you are interested in implementing these tests you are welcome to re-use the code I already have in AVSMeter.
Yes I am (and all of us, "supporters" :) are) interested.

How do you expect Avisynth to give error code on missing dependencies? By the means of debug log? Now if a plugin cannot be loaded (e.g. you put an x64 version in the x86 plugin folder), it does not prevent other plugins from loading properly so we can't raise exception and put a visible error message here. (or should we?)

I haven't checked your code yet, but isn't it slowing down the DLL loading process in general?

pinterf
19th February 2017, 10:39
A while back on IRC, Line0 mentioned something about adding high bit depth support to AvsPmod but I don't know if there's been any progress made. Here's an old pull request: https://github.com/AvsPmod/AvsPmod/pull/28
But that PR is from 2013. Is AvsPMod a dead project? And how many AvsMod forks are circulating out there and which one is the latest? It shouldn't be that hard to update it.

amayra
19th February 2017, 12:33
But that PR is from 2013. Is AvsPMod a dead project? And how many AvsMod forks are circulating out there and which one is the latest? It shouldn't be that hard to update it.

no one release it to public as far as i know :mad:

Reel.Deel
19th February 2017, 15:39
But that PR is from 2013. Is AvsPMod a dead project? And how many AvsMod forks are circulating out there and which one is the latest? It shouldn't be that hard to update it.

Yes that was before AVS+ received native high bit-depth support. If I understand correctly the plan was to add support for the Stack16 formats. Later on there was a brief discussion to support the additional high bit-depth colorspaces in AVS+. I don't know if any progress has been made, I'll ask on IRC.

AvsP (http://www.avisynth.nl/users/qwerpoi/) is the original project and has not been updated in a long time. AvsPmod (r459) is the latest and the the source is available on GitHub: https://github.com/AvsPmod/AvsPmod

I do not know of any other forks or versions floating around.

qyot27
19th February 2017, 18:15
Or just use mpv to run the previews.

amayra
20th February 2017, 10:30
Or just use mpv to run the previews.

this well take alot of time of you run Mpv for every change you did

LigH
20th February 2017, 10:38
How about VirtualDub FilterMod (https://sourceforge.net/projects/vdfiltermod)? It has an integrated script editor and should support high bit depths.

tuanden0
20th February 2017, 11:18
How about AVSEdit (https://forum.doom9.org/showthread.php?t=173640)? It work well for avs+.