View Full Version : New Plugins and Utilities


Wilbert
26th October 2004, 20:01
I moved the "New utilities" to the second post.

New plugins:

- TPRIVTC (by Kurosu) (http://kurosu.inforezo.org/avs/tprivtc.dll): It uses the IVTC information from Tsunami MPEG Encoder Project Files (some pretentious 'reverse engineering' was needed there), and is able to perform the following deinterlacing processing: interpolate odd field, interpolate even field, double (ie blend fields and nothing. discussion (http://forum.doom9.org/showthread.php?s=&threadid=82875).
- GuiSample (by hanfrunz) (http://forum.doom9.org/showthread.php?s=&threadid=63575): The first filter with a gui, it can disable the r, g and b colors separately.
- http://cultact-server.novi.dk/kpo/xstat/xstat.html + thread
- import/export uncompressed file filter (by hanfrunz) (http://forum.doom9.org/showthread.php?s=&threadid=51227): import/export uncompressed videofiles (uncompressed Quicktimes, Avid OMFs, cineon, etc ...). This filter can also write vidoedata directly to a given file! A list of supported formats is given here http://www.xnview.com/ (http://perso.wanadoo.fr/pierre.g/xnview/enformats.html)
- EDIUpsizer (by tritical) (http://forum.doom9.org/showthread.php?s=&postid=459732#post459732) Smart resize filter based on NEDI. [YV12]
- Decomb521VFR1.0 (by FalconX and others) (http://webpages.charter.net/falconx/decombvfrmod.html): Decomb521VFR1.0 mod for automated Matroska VFR. [YV12] discussion (http://forum.doom9.org/showthread.php?s=&threadid=80673)
- KernelDeint 1.5.1 (by Leak) (http://forum.doom9.org/showthread.php?s=&threadid=81322)
- MPlayerNoise (by bergi) (http://forum.doom9.org/showthread.php?s=&threadid=84181): Adds noise to the image using the MPlayer routines.
- MedianBlur (by tsp) (http://forum.doom9.org/showthread.php?s=&threadid=83883&pagenumber=2): spatial median blur filter with a variable radius.
- SmoothD (by 708145) (http://forum.doom9.org/showthread.php?s=&threadid=84355): Deblocker keeping high frequency detail.
- BlendBob (by Leak) (http://forum.doom9.org/showthread.php?threadid=80289): Instead of trying to directly match fields and then deinterlace what slipped through it does it the other way around by using a smart bobber (KernelBob for example). [YV12]
- PicSubU (by unmei) (http://homepage.hispeed.ch/mieru/etc/picsubu_test_4.rar): Puts subs on your video. Supported: USF, OPS, SRT avec noms de fichier en r้f้rence เ des fichiers d'images (png ou bmp), Fichier statique PNG ou BMP. discussion (http://atlas2.tgv.net/~media-video/forum2/viewtopic.php?t=5952) [YV12, RGB32]
- AviShader (by Antitorgo) (http://forum.doom9.org/showthread.php?s=&threadid=87295): It's a sharpener. discussion (http://forum.doom9.org/showthread.php?s=&threadid=87295). It's also the first AviSynth plugin which uses GPU (Graphics Processing Units) instead of CPU optimizations to do the processing. Some further info: General stuff (http://gpgpu.org/), Doom9Thread1 (http://forum.doom9.org/showthread.php?s=&threadid=76161) and Doom9Thread2 (http://forum.doom9.org/showthread.php?s=&threadid=72137). You will need to install DX9, and .NET 1.1 framework in order to use this plugin.
- FFT3DFilter (by Fizick) (http://bag.hotmail.ru/fft3dfilter/fft3dfilter.dhtml): 3D Frequency Domain Wiener filter-denoiser. It uses a Fast Fourier Transform method for frequency selecting an removing. You need FFTW3.DLL (ftp://ftp.fftw.org/pub/fftw/fftw3win32mingw.zip) in system folder. discussion (http://forum.doom9.org/showthread.php?s=&threadid=85790). [YV12]
- DeFreq (by Fizick) (http://bag.hotmail.ru/defreq/defreq.dhtml): it's a spatial filter removes some frequencies from video frames. It can be used for removal of interference frequency noise (regular inclined stripes) from some TV capturing, and also for additional blurring. You need FFTW3.DLL (ftp://ftp.fftw.org/pub/fftw/fftw3win32mingw.zip) in system folder. discussion (http://forum.doom9.org/showthread.php?s=&threadid=82978). [YUY2 ?]
- Autocrop (by CropsyX, len0x): http://forum.doom9.org/showthread.php?s=&threadid=87602
- Transition: http://forum.doom9.org/showthread.php?s=&threadid=69155
- Variableblur (by tsp):http://forum.doom9.org/showthread.php?s=&threadid=88645
- MedianBlur 'ML3Dex' CPU/GPU versions (by tsp): http://forum.doom9.org/showthread.php?s=&threadid=88450: A variable radius spatial/temporal median blur filter.
- fft3dGPU (by tsp): http://forum.doom9.org/showthread.php?s=&threadid=89941: a GPU version of Fizicks fft3dfilter.
- Immaread (by E-Male) (http://forum.doom9.org/showthread.php?s=&threadid=90131): Let's you import pictures (also with alpha channel and animated stuff) using the ImageMagick libs.
- freeframe (by Fredrik Mellbin) (http://forum.doom9.org/showthread.php?s=&threadid=92174): avs plugin which enables you to use freeframe filters in AviSynth. [RGB]
- HDR AGC (by paviko) (http://forum.doom9.org/showthread.php?s=&threadid=93571): High Dynamic Range Automatic Gain Control - is a new plugin for our miniDV amateur camcorders to increase its dynamic range.
- ColourizeSmooth (by insanedesio) (http://forum.doom9.org/showthread.php?s=&threadid=91344&perpage=20&pagenumber=2): uses a general colourizing algorithm to smooth a given clip. Algorithm is based on
http://www.cs.huji.ac.il/~yweiss/Colorization. [YV12, YUY2]
- RestoreFPS (by mg262) (http://forum.doom9.org/showthread.php?s=&threadid=94091): Reverses the kind of blending generated by ConvertFPS, restoring original framerate.
- MT (by tsp) (http://forum.doom9.org/showthread.php?s=&threadid=94996): A filter that split a frame up in smaller fragment that are processed in invidual threads allowing full utilization of multiprocessor or hyperthread enabled computers.
- SClavc (by akupenguin) (http://students.washington.edu/lorenm/src/avisynth/sclavc/): It allow access to libavcodec's scene-change metrics (don't forget to put scenechange-lavc.dll in your system32 folder).
- Run (by mg262) (http://forum.doom9.org/showthread.php?t=95918): Runs a system command.
- ColourLike (by mg262) (http://forum.doom9.org/showthread.php?t=96308): Makes a clip look like a 'reference' clip by adjusting each colour channel.
- ExtendedBilateral (by insanedesio) (http://forum.doom9.org/showthread.php?t=96015): An extended version of the bilateral filter.
- DCT (by lcld) (http://forum.doom9.org/showthread.php?p=667382#post667382): Performs DCT and its inverse to see the videospectrum. [YUY2]
- ExpSat (by brabbudu) (http://expsat.sourceforge.net/): This filter allow to vary the saturation curve exponent of the image or video.
For a finer tuning of the effect, it's possible to select the application hue range and therefore the areas of the image for which the saturation will be varied. discussion (http://forum.doom9.org/showthread.php?t=97052). [RGB]
- Alternate (by mg262) (http://forum.doom9.org/showthread.php?t=97059): Switches back and forth between versions of a clip to highlight the differences.
- PlaneMinMax (by barts(impson...Not!)) (http://forum.doom9.org/showthread.php?t=97748): Frame-based YV12 Plane Min/Max Functions Without ConditionalFilter.
- MDeblock (by kassandro) (http://home.arcor.de/kassandro/MDeblock/MDeblock.htm): Plugin for removing block artifacts. discussion (http://videoprocessing.11.forumer.com/viewtopic.php?t=11).
- Denoise (by Mohan) (http://www.avisynth.org/warpenterprises/#denoise): This is an adaptive local noise reduction filter.
- Cel foreground (by mg262) (http://forum.doom9.org/showthread.php?t=99779): It denoises foreground objects in animation. (SSE2). documentation (http://forum.doom9.org/showthread.php?t=99778).
- ColorIt (by Mohan) (http://www.avisynth.org/warpenterprises/#ColorIt): Coloring greyscale images using prescribed colors. discussion (http://forum.doom9.org/showthread.php?t=93990).
- Wathershed (by Mohan) (http://www.avisynth.org/warpenterprises/#watershed): If one assumes the image values (0 to 255) represents the elevation in an rectangular area of x and y, then watershed lines and individual basins can be demarcated. Such a segmentation of the image has some applications. (Wilbert: no idea what this means :)). discussion (http://forum.doom9.org/showthread.php?t=93990).
- GetDups (by Turyst04) (http://bag.hotmail.ru/): Sometimes source clip contains groups of frames duplicates (produced at capturing of amateur 8 mm (Super 8) films for example), separated by intermediate transitional smeared (not-similar) frames. The plugin select one frame per such group.
- Cel Stabilise (by Mohan) (http://forum.doom9.org/showthread.php?p=715315#post715315): For stabalising video. It's primarily meant for animation, especially old animation, although as far as I can see it should work on live material if the background is reasonably still.
- Motion (by mg262) (http://forum.doom9.org/showthread.php?t=101859): Real-time true-motion motion compensation. Finds and draws motion on the clip.
- SidSource (by Sh0dan) (http://forum.doom9.org/showthread.php?t=102500): This plugin allows you to play your favorite retro songs. It will enable you to play more than 30,000 songs available for free download produced on the Commodore 64.
- EEDI2 (by tritical) (http://forum.doom9.org/showthread.php?p=744308#post744308): It resizes by 2x in the vertical direction by copying the current image to every other line in the resized image and then interpolating the missing field. An edge-directed interpolation for deinterlacing attempt.
- OMF import filter (by tateu) (http://forum.doom9.org/showthread.php?t=103931): It handles a small subset of the OMF file format (video only) and can read these formats: 1:1 Uncompressed YUY2 (CDCI), Mpeg2 I frame only, DV25, and Mjpeg (2:1, 15:1, etc.).
- Quicktime Import/Export Filter (by tateu) (http://forum.doom9.org/showthread.php?t=104293): This filter can read and write quicktime files using an existing installation of Quicktime (6 and 7). [RGB, YUY2].
- Sox Audio Effect Filter (by Sh0dan) (http://www.zenaria.com/kpo/avisynth/SoxFilter.html): Alloww you to run SOX effects within AviSynth. Most effects are supported, and multiple effects can be stacked after each other. discussion (http://forum.doom9.org/showthread.php?t=104792).
- AllColorsYUY2 and AllColorsRGB24 (by hanfrunz) (http://forum.doom9.org/showthread.php?t=104846): VectorScope; the framenumber represents the luma (YCBCR) or the red channel (RGB).
- BassAudio (by dimzon) (http://forum.doom9.org/showthread.php?t=108254): Wrapper for the BASS library which supports MP3/MP2/MP1/OGG/WAV/AIFF/WMA/FLAC/WavPack/Speex/Musepack /AAC/M4A/APE.
- FRFun (by prunedtree) (http://forum.doom9.org/showthread.php?t=110200): A fractal based denoiser.
- TNLMean (by tritical) (http://www.missouri.edu/~kes25c/): NonLocal-means denoising algorithm (based on non-local averaging of pixels using a Gaussian kernel). discussion (http://forum.doom9.org/showthread.php?t=111344).
- GradFun2db (by prunedtree) (http://forum.doom9.org/showthread.php?t=108681): debanding filter (you will get banding if you decrease the number of colors in a frame).
- AVC/H.264 Source Filter: http://forum.doom9.org/showthread.php?t=122599
- Soundout (exporting sound): http://forum.doom9.org/showthread.php?t=120025
- autolevels: http://www.zendurl.com/t/ta41/autolevels_en.php
- ffmpegsource: http://forum.doom9.org/showthread.php?t=127037
- shock filter: http://forum.doom9.org/showthread.php?t=122443
- Spatial Bob deinterlacer: http://forum.doom9.org/showthread.php?t=129142
- Importing sup subtitles: http://forum.doom9.org/showthread.php?t=119390
- RaWav: opening WAVE files (>4GB ; W64) in AviSynth: http://forum.doom9.org/showthread.php?t=119667
- AVSInpaint: logo removal plugin: http://forum.doom9.org/showthread.php?t=133682
- BeHappy: http://www.codeplex.com/BeHappy
- Multicore optimization idea: running consecutive filters in different threads: http://forum.doom9.org/showthread.php?t=139629
- SincResize based on DCT: http://forum.doom9.org/showthread.php?p=953002#post953002
- GRunT: http://forum.doom9.org/showthread.php?t=139337
- aWarpSharp (SEt): http://forum.doom9.org/showthread.php?t=147285
- AssRender (TheFluff): http://forum.doom9.org/showthread.php?t=148926
- dither 1.8 plug-in and scripts (cretindesalpes): http://forum.doom9.org/showthread.php?p=1386559#post1386559
- flash3kyuu_deband (SAPikachu): http://forum.doom9.org/showthread.php?t=161411

- avs2yuv 0.24 fix: http://forum.doom9.org/showthread.php?t=145912; fix2: http://forum.doom9.org/showthread.php?p=1527698#post1527698

Japanese plugins plus machine translated descriptions (010505):

[GPU_001.zip (by thejam79)]: GPU versions of several AviSynth plugins (GPU_BilinearResize, GPU_LanczosResize, GPU_Convolution3d, GPU_TemporalSmoother, GPU_ColorYUY2).
[KillPulse (by 791)]: Pulse noise reduction plugin.
[DePulse (by 790)]: Scratch removal plugin.
[pa (by Chiyo Cro)]: Measures processing time of a particular filter.

more info and download: http://www.avisynth.org/JapanesePlugins

AviSynth64 (based on v2.55): http://forum.doom9.org/showthread.php?t=87623. Some more info: http://www.planetamd64.com/index.php?showtopic=5013

AviSynth64 plugins:
ftp://squid80.no-ip.com/ (AviSynth, DGdecode, Decomb, Undot, x264, XviD)

free C++ compiler: http://forum.doom9.org/showthread.php?s=&threadid=74608 (for W2K and XP only)

Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) can be obtained here (http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en).

Morgan 3.12 beta: http://forum.doom9.org/showthread.php?s=&threadid=72332

vcmohan's plugins: http://avisynth.org/vcmohan/

Kevin's plugins: http://kevin.atkinson.dhs.org/avisynth.html

mg262's plugins (including sources and docs):
http://forum.doom9.org/showthread.php?t=118430

Fizick's plugins:
http://bag.hotmail.ru/
http://www.avisynth.org/fizick

Manao's plugins:
http://manao4.free.fr/

akupenguin plugins:
http://students.washington.edu/lorenm/src/avisynth/: hqdn3d, dedup, flicker, avsyuv and others.

Japanese plugins:
http://nullinfo.s21.xrea.com/
excite.co.jp's Japanese translation (http://www.excite.co.jp/world/english/web/):
http://www.excite.co.jp/world/english/web/body/?wb_url=http%3A%2F%2Fnullinfo.s21.xrea.com%2F&submit=%83E%83F%83u%83y%81%5B%83W%96%7C%96%F3&wb_lp=JAEN&wb_dis=2&wb_co=excitejapan
http://niiyan.s8.xrea.com/avisynth/index_en.html

SEt's AviSynth 2.6 builds:
Changes:
- MT related fixes.
- General code cleanup (for scope, const).
- Project splitted and settings cleaned up. Converting from VS6 is a great way to get strange settings.
- Converted .asm to yasm. If we ever hope to be portable - it'll most likely be yasm for assembler.
link: http://forum.doom9.org/showthread.php?t=148782

Mug Funky
31st October 2004, 17:38
New stuff:

- Gscript (by Gavino) (http://forum.doom9.org/showthread.php?t=147846): a plugin that extends the Avisynth scripting language to provide additional control-flow constructs:
multi-line conditionals (if-then-else blocks), 'while' loops and 'for' loops.
- AviSynth Tracker plugin (by Shlomo) (http://forum.doom9.org/showthread.php?t=154010): Let's you track an object. Requires Python 2.6.
- Raw file access plugin (by Sashimi) (http://forum.doom9.org/showthread.php?t=154830): Let's you import and export raw files.
- PointSize (by `Orum) (http://forum.doom9.org/showthread.php?t=154674): A collection of pixel scaling filters
- TimeLapseDF filter: http://www.zhitenev.com/avisynth/TimeLapseDF/
- Deathray (http://forum.doom9.org/showthread.php?t=159148): OpenCL GPU accelerated spatial/temporal non-local means de-noising. It's written in OpenCL and typically runs on the GPU (only GeForce 8 series or higher, or ATI HD 5870 and higher supports OpenCL).
- ColorScreenMask (http://forum.doom9.org/showthread.php?t=159274): A green screen (chroma key) plugin.
- NLMeansCL (http://forum.doom9.org/showthread.php?t=158925): NLMeans plugin written in OpenCL and typically runs on the GPU (only GeForce 8 series or higher supports OpenCL).
- RawSource modified by Chikuzen (http://forum.doom9.org/showthread.php?p=1470557#post1470557): added mono(Y8) colorspace support to YUV4MPEG2.
- AviSynth port of a certain AviUtl plugin called Cross-Conversion Correction (http://forum.doom9.org/showthread.php?t=158696): It's aim is to fix the interlaced upscaling that Japanese broadcasts and Blu-rays seem to use (near as I can tell). This plugin is specifically meant for 720->1080 conversions.
- SmoothAdjust (http://forum.doom9.org/showthread.php?t=154971): Consists of - SmoothLevels which allows to change levels & gamma with optional limiting, - SmoothTweak which allows to change brightness, contrast, saturation & hue, and - SmoothCurve which allows to change a plane according to a fixed curve.
- TurnsTile (http://www.gyroshot.com/turnstile.htm): Turns input clip into a mosaic built from pieces of a user-defined tilesheet.
- AVSMeter (http://forum.doom9.org/showthread.php?t=162155): A small CLI tool that runs an Avisynth script without any overhead, displays some clip info and the min., max. and average frame rates.
- HSVAdjust (http://forum.doom9.org/showthread.php?t=162022): HSVAdjust/HSLAdjust/HSIAdjust let's you rotate hues, control the strength of color (saturation), or modify the brightness of a clip. The type of brightness depends on the filter. It's value for HSVAdjust, lightness for HSLAdjust or intensity for HSIAdjust.
- MP_Pipeline (http://forum.doom9.org/showthread.php?t=163281): runs parts of an avisynth script in external processes.
- Sora (http://forum.doom9.org/showthread.php?t=164073): Sora's avs multi-process/multi-thread plugin package.
- MXFSource (http://code.google.com/p/dcinematools/wiki/MXFSource): imports MXF files (http://en.wikipedia.org/wiki/Material_Exchange_Format) with JP2K and PCM essence. discussion (http://forum.doom9.org/showthread.php?t=160125).
- Waveform (http://forum.doom9.org/showthread.php?t=165703): a plugin to overlay audio waveforms on video clips - useful for identifying sync issues and audio glitches.
- Quad (http://forum.doom9.org/showthread.php?t=165978): a quadrilateral transformation filter similar to vcmohan's reform.
- Jinc Resizer (http://forum.doom9.org/showthread.php?t=169813)
- VapourSource (http://forum.doom9.org/showthread.php?t=168339): vapoursynth script importer for avisynth.
- VideoInputSource (http://forum.doom9.org/showthread.php?t=170311&highlight=source): grabs video frame from video capture card or webcam in real-time.
- ShapeMask (http://forum.doom9.org/showthread.php?t=172308): Dynamically mask out bright shapes.

- Neembuu (http://forum.doom9.org/showthread.php?t=170590): streams youtube videos (or videos from any http source). Files are served using a Virtual Filesystem (Pismo File Mount). More discussion can be found here (http://neembuu.com/now/help/).

- Documentation available on the protocol that Avisynth uses for its TCPServer and TCPSource: http://forum.doom9.org/showthread.php?p=1402917#post1402917
- Command line client for TCPDeliver: http://forum.doom9.org/showthread.php?t=120030

- AvxSynth: a Linux port of AviSynth: Project home (http://code.google.com/p/avxsynth/). Discussion (http://forum.doom9.org/showthread.php?t=164386).

- AVSTP (http://forum.doom9.org/showthread.php?t=164407): A library for multithreaded plug-in development.

Wilbert
7th November 2004, 14:18
Utilities:

AVSlib (by gzarkadas) (http://sourceforge.net/projects/avslib/): A new extension library for Avisynth, with support for arrays, mathematical and statistical functions, clip-editing functions and other stuff. Documentation can be found here (http://avslib.sourceforge.net/), and discussion here (http://forum.doom9.org/showthread.php?t=100577). For AviSynth v2.56 (or later)) there is a patch (AVSLib 1.0.1) which can be used.

LBKiller (by esby) (http://esby.free.fr/): (1) corrects specifical frames in a video via GIMP (http://gimp-win.sourceforge.net/stable.html) or Adobe Photoshop (or any other image editing program) editing of png/jpg/bmp captured frames, and avs script generation, using frame freezing. Thus your favourite image editing program can now be used to edit captured frames with this utility. (2) generate ecf according to scenechange & ssa script. discussion (http://forum.doom9.org/showthread.php?s=&threadid=80859). Esby, when are you going to write documentation about this ?

cfr2tc/tc2cfr and gui (hybrid stuff <-> 120 fps-avi; requires NET framework 1.1):
Discussion (http://forum.doom9.org/showthread.php?p=759253#post759253). The first utility takes an avi file with a video stream containing null frames and outputs a new avi file containing the same video stream, but with all null frames removed and a v1 or v2 timecode file. It also has timecode file only modes that create the timecode file but do not create a new avi file. The second utility turns an avi file (with each frame present once) into a new avi file with null frames with the specified framerate and a v1 or v2 timecode file specifying the display length for each individual frame.

latest makeAVIS: http://forum.doom9.org/showthread.php?t=126788

avs input plugin for Foobar2000 (you need foobar 0.9): http://forum.doom9.org/showthread.php?t=108970

avs2wav:
http://forum.doom9.org/showthread.php?s=&threadid=70882
http://cvs.sourceforge.net/viewcvs.py/jorydownloader/avs2ogg/

avs/avi to wav:
http://forum.doom9.org/showthread.php?t=124471
http://sourceforge.net/projects/wavi-avi2wav

avs2avi (and gui): http://forum.doom9.org/showthread.php?s=&postid=482898#post482898. Is under development again, it also includes a nice gui. Latest release (http://www.avs2avi.org/).
avs2avi (1.40 and 1.40a): http://www.avisynth.info/?%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6#t952b3b1

avs2pipe:
http://forum.doom9.org/showthread.php?t=160383: avs2pipe is a tool to output y4m video, wav audio or dump some info about the input avs clip.

avs2x264:
http://forum.doom9.org/showthread.php?s=&threadid=94162

AVSAmp:
A command line tool that will calculate the value you need in Amplify() for audio normalized to 100% (audio must be 16 bit).
http://forum.doom9.org/showthread.php?t=92120

AviSynth Front:
AviSynth Front is a frontend for AviSynth 2.5. It is not intended to be a full featured editor for AviSynth scripts, but rather focuses on ease of use and simplification of everyday tasks. It uses templates that you assemble into a script and then apply to a video or a list file.

You can download it from: http://users.volja.net/arakar/andrej/software/avsfront23.zip

AviSynth and Avidemux:
AviSynth is supported in Avidemux starting from version 2.2 both for windows and linux (through Wine). discussion (http://forum.doom9.org/showthread.php?t=111115). You will need avsproxy.exe for this (which is based on avsyuv). Avidemux can be downloaded here (http://fixounet.free.fr/avidemux/). More info can be found here (http://www.avidemux.org/pun/viewtopic.php?pid=12125#p12125).

- Visual Editor for AviSynth (vion11) (http://forum.doom9.org/showthread.php?s=&threadid=68392) The sources can be obtained here (http://forum.doom9.org/showthread.php?s=&threadid=75612).

- Avisynth Studio v1.2 Beta (OpenSource Avisynth NLE; teejee2008) (http://forum.doom9.org/showthread.php?t=150873).

- AvsTimer (by kassandro) (http://forum.doom9.org/showthread.php?s=&threadid=56090) A small filter with virtually no overhead, which allows one to measure the performance of plugins or groups of plugins.

Delphi:
- asif.dll (http://forum.doom9.org/showthread.php?s=&threadid=92056). delphi application (and maybe more application) to link with avs 2.55 directly.
- Myrsloik ported avisynth_c to pascal (delphi) which enable you to write plugins in Delphi/Pascal: http://forum.doom9.org/showthread.php?t=98327, http://forum.doom9.org/showthread.php?t=106125&page=3.

Purebasic:
http://forum.doom9.org/showthread.php?t=126530 which enables you to write plugins in PureBasic.

NET:
http://forum.doom9.org/showthread.php?t=144663: AvsFilterNet enables you to write plugins in .NET.

Gstreamer:
Wrapper element for AviSynth filters for GStreamer: http://forum.doom9.org/showthread.php?t=146518 http://gstreamer.freedesktop.org/wiki/AviSynth

Java:
JAviSynth is a wrapper library that allows AviSynth to be used in the Java programming language. Through JNI, it provides access to the input and video processing capabilities of AviSynth. Videos and scripts can be opened, manipulated and viewed. Sorry sound playback is not available yet. http://sourceforge.net/apps/trac/javisynth

A modified version of v2.55 which support direct stream copy where possible: DSynth (http://forum.doom9.org/showthread.php?s=&threadid=71482).

A (free) replacement of the avi-wrapper Link2 appeared: makeAVIS (by Milan) (http://cvs.sourceforge.net/viewcvs.py/avisynth2/avisynth/distrib/): get ffvfwAVIS.exe from that page; discussion (http://forum.doom9.org/showthread.php?s=&threadid=49964).

AviSynth compatible frameserver (import) for PluginPac frameserver (by Satish Kumar) (http://www.debugmode.com/pluginpac/frameserver.php): For frameserving from SonicFoundry Vegas (and earlier Vegas Video/VideoFactory versions), Adobe Premiere or Ulead MediaStudio Pro to AviSynth. discussion (http://forum.doom9.org/showthread.php?s=&threadid=51242). 64 bit version: advanced frameserver (http://sourceforge.net/projects/advancedfs/).

AviSynth under Linux/Wine (yes AviSynth v2.56 works too): Discussion (http://forum.doom9.org/showthread.php?p=746967#post746967).

AviSynth Highlighter Plugin (by LigH) (http://forum.doom9.org/showthread.php?p=726637) for Context Text Editor.

DependencyWalker: utility to detect missing dlls: http://forum.doom9.org/showthread.php?p=696317#post696317

PathCopyEx: A small shell extension that adds "Copy Path to ClipBoard" to your right click menu. Makes it so much easier when you're working on an AVS script and need to point to new files and plugins: http://www.mlin.net/misc.shtml

ShellMenuView: BTW, if you're tired of too many apps stuck in your shell menu when you right click, this app will easily disable the stuff you don't want: http://www.nirsoft.net/utils/shell_menu_view.html

jorel
8th November 2004, 00:02
http://img123.exs.cx/img123/249/goldmedall.jpg

great sticky Wilbert.
congrats! :)

dano1
22nd November 2004, 22:57
can't download limitedsharpen plugin from Avisynth.org. I'm referred back to the doom9 thread. Where else can i find it? Or maybe i'm trying to save wrong?
TIA, danny

E-Male
23rd November 2004, 13:20
http://forum.doom9.org/showthread.php?threadid=84196
3rd post
copy the text
it's a function, not a plug-in

unmei
24th December 2004, 15:15
there is a new version of PicSubU (http://homepage.hispeed.ch/mieru/etc/picsubu_test_4.rar).

It's still called "test", but i hope the bugs are now all fixed (not counting possible problems in the usf rasteriser as that is a work-in-progess for probably a couple of months to come..)

OT: that's my child, not Kurtnoise's :)

Wilbert
24th December 2004, 15:54
My french is very bad, so I didn't bother to read everything carefully :)

btw, what happened to the french forum unite-video.com ? I can't access it anymore.

unmei
24th December 2004, 21:13
i don't know, i wasn't reading that..
i assume it's the place the link in the list pointed to?
i got redirected when i clicked that today, but i couldn't find the post in the new place (it was there a week or so ago) so i think the redirection points to something completly different(?)..

[edit] in the post there wasn't mentioned explicitly that the filter is from me anyway - that's only in the rar and derivable from the fact kurtnoise quoted a part of the help with "unmei wrote" :)

vcmohan
25th December 2004, 03:56
I have authored a transition plugin TransAll(which has over 25 functions) , a Effects Plugin EffectsMany ( having over 25 functions) and a Animated Album plugin HollywoodSq(3 functions) for Avisynth and are available at neuron2 site. Do I need to put up a note here for each of the plugin functions?

Wilbert
25th December 2004, 17:06
@vcmohan,

Yes, that would be great! Then I will merge it with the first post.

vcmohan
29th December 2004, 11:59
Originally posted by Wilbert
@vcmohan,

Yes, that would be great! Then I will merge it with the first post.
You have asked for it! Below is the Transall plugin writeup. I will putin the EffectsMany and Hollywoodsq plugins later.

TransAll plugin for Avisynth. This plugin is available for down load at http://www.avisynth.org\vcmohan[\url] and at [url]www.avisynth.org/warpenterprises web site , without any warranties in a as is state and is free to use. The down load file consists of the plugin dll and a usage description document in word format. This plugin has at the moment 25 functions. Since each function parameters can be chosen over 150 variations of the transitions can be obtained. During the transition the audio of the Left Clip gradually fades away while simultaneously audio of Right Clip fades in.

. The plugin dll file may be kept in the avisynth2.5 plugin directory for automatic loading If placed in any other user directory, then a load plugin call in the script is required. The two input video files, overlap in number of frames are the first three parameters which must be specified for these functions. All other parameters have default values for ease of use.
The names of the functions and a brief description of the action are as follows:


1. TransAccord. Left Clip opens out revealing the Right Clip or the Right Clip closes over the Left Clip in an Accordion Type folding. Single or Twin sections, open or close in vertical or horizontal direction can be opted.

2. TransCentral. Right (second) clip emerges from left clip or left clip disappears into Right clip. While emerging or disappearing the frame is resized to fit and or rotated by desired number of turns clock or anti clock wise.

3. TransCrumple. This function crumples or fanfolds (as one does with paper) Left Clip over the Right Clip thus revealing Right Clip or uncrumples (unfolds) Right Clip over Left Clip thus masking Left Clip.

4. TransDisco. Right (second) clip emerges over the Left(First)clip or the Left Clip disappears into Right Clip as circular Disks and rotate during transition. Radius of discs, Emerge or disappear and number and direction of rotation are options.

5. TransFlipPage. Left (first) clip is flipped
either left or right or up or down as viewing in an album
revealing Right Clip

6. TransFlipTurn. Right Clip (the second Clip) emerges flipping vertically and horizontally and rotating while gradually replacing the Left Clip. The number of times to flip horizontally, vertically and number of turns to effect in clock or anticlockwise are other parameters. Vertical and horizontal flips acan be considered as rotations about x and y axis, while turning is around z axis and therefore this is a 3d rotation transition.

7. TransFunnel. This function funnels out(wraps around a funnel shape) the Left Clip (the First Clip) and reveals the Right(the second) Clip while moving in any of the 4 directions.

8. TransMarbles. Over Left Frame, Right Frame appears as gradually enlarging circular. Magnification in the disks produces the effect of viewing through glass marble. If drop is true the magnification in the discs vary from center to edges, otherwise remain constant through. Radius of discs, magnification and whether drop effect is required can be specified.

9. TransPaint. This function, from pieces of Right Clip frame, builds a fence or a brick wall or paint with brush strokes or draws rings over left clip and completes the build by the end of transition. May be TransBuild would be a more appropriate name. The style of build can be specified.

10. TransPeel. Left (first) clip rolls and optionally pulls out revealing Right Clip. The roll is given a center shading if shade is +ve number, or edges shaded more if shade is a –ve number. If shade is zero no shading is done. If pull is true the roll remains stationary and image is pulled into the roll. Otherwise the roll moves in any of the four directions.

11. TransRipple. A gradually increasing water ripple covers fully the Left Clip by 1/3 of transition (overlap) length. Thereafter the Right Clip emerges in the center as a growing Ripple fully covering frame by 2/3 of overlap length. This ripple then subsides (withdraws) revealing the Right Clip. The wave length lambda and wave height can be specified.

12. TransScratch. Right (second) clip gradually is revealed by scratching the left Clip image, in a desired style similar to scratch cards. Falling rain, tv noise, water fountain, laser beams, dust storm, O Rings, horizontal lines, vertical lines and merging are the styles currently available.

13. TransShuffle. Left (first) clip moves out on top, while Right Clip moves from below in opposite direction halfway, then Right clip moves back to the top position while left clip slides under in opposite direction resembling movement of shuffling of cards. Four directions of shuffling are possible.

14. TransSlantRollIn. Right (second) clip rolls in along diagonals as a carpet over the Left(First)clip, masking it. Roll diameter, style of shading and the direction (four) of rolling are the parameters that can be specified.

15. TransSlantRollOue. Left (first) clip rolls out along the diagonals as a carpet over the Right (second) clip revealing it. Roll diameter, style of shading and the direction (four) of rolling are the parameters that can be specified.

16. TransSlantWipe. Right (second) clip wipes over the Left(First)clip along the diagonal in the direction specified.

17. TransSlideIn. Right (second) clip slides in over Left Clip. If center is selected then leftt clip disappears towards the center of Right Clip shrinking in all directions. Any of 8 directions or center can be opted.

18. TransSlideOut. Left clip slides out in the selected direction revealing Right Clip. If center is opted, then the right clip gradually emerges out from frame center.

19. TransSprite. Right (second) clip squeezes out left clip thereby appearing like a rotating sprite, exhibiting different faces. Movement can be specified as any of four possible directions.

20. TransSwing. Right (second) clip swings in or the left clip swings out as doors hinged at corners, thereby fully revealing or assembling the Right Clip. The number of doors can be one (single door attached at the selected corner swings out or in), two (twin doors hinged at opposite corners swing) and four (4 doors each at a corner swing).

21. TransSwirl. A gradually increasing swirl that covers fully the Left Clip by 1/3 overlap length is created. Thereafter the Right Clip emerges in the center as a growing Swirl fully covering frame by 2/3 overlap length. This Swirl then subsides (withdraws) over the Right Clip thus revealing it. The swirling can be clockwise or anticlockwise. The coarseness of depicting swirl can be specified.

22. TransTwinDoors. Twin vertical or Horizontal doors made out of Left Frame open or those made out of Right Frame close revealing Right Frame.

23. TransVenetianBlinds. In this transition vertical or Horizontal slats open (as Venetian blinds do) revealing Right Frame. Instead of linear blinds, checks or diamond pattern can also be opted. Pattern width can also be specified.

24. TransWeave. Interleaving together thin strips of Right frame over the left frame the transition occurs. The interleaving styles options are horizontal, vertical, jigsaw puzzle and basket weave.

25. Right Frame wipes away Left Frame in any of the possible four directions.

stickboy
29th December 2004, 19:23
Originally posted by vcmohan
TransAll plugin for Avisynth. This plugin is available for down load at www.neuron2.net web site , without any warranties in a as is state and is free to use.I can't find it. I don't see it under Hosted or under Other. Where is it?

katjarella
29th December 2004, 19:42
Originally posted by stickboy
I can't find it. I don't see it under Hosted or under Other. Where is it?

TransAll (http://www.avisynth.org/warpenterprises/)(transition plugins): transall_25_dll_20041113
and my old Test(25.04.04):TransAll For Avisynth (http://mitglied.lycos.de/creyskull/scenetransition.htm)

vcmohan
30th December 2004, 13:30
Sorry I made a mistake. The url of the site where this TransAll.dll plugin is hosted is http://www.avisynth.org/warpenterprises I have revised a few of the functions and also modified the documentation and just today sent the new zip file to warp for replacing.

edit Wilbert: corrected url

vcmohan
27th January 2005, 12:31
The synopsis of functions of the EffectsMany plugin follows. The Zip file now is large as I included example images for many functions:-
This Plugin is hosted at www.avisynth.org\vcmohan and also at www.avisynth.org\warpenterprises and is available for free download and usage in the as is condition without any warranties. As on date there are 27 functions in this plugin.. The zip file consists of a usage descriptive document and the plugin dll.
1. EffectBinoculars: This creates twin circular discs with identical magnified image from an area situated midway between the discs.
2. EffectConez: The image is wrapped over either a vertical or a horizontal cone, top and base diameters of which can be specified. The image is either fully wrapped from start to end or progressively the cone takes shape.
3. EffectDiscoLights: Multicolored light spots flash and move over the image. Parameters control the size, direction, type and speed of movement of light spots.
4. EffectLens: A circular area is magnified with uniform magnification or with magnification varying from center to edge. The center of the disc can be moved during the effect..
5. EffectFiguredGlass: number of circular discs with image inside distorted spherically giving impression of looking through a figured glass.
6. EffectLineMagnifier: Magnifies either a vertical or Horizontal strip of image. The magnifier can be moved across image.
7. EffectRain: Adds rain to the image. The rain can be light, medium, heavy, increasing from light to heavy or decrease from heavy to light. The color of rain, their opacity can be specified. The direction of rain fall can be varied during the effect.
8. EffectRainbow: Adds a rainbow to the image centered at the specified coordinates and with a given radius. The center coordinates and radius can be linearly varied in the range. Left and right cut off of rainbow display can be specified and varied during effect.
9. EffectRipple: A ripple is created over the image centered at the specified coordinates and growing up to given radius.
10. EffectRotation: Rotates the image or part of it with given radius through given angle. Can be used to rotate scanned images or as an effect.
11. EffectSnowStorm: Swirling white particles of snow are created on the image. The snow can be either light, medium or heavy or increase from light to heavy or decrease from heavy to light.
12: EffectSnowFlakes: creates big or small size snow flakes that drift in wind and fall down. The dense (ness) of snow, drift %age, the falling speed (%age) and whether big or small flakes can be opted.
13. EffectSpotLight: This function illuminates a specified circular disc area. The illumination (color and strength) can be specified and remains constant. The spot center moves during effect.
14. EffectStream: This function creates the effect of a flowing water stream across the image.. The stream flow can be either vertical or horizontal. Freq of flow, Stream breadth, wavelength, axis (stream axis) coordinate are the parameters.
15. EffectSwirl: Swirls the image centered at the specified coordinates and up to a given maximum radius. The swirl starts from zero and increases to full in the first 1/3 of frames, remains at this size for the next 1/3 and reduces to zero in the last 1/3 length of clip.
16. EffectUnderWater: This function creates the effect of the image floating on a pool of water. Slowness of sashay, number of cells and wave height as %age of cell dimension are the parameters.
17. EffectDistort: This function distorts the image. The distortion can be either vertical or horizontal.
18. EffectFireWorks1: This function generates multi colored light beams in parabolic trajectories from given x and y coordinates.
19. EffectSunFlower: This function generates radially expanding colored light beams in the sky and which finally fall back as in the fireworks.
20. EffectFlowerpot: This function generates multi colored glowing embers in parabolic trajectories from given point, resembling Flower Pot Fire Works (as popularly known in India).
21. EffectSparkler: generates multi colored flashing flowers around a thin pencil like object known as the Firework Sparkler. The sparkler burns from start to end during the range of the effect.
22. EffectRockets: This function generates rocket fire works firing off at regular intervals and displays the glowing embers.
23. EffectFlashes: During the first seconds generates smoke filled area. Thereafter a series of light flashes occur in the smoke filled portion. This effect resembles Ariel flashing fire works.
24. EffectBalloon: This function creates a balloon of desired color and opacity and which hops.
25. EffectBubbles: creates soap bubbles in myriad colors emanating at selected point, that travel in different paths and speeds.
26. EffectTreasureHunt: The image is scanned or fully processed using the code and sieve parameters to bring out hidden features. This is just for fun.
27. EffectFog: Creates fog on the image.
28. EffectTVLook: This function creates an old crt TV set type image from the second clip and places at the specified location and having the specified size.

vcmohan
3rd February 2005, 10:49
Reform Plugin:
Available at http://www.avisynth.org\vcmohan[\url] and at [url]www.avisynth.org/warpenterprises a freeware.

When shooting a video of a painting or a photograph if the camera is not exactly centered the resulting image is skewed. A rectangle becomes a quadrilateral. Correction of this distortion is possible with this plugin. This has two functions: Deskew and skew. As the name suggests Deskew corrects a quadrilateral to a rectangle while skew reverses this. It is essential to get the quadrilateral corner coordinates. I managed to get by first using image writer and opening in Irfanviewer. There may be a faster and better way, I hope.
The documentation includes sample images and a quality indication.
As I had to use this to correct my video image I thought others may also need it some time.

edit Wilbert: corrected url

Richard Berg
16th February 2005, 23:10
Suggested links to add:

Script functions:
- mfToon
- mfRainbow
- IIP
- QMF
- LimitedSharpen
- MvBob
- YLevels

Plugins:
- MaskTools
- MvTools
- fft3dGPU / AviShader
- BlendWeight

Fizick
23rd February 2005, 22:49
Thanks to Richard Berg and me :), now we have a mirror of my site with my Avisynth plugins at
http://www.avisynth.org/fizick

vcmohan
27th February 2005, 09:00
Grid Plugin a freeware, available for download at http://www.avisynth.org/vcmohan[\url] and at [url]www.avisynth.org/warpenterprises
Grid plugin creates a rectangular grid over the image in the range of specified frames. Grid intervals, line colors etc can be varied. Since in Reform plugin I found great use for this , this is also included as a function in Reform package.


I mentioned in an earlier post on Reform plugin that I needed a tool to measure coordinates on a frame and I had to resort to a round about method. I could not find a simpler route so I authored this plugin Grid. Hope some others may find use.

vcmohan
14th April 2005, 04:20
A new plugin FanFilter is now available for free download athttp://www.avisynth.org/vcmohan[\url] and at [url]www.avisynth.org/warpenterprises . This plugin tries to remove regular frequency interference in video (sometimes seen while capturing a weak TV signal) that appears as inclined bars on image. There is a discussion on this in this forum under topic "How to remove diagonal bars from video?"

Wilbert
1st May 2005, 21:52
I've added a Japanese plugin section (and links to descriptions at avisynth.org)!

Karyudo
27th May 2005, 20:40
Wilbert, I'd like to take a crack at providing better translations of the Japanese instructions for these filters. However, there's no reference to the original Japanese locations. Could you add that to the AviSynth wiki, so that I (or anyone else who knows some Japanese) might be able to help out?

Wilbert
2nd June 2005, 20:53
Yo, your pm box is full :)

Original japanese locations (docs are included in the zip files):

GPU_001.zip (by thejam79):
http://www.avisynth.info/?plugin=attach&refer=%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6&openfile=GPU_001.zip

KillPulse (i think you already found this one):
http://www.avisynth.info/?plugin=attach&refer=%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6&openfile=killpulse_20050415.zip

DePulse:
http://dv-and-movie.hp.infoseek.co.jp/tipsxxx/depulse.zip

pa:
http://www.chiyoclone.net/dl/main/pa_20050322.lzh

cc:
http://www.chiyoclone.net/dl/main/cc_20040522.lzh

a60224:
http://www.chiyoclone.net/dl/main/a60224_20040315.lzh

Its:
http://members.at.infoseek.co.jp/kiraru2002/data/Its_v0_7.zip

DeDot (and old one):
http://nullinfo.s21.xrea.com/cgi/counter/count.xcg?down=DeDot_YV12_0002.zip

IT_YV12 (and old one):
http://nullinfo.s21.xrea.com/cgi/counter/count.xcg?down=IT_YV12_0103.zip

I guess you missed the links when browsing

http://www.avisynth.org/JapanesePlugins

Btw, do you know how to open lzh files?

edit: i added some filters. I hope you don't mind :)

references:
http://members.at.infoseek.co.jp/kiraru2002/
http://www.chiyoclone.net/
http://dv-and-movie.hp.infoseek.co.jp/tipsxxx/
http://www.avisynth.info/?%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6
http://nullinfo.s21.xrea.com/

Leak
2nd June 2005, 21:33
Btw, do you know how to open lzh files?

WinRAR or TUGZip should both be able to open LHArc (=LZH) files...

np: Luke Vibert - Flyover (Lover's Acid)

Karyudo
3rd June 2005, 01:17
Yo, your pm box is full :)

I see that. I didn't know it could fill up! First time I've had to worry about that since joining.

I'll get to work on some translations.

vcmohan
17th September 2005, 04:26
I have just posted 5 new plugins along with their documentation. A short description of them and functions included are as follows:
ColorIt (http://www.Avisynth.org/warpenterprises/#ColorIt) :- This plugin has a collection of 14 functions which are useful in coloring a black and white image or recoloring a colored image. The functions in this plugin are:

1. GaussBlur: The input image, grey scale or color, has noise and removing it enables better mask generation. GaussBlur smoothes image by convolving image with Gaussian separable coefficients.
2. MaskMaker. Creates a white or black mask depending upon the grey scale values of the image.
3. EMarker. Creates a white or black mask using various edge detection methods.
4. Morpher. Erosion, dilation, opening, closing thinning, salt & pepper,ridges and valleys functions are included. Some troublesome parts in a mask like thin strands connecting or radiating from objects etc can be got rid off by these standard morphing techniques.
5. SharpEdge. Creates pixel wide edge masks(required for coloring) or creates gradient image (useful for watershed segmentation).
6. Shift. Shifts the grey value of all pixels in an enclosed area by an amount.
7. Stretch. Stretches all values in an enclosed area by a percentage.
8. ColorDrops. Color fills masked areas, given seed points.
9. ColorLines. Colors pixel thin lines with given color
10.ColorBrush. Color fills all white (or all black) areas in a mask along a line.
11.Inlay. Color fills all areas specified by a combination of lines and masks
12.Drawlines. Draws lines on frames for limiting colorfill and other functions.
13. Pallet. While preserving original Grey scale, the finally seen color may appear to be different to that specified. This happens as only the Chromacity values of the given color is used. To get a feel of the actual values, this pallet function is useful. Also useful for cleaning input clip for watershed or recoloring work.
14. CrossFill. Using two masks coloring is done depending upon logical AND, OR and XOR values.

AdaptiveMedian (http://www.Avisynth.org/warpenterprises/#AdaptiveMedian) : This plugin function filters noise by finding minimum, maximum and median values of a local grid and expanding to a limiting maximum size for for getting better statistics.Useful for filtering salt and pepper noise.

DeNoise (http://www.Avisynth.org/warpenterprises/#DeNoise) : This plugin function, using global and local variance adaptively filters the noise from image. Also useful for cleaning input clip for watershed or recoloring work.

Watershed (http://www.Avisynth.org/warpenterprises/#Watershed) : This plugin function treating the image values as elevation, segments the image by drawing watershed lines and individual basins.

NeuralNet (http://www.Avisynth.org/warpenterprises/#NeuralNet) : This plugin implements a 3 layer classification type Artificial Neural Network. Has been tested on an edge detection task.

vcmohan
5th October 2005, 04:31
I have just posted a new plugin for Avisynth HistogramAdjust (http://forum.doom9.org/showpost.php?p=1741646&postcount=1)

This as the name implies adjusts the histogram of a frame by either equalization, or by matching or by duping with another histogram. For match or dupe options, histogram can be input as a table of values or extracted from a frame of any clip.

Full frame as well as windowed options are available.


The plugin works for RGB, YUY2 and Planar formats only.

Guest
5th October 2005, 05:08
Your work would be more valuable to the community if you would post the source code.

vcmohan
6th October 2005, 03:59
Your work would be more valuable to the community if you would post the source code.
It was included.

Guest
6th October 2005, 12:41
Oh, thanks. Not to be picky, but perhaps you can release code for all your filters?

Fizick
6th October 2005, 22:03
DeNoise!
At last somebody dared to use this "very informative" name! :)

vcmohan
7th October 2005, 03:57
Oh, thanks. Not to be picky, but perhaps you can release code for all your filters?
Yes there are a few for which I did not include source code, mainly because I have a few ideas to make the functions better and it takes some time to make the changes. Meanwhile I do get ideas for a new plugin and distracted. For instance the NeuralNet at present works with Logistic activation function only. I am working to include tanh, gauss and elliot sigmoids. Once I complete that I will post it. So also for others.

Guest
7th October 2005, 14:43
Thank you. Your contributions to the video community are appreciated!

vcmohan
26th October 2005, 06:03
The NeuralNet (http://www.avisynth.org/warpenterprises/#NeuralNet) plugin is revamped. It now includes NeuralNetBP and NeuralNetRP. BP is for standard back propogation and RP is for Resilient Propogation RPROP (after Reidmiller and Braun). These functions now have option for logistic, alogistic, tanh, atanh, gauss, elliot and evero sigmoids for activation. Both are for classification. The first frame output has diagnostic plots of histogram and error (or any other parameter opted) to be displayed with iteration during training.
The source files are included along with compiled dll and usage html documentation.

Poutnik
29th October 2005, 17:40
AdaptiveMedian (http://www.Avisynth.org/warpenterprises/#AdaptiveMedian) : This plugin function filters noise by finding minimum, maximum and median values of a local grid and expanding to a limiting maximum size for for getting better statistics.Useful for filtering salt and pepper noise..
It looks like similar to Removegrain, extending size behind 3x3 grid....

vcmohan
6th March 2006, 04:03
FQuiver :A new plugin isavailable for download . This plugin works in frequency domain, and has two functions FQ1Row and FQ2d.

1. FQ1Row filters data row by row of image using one dimensiona fft. It has a number of gaussian, butterworth filters which can be cascaded. In addition a filter can be custom designed.

2. FQ2d transforms whole image using 2d fft. It has Gaussian and butterworth filters.

Documentation includes some examples of application. and filters.

discussion (http://forum.doom9.org/showthread.php?t=107725)

edit mod: fixed link

Fizick
11th March 2006, 10:36
where is xStatImport plugin (by sh0dan) source code?

Wilbert
11th March 2006, 14:17
Just send Sh0dan a pm. I guess i forgot to download it (before he changed from provider) and include it in the rest of the package.

Kostarum Rex Persia
6th July 2006, 01:05
From where I can download mergechroma denoise filter?

Boulder
6th July 2006, 08:12
MergeChroma is an internal Avisynth function. It's not a denoiser by itself.

Kostarum Rex Persia
6th July 2006, 17:51
I don't know, but when I creating AVS script in MeGUI, and want to choose denoise, under "little" value, MeGUI shows that I need mergechroma denoiser.

foxyshadis
6th July 2006, 20:01
It's a utility function that you can use with real denoisers (or sharpeners, or anything else) to apply different settings to luma and chroma. It has nothing to do with denoising on its own.

Wilbert
23rd July 2006, 12:03
added:

AviSynth Front is a frontend for AviSynth 2.5. It is not intended to be a full featured editor for AviSynth scripts, but rather focuses on ease of use and simplification of everyday tasks. It uses templates that you assemble into a script and then apply to a video or a list file.

You can download it from: http://users.volja.net/arakar/andrej/software/avsfront23.zip

vcmohan
31st October 2006, 12:39
I have added two new plugins for image enhancement. These are :

1. SegmentedAmp : using watershed segmentation to deliniate basins, smoothing is done within basins. Also visual sharpening can be obtained by accentuating boundaries of basins.

2. ReTouch Using watershed basin deliniation and flood fill algorithms, individual basin amplitudes are stretched or shifted or highest value or lowest value of basin substituted. With this image enhancement or a transition effect can be got.

vcmohan
4th November 2006, 04:42
One more plugin added.
DeSaltPepper Based on morphology technique, salt and pepper type impulsive noise is deleted. Any point which has a value above or below the average of nearest neighbours plus tolerance is regarded as noise and replaced by either average or lowest or highest of neighbourhood values. In case of average value replacement a feedback processing is provided. This feedback process seems to work only for YUY2 and YV12 formats but not for RGB formats for some reason unknown to me.

vcmohan
6th January 2007, 03:59
For removal of mpeg noise I have been working with several ideas. My one of concerns is exissting ones are slow and are very harsh on the chroma. I have the following new plugins which are designed to be gentle.
NirMalam: An adaptive noise attenuator using the global and local statistics operates in RGB, YUY2 and YV12 formats. Options to select any chroma or luma for filtering is available. NirMalm in Sanskrit means Clean, pure etc.

DeVeed: This plugin tries to predict pixel value and filters the difference between the predicted and actual value. Operates on RGB, YUY2 and YV12 formats.

WeedFN; This plugin examines the smoothness of the image along the horizontal and vertical and filters noise as per the limits provided. Works in RGB32, YUY2 and YV12 formats.

vcmohan
10th January 2007, 10:10
FQSharp : -A new plugin to deconvolve ( deblur or restore) images that have blur due to movement of camera while shutter is open. Requires any one of libfftw3f-3.dll or fftw3.dll or fftw3f.dll to be present in the path (system32 folder).

This has 3 working functions:
FQBlur :- blurs an image either in an camera out of focus style or in motion blur style. The blur can be localised to be within rectangular or oval shaped window, which in turn can linearly translate in the clip.

FQVisual:- Blur present in a rectangular window is analysed and results displayed for visually estimating the type and amount of blur present.

FQRestore:- Given the type and amount of blur, inverts in frequency domain to restore the image. Parameters to limit ringing and instability can be specified.

Discussion (http://forum.doom9.org/showthread.php?t=120496) thread.

vcmohan
18th April 2007, 02:39
TCNAMPAdjust:- plugin developed for a specific problem of an user with his telecined data. He was having blacks becoming greyish besides a trapezoidal distortion. This plugin corrects the grey.

Fizick
13th December 2007, 13:37
avisynth news
http://niiyan.net/?AviSynthNews

arakar
23rd January 2008, 09:56
A new version 2.4 of AviSynth Front is available. It adds proper look and feel under Vista and HD video support.

AviSynth Front is a frontend for AviSynth 2.5. It is not intended to be a full featured editor for AviSynth scripts, but rather focuses on ease of use and simplification of everyday tasks. It uses templates that you assemble into a script and then apply to a video or a list file.

Note that the link has changed:
http://arakar.ifastnet.com/andrej/software/

Andrej

vcmohan
29th January 2008, 04:13
FQFocusDefocus : This new plugin operates in frequency domain and either (re)focus a mildly defocussed image or defocus an image. 3 patterns of PSF are provided. Additional parameters minimize ringing.

vcmohan
11th March 2008, 09:55
Seamer (http://www.avisynth.org/vcmohan) :- Seamer resizes an image by identifying seams through different metrics and carves them out. It has two functions TRSeamer and WSSeamer. Both work in unsupervised mode only.

Seam carving is unlikely to be used in regular video processing, but due to enormous interest generated an attempt is made. These are very slow.

Works in RGB color space only.

Discussion here (http://forum.doom9.org/showthread.php?t=135735)

vcmohan
20th March 2008, 11:47
DeBarrel: This plugin works in RGB format only, and corrects for barrel type or pin cushion type of distortion. Such distortions are usually seen on images taken with extreme wide angle or telephoto. Mostly these distortions are noticeable on still images.

Discussion (http://forum.doom9.org/showthread.php?t=136083) thread.

Wilbert
28th March 2008, 19:04
Bilateral filter on GPU: http://forum.doom9.org/showthread.php?t=136370

Gavino
9th July 2008, 23:28
GRunT is a plugin which makes the Avisynth run-time environment (http://avisynth.org/mediawiki/Runtime_environment) 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

Details and download here.

vcmohan
17th July 2008, 11:14
ReTarget:- ReTarget plugin is a newly developed plugin which through seam carving downsizes a video for the target display device. This has facility to use either forward or backward energy criteria and for marking upto 5 areas in the image for protection or erasing.

Discussion (http://forum.doom9.org/showthread.php?t=139583)Thread.

vcmohan
3rd August 2008, 14:57
Spinner: This plugin rotates a frame or selected part of it through any desired angle. The rotation axis coordinates and angle of rotation can be in floating point. Option for varying parameters linearly along clip and specify a rectangular area to undergo rotation is available. Precision may be nearest neighbour, bilinear Lagrange and Lanczos interpolation.
RGB, YUY2 and YV12 formats are processed.
Discussion (http://forum.doom9.org/showthread.php?t=140019) thread

vcmohan
17th August 2008, 10:29
Perspective : A plugin to correct for distortion caused by camera not being square with image plane. The distortion transforms a front view to a perspective view. This can be corrected and image brought back to front view by this plugin. It can also be used to transform a front view image to a perspective view. Works in RGB format only.

Discussion (http://forum.doom9.org/showthread.php?t=140367)thread.

vcmohan
4th September 2008, 10:21
Unfurl : This plug in stitches frames into a panorama excluding the overlap. Specially developed for a case where camera is stationary filming a canvas which is rolled one end and unrolled from other end.
Discussion (http://forum.doom9.org/showthread.php?t=140854) thread.

-=lDooml=-
19th September 2008, 13:59
i am new to the forum
just start using it
please anybody can redirect me where is limited sharpen fatser and is it good to use with fft3d
i want plugin
please redirect or give here

vcmohan
30th September 2008, 09:55
FXpanse (http://avisynth.org/vcmohan/FXpanse/FXpanse.html) : This plugin creates a super scene out of a panned video. Panning can be in any direction.
Discussion thread here (http://forum.doom9.org/showthread.php?t=141545)

vcmohan
11th December 2008, 11:10
Peep is a plugin to display in an elliptical window image from a corresponding part of a different clip. Varying Blending, tapering off of blend are possible in addition to location and size of window.

Discussion at http://forum.doom9.org/showthread.php?t=143432

Gavino
19th June 2009, 09:28
GScript is a plugin that extends the Avisynth scripting language to provide additional control-flow constructs:
- multi-line conditionals (if-then-else blocks);
- 'while' loops;
- 'for' loops.

Rather than trying to simulate these constructs with functions, GScript effectively extends the language syntax, making it easy to use the new constructs in a natural way and in arbitrary combinations.

Details and download here.

jj30
10th August 2009, 13:21
added:

AviSynth Front ....

You can download it from: http://users.volja.net/arakar/andrej/software/avsfront23.zip

Anyone have a mirror? I am new enough to AviSynth to really want to take this for a spin ... thx.

Wilbert
10th August 2009, 17:49
http://rapidshare.com/files/265873478/avsfront23.zip.html

tin3tin
11th September 2009, 22:28
Lua and Cairo in Avisynth: Overlua (http://forums.animesuki.com/showthread.php?t=52757)

StainlessS
7th December 2009, 06:11
Hi Wilbert,

New version Filter ExBlend() v1.02b. Date 07/Oct/2010

New Thread Here: (http://forum.doom9.org/showthread.php?t=157337) or download via sig.

YUY2, YV12 Progressive source.

Avisynth v2.5+ filter for detecting pairs of blends and replacing them with
a pair of IDENTICAL un-blended frames. (Requires MultiDecimate decimation).

The filter is specific to a particular type of blending, where the source
was 24 FPS Progressive, and converted to 30 FPS (eg Film to Video CD) by
blending as in below:-

A B C D # 24 FPS Source (6 blocks of 4 frames = 24 FPS)

A B cb cd D # Blended to 30 FPS (6 blocks of 5 frames = 30 FPS)

The original frame C was thrown away, leaving a repeated sequence of 3
good frames and 2 blended frames. The framerate may then have been
slowed by 0.1% to 29.97 FPS for NTSC (American) color TV standards.

The filter will also deal with similarly blended 25 FPS to 30 FPS video
in which case the blending would be as below:-

A B C D E # 25 FPS Source (5 blocks of 5 frames = 25 FPS)

A B cb cd D E # Blended to 30 FPS (5 blocks of 6 frames = 30 FPS)

ExBlend() recovers the frame that was thrown away, from the pair of blends and
does not rely on the clip staying in sequence. It is quite easy to set up,
(works pretty gud out of the box).

StainlessS (Stainless Stephen)

StainlessS
26th February 2010, 22:07
ColorYUV2() v1.0 Chroma Gamma Fix by Stainless Stephen (StainlessS on Doom9)
Creates DLL as ColorYUV() but named ColorYUV2().

This plugin (ColorYUV2) is a slight modification of the great ColorYUV.

ColorYUV() does not actually implement chroma Gamma correction, and so the example
in Avisynth docs has never worked (Still does not as of v2.5.8). It is taken as a
parameter (gamma_u & gamma_v) and stored somewhere, but pretty much forgotten after that.
For chroma, a large +ve gamma produces an input/output graph shape a bit like an S
(the top half looks just like large +ve luma gamma), sort of like this:-
_
/
_/
It pushes chroma outwards from the mid chroma point (128), but in smaller steps the
further away from the mid point it orginally was.

and a large -ve gamma like this:-

__/
/
It pulls chroma inwards towards the chroma mid point, but in bigger steps the further
away from mid point it originally was.

Try out large (eg +100) for one or both gamma_u and gamma_v for some nice effects that
you have never got before from colorYUV().


ColorYUV2(), Uses alternative text rendering method to render text for Analyze=true,
if you dont like this then just use coloryuv() instead.

ColoYUV2() is not meant as a replacement for ColorYUV(), mearly a stop gap for the
chroma gamma correction until the fix is implemented directly in Avisynth.


ALL Args (and most code) identical as Avisynth ColorYUV()

LINK DELETED

Link to anything ColorYUV2 now here (http://forum.doom9.org/showthread.php?t=156774)

Wilbert
27th February 2010, 00:57
ColorYUV() does not actually implement chroma Gamma correction, and so the example
in Avisynth docs has never worked (Still does not as of v2.5.8). It is taken as a
parameter (gamma_u & gamma_v) and stored somewhere, but pretty much forgotten after that.
There is not a good way to compute Y'Cb'Cr', since gamma is a RGB concept. See: http://forum.doom9.org/showthread.php?t=110439

StainlessS
27th February 2010, 03:59
@Wilbert,

This post can be deleted. Thankyou.

mantis2k
27th February 2010, 10:54
With ColorYUV2, I was able to increase the saturation on my blood red washed out source, using Gamma_u, but instead of the red coming back there is lot's of blue "sparks" (same with TMPGEnc YUV Gamma correction slider). Therefore, those new functions do seem useful, but there is always a trade off with any video treatment.

Gavino
27th February 2010, 12:31
It seems that I have stepped in something nasty, the developers seem not to want such a function. Perhaps I should make ColorYUV2(), go away. :)
The function you have implemented seems useful - perhaps you could just rename the parameters to something other than 'gamma'. ;)

StainlessS
26th March 2010, 04:08
@Gavino,

Have been a little busy of late, but renamed gamma_u and gamma_v to spow_u and spow_v.
(well, moved functionality to, rather than renamed). Also added args of ramp_u and ramp_v
which implement the identical equivalent of gamma_y for chroma. I managed to resist the
stong urge to call them gamma_u & v again. These two new ramp_x functions are intended
to allow non linear fixes for bad chroma, I thought it might be a good idea based on something
a fellow said in the link provided by Wilbert. Anyway, the eg ramp_u and spow_u can be combined
and together with off, gain, cont, can produce a lot of weird shaped graphs. Have also added
spow_y functionality, thought that it could not do any harm. Small problem though with spow_y,
if in range 16-235, mid point is not 128 but about 126, I have not bothered about this, dont seem
worth any worry. Could maybe mess with this based on whether coring or PC->TV were called for.
Also, PC->TV is actually done before number mangling is applied, to convert to 16-235 before eg
gamma_y does not seem correct in order to me. Would seem better to have TV->PC before and
PC->TV after mangling. (lut creation) Anyways, maybe you have some thoughts on the 126/128
thing or anything else here said. If you wanna see the ramp_x (gamma_y) and spow_x being
combined with off_x gain_x and cont_x, I've knocked up a small (8kb rar) ColorYUV2 graphing
program so you can better visualize the output (would be pretty impossible without it). Intend
to include this with next version of ColorYUV2(), also usable with standard ColorYUV(). Also have
nearly completed a Levels() grapher with arguments conversion to ColorYUV() style, will also include
that with upcoming version. EDIT:- Will also include VB source for both with ColorYUV2().
See below for ColorYUV2_Graf.EXE, 8KB Rar :-

EDIT:- Link Removed: see Post #69


May not be back for a few days, but eager to read any thoughts you have. :)

IanB
26th March 2010, 22:32
... It seems that I have stepped in something nasty, the developers seem not to want such a function. Perhaps I should make ColorYUV2(), go away. :)
Yes, something really quite icky, as I said in the referenced thread, "none of these functions are Gamma", I don't have a problem with applying power functions to chroma, I just have a problem calling it gamma.I managed to resist the strong urge to call them gamma_u & v again.That's the spirit ;)

SPOW is not a bad term, not so sure about RAMP though :confused:

Also the functions are not commutative, i.e. order is significant. Question is which way around is more useful. :cool:

StainlessS
26th March 2010, 23:12
@ IanB

Thanx for the reply:

not so sure about RAMP though

hows about 'rpow_u' rather than ramp, or do you have a better alternative?
('r' as it sort of looks like lower case r when + maximum)
would be nice to find out before I put my foot in it again.

pbristow
11th September 2010, 20:09
Hi! Regarding this one (mentioned in the first post, under "Japanese plugins":

[GPU_001.zip (by thejam79)]: GPU versions of several AviSynth plugins (GPU_BilinearResize, GPU_LanczosResize, GPU_Convolution3d, GPU_TemporalSmoother, GPU_ColorYUY2).

I can't seem to find an active source for this anywhere. Can anyone help?

Wilbert
11th September 2010, 23:04
Hi! Regarding this one (mentioned in the first post, under "Japanese plugins":

[GPU_001.zip (by thejam79)]: GPU versions of several AviSynth plugins (GPU_BilinearResize, GPU_LanczosResize, GPU_Convolution3d, GPU_TemporalSmoother, GPU_ColorYUY2).

I can't seem to find an active source for this anywhere. Can anyone help?

http://www.avisynth.info/?%A5%A2%A1%BC%A5%AB%A5%A4%A5%D6#x44606bb
http://www.avisynth.info/?GPU%a5%d7%a5%e9%a5%b0%a5%a4%a5%f3 (more gpu plugins)

pbristow
14th October 2010, 18:48
Thanks Wilbert! Gonna try them out this evening, I think. =:o}

Jenyok
23rd October 2010, 12:39
I am very sorry,
.
http://seraphy.fam.cx/~seraphy/progr...p_20080325.rar
403 Forbidden
Request : GET
Object : /~seraphy/program/WarpSharp/warpsharp_20080325.rar
.
Where can I download WarpSharp 2008 version ?
Please, put WarpSharp 2008 version to public file servers, such as "depositfiles", "rapidshare" and so on.
Thank you.

jmac698
9th December 2010, 23:47
Updated to 1.02 Dec 18/2010

Capture Glitch Analyzer Ver. 1.02 by jmac698 (glitchanalyzer.avs)
A video with pseudo-timecode is generated then analyzed to detect temporal capture problems such as duplicated, missing, or field-reversed frames

Why: Some capture cards drop or dupe frames with no other indication. This will interrupt pulldown sequences making IVTC impossible. It also affects various multicap techniques.

Update: I found the solution to the original problem; VirtualDub drops frames by default (and my last 5 years of captures are all ruined). Only the following should be checked:
correct timing
auto disable sync

Requirements: ColorMatrix (optional), only tested on AviSynth 2.58 (in some of my other scripts, 2.6 caused problems)


#Capture Glitch Analyzer Ver. 1.02 by jmac698 (glitchanalyzer.avs)
#A video with pseudo-timecode is generated then analyzed to detect temporal capture problems such as duplicated, missing, or field-reversed frames
#1.01: Bug Fixes; DarkBlue wouldn't join with Colourbars due to differing fps, undefined variable sep, more convenient video sources
#1.02: Proper fix for CreateSolidBackground fps (need 30000.0 to assume float)

#Why: Some capture cards drop or dupe frames with no other indication. This will interrupt pulldown sequences making IVTC impossible. It also affects various multicap techniques.

#Requirements: ColorMatrix (optional)

#Useful tools: AvsP, HCEncoder, VirtualDub

#Usage level: Diagnosis probably requires an intermediate level user familiar with encoding, capturing videos and script setup, and some data analysis skills.
# However, fixing diagnosed capture problems automatically may require advanced scripting knowledge

#Use:
#1. Modify this script to set mode to generate and type to "NTSC" or "PAL" then encode the resulting diagnostic video
# If encoding to mpeg2 use interlaced, top field first (e.g. in HCencoder)
#2. Capture the diagnostic video (e.g. in VirtualDub)
#3. Set mode to analyze, set the captured video filename and the timecode log output filename
#4. Run the analysis by playing back this script once (i.e., load the modified glitchanalyzer.avs into MediaPlayer and play)
#Load the resulting timecode.txt into a spreadsheet and
# note where the timecode skips or duplicates numbers (a perfect capture will count from 0 to 15 repeatedly). It is up to you to interpret this.
#The darkblue intro will read as constant 0, the lightblue outtro will read ideally as constant 15, but in reality will may be random, 0's or 15's. Adjust slicelevel in readtimecode or the value of lightblue or ignore.

#Problems:
#The timecode may not be decoded if the video is horizontally or vertically shifted beyond tolerance, and/or the video levels are beyond tolerance.
#It is up to you to shift, crop, and adjust levels as necessary.
#Glitches spanning more than about 4 frames should be double-checked with the labels contained on the video, because of ambiguity in the sequence (I haven't thought this out further).
#Bluescreens typically generated by a VCR due to loss of signal may lead to unreliable timecodes. Adjust slicelevel in readtimecode so that a constant timecode is decoded.

#Results
#Some capture cards/software/driver combinations will drop frames
# with no indication. One example: duplicate a frame (freezeframe), next frame, skip frame,
# then back to proper frame. This 'hiccup' repeats every 13-15 frames. The dupe is numerically exact.
#This sequence would look like: 0,1 0,1 2,3 6,7... (when it should be: 0,1 2,3 4,5 6,7)
#The next step is to find a way to deal with the missing frames.
#Restoring missing frames could be done by capturing twice, and merging the two videos together (which is easier said than done). Interpolation is another approach to restoring missing frames.
#It's also possible that you don't need the missing frames anyhow, because the video is anime or silent film which cotains many duplicates due to the low frame rate.

#Other uses: Changes in field parity can also be detected. The colourbars can verify levels. The 'darkblue' can help measure noise. The script is educational. Other codes like Closed Captioning could be decoded.

#How it works: First some backgrounds are generated, frame/field count is added, then a call to AddTimecode inserts a test signal
# into the last 6 lines of video. Although only two lines are needed, another problem with
# capture cards is de-centred capturing. An analog signal has 486 lines, but capture cards
# only record 480 of them. They should be centred. Mine is two lines too high, thus
# cropping the first two lnes. Therefore, 6 lines gives some leeway.
#The background 'darkblue' is meant to give time for "Play" (on your playback device) and other symbols to disappear
# before the timecode part appears. For VHS this also gives time for the transport/tape
# to stabilize. And it gives you time to start the capture!
#The analyze function decodes two lines of pseudo-timecode into a 4 bit number,
# which counts from 0 to 15 and repeats. This is enough to detect several combinations
# of duplicated, missing, parity reversed, or rearranged frames. An absolute timecode would be more difficult to program.
#With glitches affecting more than about 4 frames, you should look at the actual video
# to verify the absolute timecode, which is written in text.

#Functions:
#CreateColourbars(string type, string colourspace, float length) Creates colourbars with type as NTSC or PAL, colourspace as REC709 or REC601, length in seconds
#CreateSolidBackground(string type, string colourspace, float length, int c) Creates a solid background with type as NTSC or PAL, colourspace as REC709 or REC601, length in seconds, colour as YUV in c
#LabelVideoWithCounts(clip v) Labels a video with frame and field counts
#whiteline(clip template) Creates a white line using template for video properties
#blackline(clip template) Creates a black line using template for video properties
#createcode(clip template,int code) Creates a video representing a 4bit timecode using template for video properties
#createcodefields(clip template,int code) Creates a video representing a 4bit timecode using template for video properties. The video has two time codes on two lines, for use in interlaced video.
#AddTimecode(v) Overlays a timecode onto the supplied video, using createcodefields for generation.
#readtimecode(clip videoin) Extracts the video lines representing a timecode and decodes it, labeling the results on the returned video and also writing the results to the timecode file
#ShiftVideo(clip v, int hshift, int vshift) Shifts a video in any direction, where hshift<0 means left and vshift<0 means up. Use only multiples of 2.
#ShowTimeCode(clip v) Extracts the video lines representing a timecode.

videoindrive="C:\"#You may find this useful if you use external hard drives
videoindir="project001\multicap\"
videoinname="glitchdiagnostic.avi"
videoinfilename=videoindrive+videoindir+videoinname
#You may find it easier to just uncomment the line below:
#videoinfilename="C:\MyVideos\glitchdiagnostic.avi"
dataoutdrive="C:\"
dataoutdir="project001\multicap\"
dataoutname="timecode.txt"
dataoutfilename=dataoutdrive+dataoutdir+dataoutname
#videoinfilename="C:\project001\multicap\framedrops.txt"
#Various test videos
v1=AviSource("C:\project001\multicap\svideo-source-glitch.avi").trim(209+117,0)
v2=MPEG2Source("C:\project001\multicap\Pinnacle PCTV 800i.0.SVideoInput.d2v", cpu=0).trim(51,0)
vid=v1

generate=1#Used to set mode to create the diagnostic video
analyze=2#Analyze a supplied video
demo=3#Both generate and analyze a virtual video and generate a timecode file
mode=demo
type="NTSC"#Set to NTSC or PAL. You definitely need to set this.
#Important: if you don't have the optional ColorMatrix plugin installed, please set REC601 below!
colourspace="REC709"#Choose REC709 when encoding to mpeg2, REC601 for divx. It is only for creating correct colourbars.
DarkBlue=CreateSolidBackground(type,colourspace,15,$10B848)#Specify video system, colourspace, time in seconds, and colour in YUV (directly in the colourspace of your choosing, i.e., it's not converted).
LightBlue=CreateSolidBackground(type,colourspace,15,$7EB848)#Joke: Booktree 848 is a nice colour!
CreateColourbars(type,colourspace,60)
mode==analyze?vid:last
mode==analyze?nop:LabelVideoWithCounts#Label the last video with frame and field counts
mode==analyze?nop:AddTimecode#Add computer readable timecode to last video (this is not related to the timecode in professional VCRs)
mode==analyze?nop:darkblue.assumefps(last.framerate)+last+darkblue.assumefps(last.framerate)
sep=","
WriteFileStart(dataoutfilename, """ "Current_Frame"+sep+"Top_Timecode"+sep+"Bot_Timecode" """)
WriteFileEnd(dataoutfilename, """ "End of Timecode for the file "+videoinfilename """)
mode==generate?last:readtimecode#Decode timecode embedded in video and log timecodes
#ShiftVideo(0,0)#Used for development; can be used to align incoming diagnostic video
#ShowTimeCode#Show only the extracted timecode video lines for debugging

#--- Functions are defined below. You may want to split this out to another file and Import. ---
function CreateColourbars(string type, string colourspace, float length) {
fps=type=="NTSC"?30000/1001:250000/1001
colorbars(width=720,pixel_type="YV12").trim(0,length*fps/2-1).ConvertAudioTo16bit#weave'd down to half the time
colourspace=="REC709"?ColorMatrix(mode="Rec.601->Rec.709"):last#If you get an error message here, set colourspace to REC601
}

function CreateSolidBackground(string type, string colourspace, float length, int c) {
fps=(type=="NTSC")?30000.0/1001:25000.0/1001
blankclip(Round(5*fps),width=720,pixel_type="YV12",fps=fps,audio_rate=48000,stereo=true,color_yuv=c)
}

function LabelVideoWithCounts(clip v) {
#Add framecount and field counts to a video
v
assumetff
separatefields
top=last.selecteven
bot=last.selectodd
#all this is to remove color shadows; where the text overlays, color is desaturated, due to YV12
tu=top.utoy
tv=top.vtoy
bu=bot.utoy
bv=bot.vtoy
top1=top.ScriptClip("""subtitle("top field = " + string(current_frame*2),x=-1,y=100,size=20,text_color=$00FFFFFF,font_width=17)""")
bot1=bot.ScriptClip("""subtitle("bot field = " + string(current_frame*2+1),x=-1,y=120,size=20,text_color=$00FFFFFF,font_width=17)""")
top=ytouv(tu,tv,top1)
bot=ytouv(bu,bv,bot1)
interleave(top,bot)
weave
ScriptClip("""subtitle("frame = " + string(current_frame),x=-1,y=140,size=40,text_color=$00FFFFFF)""")
assumefps("ntsc_video")
assumetff
}

#creates a 2 pixel high white line, quarter width, with the same video properties as the template
function whiteline(clip template) {
template.crop(0,0,template.width/4,-(template.height-2)).tweak(sat=0,bright=255)
}

function blackline(clip template) {
template.crop(0,0,template.width/4,-(template.height-2)).tweak(sat=0,bright=-255)
}

function createcode(clip template,int code) {
#make 4 bit code from 4 quarter width horizontal lines
code=code % 16
b3=code/8
code=code-b3*8
b2=code/4
code=code-b2*4
b1=code/2
code=code-b1*2
b0=code
template
stackhorizontal(b3==1?whiteline:blackline,b2==1?whiteline:blackline,b1==1?whiteline:blackline,b0==1?whiteline:blackline)
}

function createcodefields(clip template,int code) {
code=code*2
interleave(createcode(template,code),createcode(template,code+1))
pointresize(template.width,4)
assumefieldbased.assumetff.weave
crop(0,0,0,-2)
}

function AddTimecode(v) {
#adds a 4bit timecode on the last 6 lines of video
#e.g. frame 0, top field reads 0000, bot field reads 0001
ScriptClip(v,"""
overlay(last,createcodefields(last,current_frame),y=last.height-6)
""")
}

function readtimecode(clip videoin) {
ScriptClip(videoin,"""
t=last
w=last.width
q=w/4#this is used to divide a video line into 4 horizontal parts to locate bits in the timecode
h=last.height#this is used to locate the timecode lines, and should compensate for NTSC or PAL
slicelevel=126#this luma video level is used to distinguish between 1 and 0 bits in the timecode ('data slicer' is a common term in electronics for this purpose)
sep=","#the separator character used for the output data
pointresize(last.width,last.height*2)
b3tv=crop(0,(h-4)*2,-3*q,-3*2)#the leftmost 1/4 of a horizontal video line contains the highest bit value of the timecode
b2tv=crop(q,(h-4)*2,-2*q,-3*2)
b1tv=crop(2*q,(h-4)*2,-q,-3*2)
b0tv=crop(3*q,(h-4)*2,0,-3*2)
b3bv=crop(0,(h-3)*2,-3*q,-2*2)
b2bv=crop(q,(h-3)*2,-2*q,-2*2)
b1bv=crop(2*q,(h-3)*2,-q,-2*2)
b0bv=crop(3*q,(h-3)*2,0,-2*2)
b3t=b3tv.averageluma>=slicelevel?1:0#a 'white' line (i.e., luma>=slicelevel) represents a 1 bit
b2t=b2tv.averageluma>=slicelevel?1:0
b1t=b1tv.averageluma>=slicelevel?1:0
b0t=b0tv.averageluma>=slicelevel?1:0
b3b=b3bv.averageluma>=slicelevel?1:0
b2b=b2bv.averageluma>=slicelevel?1:0
b1b=b1bv.averageluma>=slicelevel?1:0
b0b=b0bv.averageluma>=slicelevel?1:0
tc=b3t*8+b2t*4+b1t*2+b0t#top timecode
bc=b3b*8+b2b*4+b1b*2+b0b#bot timecode
t
subtitle("decoded top field timecode="+string(tc))
subtitle("decoded bot field timecode="+string(bc),y=16)
WriteFile(dataoutfilename, "string(current_frame)+sep+string(tc)+sep+string(bc)")
""")#tip: this could be potentially modified into a closed caption decoder as well
}

function ShiftVideo(clip v, int hshift, int vshift) {#Shift a video in any direction, hshift>0 shifts right, vshift>0 shifts down, use multiples of 2
v
l=hshift<0?-hshift:0
r=hshift<0?0:hshift
up=vshift<0?-vshift:0
dn=vshift<0?0:vshift
crop(l,up,0,0).addborders(0,0,l,up)
crop(0,0,-r,-dn).addborders(r,dn,0,0)
}

function ShowTimeCode(clip v) {#Show only the extracted timecode video lines for debugging
v
w=last.width
q=w/4#this is used to divide a video line into 4 horizontal parts to locate bits in the timecode
h=last.height#this is used to locate the timecode lines, and should compensate for NTSC or PAL
crop(0,h-4,0,2)
}

jmac698
29th December 2010, 06:00
Pan Scan Utilities Ver. 0.1 by jmac698
Utilties for pan, zoom, and aspect ratio conversion of video

Shift - will pan a video in any x,y direction
Zoom - will zoom into the center of a video without resizing it
Aspectconvert - can pillar box or letterbox

Can be used with Animate to do a Ken Burns effect (panning over stills to add action to a documentary video, zooming in on a person your talking about).


function shift(clip v, int sx, int sy) {
v#shift a video sx, sy pixels, sx<0 is left, sy<0 is down
pointresize(width*2,height*2)#to allow 1 pixel shifts in YV12
sx=sx*2
sy=sy*2
l=(sx<0)?-sx:0
r=(sx<0)?0:sx
t=(sy<0)?0:sy
b=(sy<0)?-sy:0
crop(l,t,-r,-b)
addborders(r,b,l,t)
bilinearresize(v.width,v.height)
}

function zoom(clip v, float zx, float zy) {
v#Zoom but cropping to original size
pointresize(width*2,height*2)#to allow 1 pixel increments in YV12
w=int(zx*width/4+.5)*4
h=int(zy*height/4+.5)*4
addleft=(zx<1)?(width-w)/2:0
addtop=(zy<1)?(height-h)/2:0
bilinearresize(w,h)#zoom
left=(zx>1)?int((w-v.width*2)/2):0
top=(zy>1)?int((h-v.height*2)/2):0
crop(left,top,-left,-top)#Keep only centered portion of zoomed video
addborders(addleft,addtop,addleft,addtop)
bilinearresize(width/2,height/2)#back to normal size
}

function aspectconvert(clip v, int w, int h) {
v#Extract a wxh video from original, e.g. a square cut out of a rectangle, centered
#If source is smaller than dest, center source in dest
#If source is less wide than dest, center crop source (i.e. pan scan)
#If source is taller than dest, center crop source
#a square (dest) on a widescreen (in) does a center cut. A widescreen on a square does a letterbox.
pointresize(width*2,height*2)
w=w*2
h=h*2
left=(w<width)?(width-w)/2:0
addleft=(w>width)?(w-width)/2:0
top=(h<height)?(height-h)/2:0
addtop=(h>height)?(h-height)/2:0
addborders(addleft,addtop,addleft,addtop)
crop(left,top,-left,-top)
pointresize(w/2,h/2)
}

jmac698
2nd January 2011, 08:31
New Filter: Deep Color Tools Ver 0.3a by jmac698
Scripted functions to manipulate 48bit color video. Reads 10bit mov files. These are the first Avisynth functions to support 10 bit and above video. Ver 0.3, bugs fixed. Tested to work with v210 file.

#Deep Color Tools Ver 0.3 by jmac698
#Scripted functions to manipulate 48bit color video. Reads 10bit mov files. These are the first Avisynth functions to support 10 bit video.
#Bugs: Only 9 bits of 10bit files are used. Tweak only supports cont and bright and calculates like coloryuv, there's some small numerical errors (rounding in mt?)
#Ver 0.3a: renamed to Deep Color Tools (from Deep Color Utilities) since this was the only name I can remember :) Updated documentation.
#Ver 0.3: fixed bug in clamprange, deepgreyscale, code cleanup (thanks Gavino from Doom9!)
#Ver 0.2: Fixed bugs with deeplastlo in all functions, successfully tested with a v210 file, added compatibility with yuy2,
# order of operations in tweak, chroma bug in tweak
# new functions: deepramp, deepcrop, deepgreyscale
# cleaned up code
#Requires masktools 2.0a48 (http://manao4.free.fr/masktools-v2.0a48.zip), qtsource (http://www.tateu.net/software/dl.php?f=QTSource), Quicktime 6+ or QT Lite (http://www.free-codecs.com/download/QT_Lite.htm)
#Uses an internal format with two videos for the high and low bytes, audio in low is ignored, format tracks the pixel format
#Functions:
#deepread(string fn) - reads a v210 mov file and saves to deeplast
#deepgreyclip(int "luma",string "pixel_type") - sets deeplast to luma (a 16 bit number), defaults to YV12
#deeptweak(float "hue", float "sat", float "bright", float "cont", bool "coring") - adjusts brightness and contrast in 16bit, including coring
#deepcrop(l,t,a,b)- crops deeplast
#deepramp(string "pixel_type",int "bits") - creates a luma ramp of bits, defaults to 10 bit yv12. The range is unrestricted.
#deepgreyscale - converts deeplast to greyscale
#The high byte is always displayed as a preview. There is no dithering or rounding.
#To come: more downcolor options, color correction, colorbars, more functions, resizing
Global deeplasthi=blankclip(pixel_type="YV12").tweak(bright=-255,coring=false).tweak(bright=16,coring=false)
Global deeplastlo=blankclip(pixel_type="YV12").tweak(bright=-255,coring=false).tweak(bright=0,coring=false)
Global format=0#0=YV12, 1=YUY2, 2=RGB

fn="G:\project001a\deepcolor\v210.mov"
deepramp
#deepread(fn)
deeplastlo#this line shows if you have data in the lower bits

function add16k(float n) {
string(n)+" x y 256 * + +"
}

function mult16k(float n) {
string(n)+" x y 256 * + *"
}

function multadd16k(float m, float a) {#multiply by m then add a
string(a)+" "+string(m)+" x y 256 * + * +"
}

function clamphi(string s, int n) {
s+" "+string(n)+" > "+string(n)+" "+s+" ?"
}

function clamplo(string s, int n) {
s+" "+string(n)+" < "+string(n)+" "+s+" ?"
}

function clamprange(string s, int low, int high) {
clamplow(s,low).clamphi(high)
}

function b0(string s) {
s+" 255 &u"
}

function b1(string s) {
s+" 65280 &u 8 >>"
}

function b2(string s) {
s+" 16711680 &u 16 >>"
}

function b3(string s) {
s+" 4278190080 &u 24 >>"
}

function deeptweak(float "hue", float "sat", float "bright", float "cont", bool "coring") {
coring=default(coring,true)
bright=default(bright,0)
cont=default(cont,1)
clamplower=coring?16*256:0
clampupper=coring?235*256:65535
#Make sure deeplast is yv12 before using masktools (yuy2 is stored as yv12 double height to preserve color)
preprocess
#do Contrast then Brightness, then clamp. -bright can bring a cont value back in range, ie 162*2=328, -100=228
#Note: this is operating like coloryuv gain,off because tweak takes into account tv levels (ie (y-16)*cont+bright+16)
tweakloexpr=b0(clamprange(multadd16k(cont,bright),clamplower,clampupper))
tweakhiexpr=b1(clamprange(multadd16k(cont,bright),clamplower,clampupper))
newlo=mt_lutxy(deeplastlo,deeplasthi,yexpr=tweakloexpr,chroma="copy second")
newhi=mt_lutxy(deeplastlo,deeplasthi,yexpr=tweakhiexpr,chroma="copy second")
global deeplastlo=newlo
global deeplasthi=newhi
postprocess
deeplasthi
}

function deepgreyclip(int "luma",string "pixel_type") {
pixel_type=default(pixel_type,"YV12")
global deeplasthi=blankclip(pixel_type=pixel_type).tweak(bright=-255,coring=false).tweak(bright=luma/256,coring=false)
global deeplastlo=blankclip(pixel_type=pixel_type).tweak(bright=-255,coring=false).tweak(bright=luma%256,coring=false)
Global format=pixel_type=="YV12"?0:pixel_type=="YUY2"?1:2
deeplasthi
}

function deepread(string fn) {
global deeplasthi=qtinput(fn,color=2,audio=true,mode=1,raw="v210")
global format=IsYUY2(deeplasthi)?1:0
qtinput(fn,color=2,audio=true,mode=1,raw="v210",dither=1)#9th bit
#low bit to high bit
getlowbyte(last,deeplasthi)
global deeplastlo=last
deeplasthi
}

function deepcrop(l,t,a,b) {
global deeplasthi=crop(deeplasthi,l,t,a,b)
global deeplastlo=crop(deeplastlo,l,t,a,b)
deeplasthi
}

function preprocess {#work around limitations of masktools
global deeplasthi=format==1?deeplasthi.pointresize(deeplasthi.width,deeplasthi.height*2).converttoyv12:deeplasthi
global deeplastlo=format==1?deeplastlo.pointresize(deeplastlo.width,deeplastlo.height*2).converttoyv12:deeplastlo
}

function postprocess {#undo temporary format
global deeplasthi=format==1?deeplasthi.converttoyuy2.pointresize(deeplasthi.width,deeplasthi.height/2):deeplasthi
global deeplastlo=format==1?deeplastlo.converttoyuy2.pointresize(deeplastlo.width,deeplastlo.height/2):deeplastlo
}

function deepramp(string "pixel_type",int "bits") {#Create an increasing luma ramp in 10bit deepcolor, full range
#more useful as an internal diagnostic than a video test pattern
pixel_type=default(pixel_type,"YV12")
bits=default(bits,10)
global deeplasthi=blankclip(pixel_type=pixel_type)
global deeplastlo=blankclip(pixel_type=pixel_type)
Global format=pixel_type=="YV12"?0:pixel_type=="YUY2"?1:2
n=int(pow(2,bits))
lowbits=bits>8?bits-8:0
vlowbits=int(pow(2,lowbits))
v1=n-vlowbits
v2=vlowbits-1
v3=vlowbits<8?8-lowbits:0
ramphiexpr="x "+string(v1)+" &u "+string(lowbits)+" >>u"
ramploexpr="x "+string(v2)+" &u "+string(v3)+" <<u"
#How this works: for 10 bits, you count as: 00000000 00, 00000000 01, 00000000 10, 0000000 11, 00000001 00
#the low 2 bits we put into the low byte, high 2 bits, or shift up 6 times, or (8-2) times, this is value v3
#now we have 0,64,128,192... for the low byte
#In the high byte, you can see a pattern of repeating values, 0,0,0,0,1...
#so we could just /4 to get this but if the video width were 1024 we'd reach 256
#so we & with (1023-3), this is v1. Now we can divide by 4 or shift right 2. This is lowbits.
preprocess
global deeplasthi=mt_lutspa(deeplasthi,mode="absolute",yexpr=ramphiexpr)
global deeplastlo=mt_lutspa(deeplastlo,mode="absolute",yexpr=ramploexpr)
postprocess
deeplasthi
}

function deepgreyscale {
global deeplasthi=greyscale(deeplasthi)
global deeplastlo=greyscale(deeplastlo)
deeplasthi
}

function getlowbyte(clip vround, clip vtrunc) {#vround may have some pixels +1 compared to vtrunc; put the difference in the high bit
Overlay(vround,vtrunc, mode="Subtract", pc_range=true)#e.g. y:129-128=1, 128-128=0. u,v are 128 or 129
coloryuv(gain_y=127*256,off_u=-128,off_v=-128)
coloryuv(gain_u=127*256,gain_v=127*256)
}

function notdeeptweak(clip v,float "cont", float "bright") {#just for a quick demo
v
coloryuv(gain_y=(cont-1)*256,off_y=bright)
}

frustum
8th January 2011, 22:24
jmac698 --

Very nice! I just had an hour to kick the tires and haven't done much testing yet. One roadblock is I don't have quicktime on my PC and don't want it on my PC. So I set up a virtual machine, installed quicktime, your script, and its dependencies. Here is my simple script:

film = "z:\original-uncompressed\01.avi"

loadplugin(".\mt_masktools-25.dll")
loadplugin(".\QTSource.dll")
import(".\deepcolor.avs")

deepread(film)
#deeplastlo

Running this script under virtualdub, I do see the video. If I uncomment the last line to see the lsbs, I see black, confirming that my "10b video" is really 8b video in a 10b format.

What is weird is that the film has 5023 frames, but if I view deeplastlo, virtualdub says that I have 240 frames.

jmac698
12th January 2011, 16:10
New Filter: VCR Simulator ver. 0.2 by jmac698
Simulates an old recording by introducing line jitter and reduced frequency response. Besides being an interesting special effect, this modelling can be used to test various filters for cleaning up analog recordings.

#VCR line jitter simulator Ver. 0.2 by jmac698 - with special thanks to Gavino :)
#requires both gscript and grunt, and noise generator (see Warpsharp web page)
#Ver 0.2: add noise, more realistic jitter, minor fixes
colorbars(pixel_type="YUY2").trim(0,10)
pointresize(width,height*4)#get line resolution by working around min height 4 limitations
h=height
splitlines(4)#split to lines of height 4 - note the jitter function requires height>=4
jitter
#return last
MergeLines(h)#merge until height=h
noisegenerator(true,55)
blur(1).blur(1).blur(1)
pointresize(width,height/4)
temp=last
u=temp.utoy
v=temp.vtoy
u=u.bilinearresize(30,height).bilinearresize(320,height)#it's actually better than this, placement of transitions is finer
v=v.bilinearresize(30,height).bilinearresize(320,height)
ytouv(u,v,temp)

function SplitLines(clip c, int n) {
Assert(c.height%n == 0, "Clip height not a multiple of 'n'")
Assert(!(c.IsYV12() && n%2==1), "'n' must be even for YV12 clips")
nStrips = c.height/n
c = c.ChangeFPS(nStrips*Framerate(c)).AssumeFPS(c) # Repeat each frame 'nStrips' times
BlankClip(c, height=n) # template for ScriptClip result
GScriptClip("c.Crop(0, (current_frame%nStrips)*n, 0, n)", args="c, nStrips, n")
}

function MergeLines(clip c, int h) {
n=h/c.height #n is number of frames to merge, e.g. 480 split to 4line has n=120
c.SelectEvery(n)
GScript("""
for (i=1, n-1) {
stackvertical(c.SelectEvery(n, i))
}
""")
}

function shift(clip v, int sx, int sy) {
v#shift a video sx, sy pixels, sx<0 is left, sy<0 is down
pointresize(width*2,height*2)#to allow 1 pixel shifts in YV12
sx=sx*2
sy=sy*2
l=(sx<0)?-sx:0
r=(sx<0)?0:sx
t=(sy<0)?0:sy
b=(sy<0)?-sy:0
crop(l,t,-r,-b)
addborders(r,b,l,t)
bilinearresize(v.width,v.height)
}

function jitter(clip v) {#note: a good tape could typically be +-3 without a TBC, distribution is not realistic
ScriptClip(v,"""
shift(rand(2)+rand(2)+rand(2)+4,0)
""")
}


VHS simulator, VHS emulator, VHS effect

pbristow
12th January 2011, 17:48
Nice one, jmac698! (I haven't tested it, but it the idea is a good one and the implementation looks OK to me).

For a more realistic distribution of the jitter, try changing:
rand(6)
to:
rand(2)+rand(2)+rand(2)

That should give a roughly gaussian distribution over the the range 0 to 6 (average 3, standard devation around 1-ish).

:)

jmac698
12th January 2011, 20:06
Try it now - I can't believe how much it looks like a VCR, I could swear I just capped it - try a movie.

jmac698
27th June 2011, 22:45
New Filter: RGB<=>YCgCo Ver. 1 by jmac
Requirements: masktools v2a38+
Description: Converts between RGB and YCgCo. YCgCo is a low correlation colorspace used in H.264 for better compression efficiency.
Usage: Load your source, convert to RGB, call RGB2YCgCo, convert to YV12, compress. Should encode well.
To playback, use the Avisynth filter in FFDShow and enter converttorgb.YCgCo2RGB

#RGB<=>YCgCo demo by jmac, requires masktools v2a38+, tested in avisynth 2.58
#The demo just shows colorbars, but what is happening is a conversion back and forth between colorspaces
#Theoretically you would convert to YCgCo and compress, this will compress about 10% better than YUV
#However, it's unclear how to send this to an h.264 encoder. There's probably a way to arrange the pixels to make it work.
#To test compression, just feed as YUV to a compressor. The Cg/Co channels will be subsampled. Playback the result as YUV, the script will decode it.
#Ver 1.0 - Does correct, full range conversion both ways, in 8bit
#Testing...
RGB2YCgCo
#for realtime playback in ffdshow, from h.264 with YCgCo, erase all lines above
#except I don't know the format return from ffdshow
YCgCo2RGB

function RGB2YCgCo(clip v) {
#convert an assumed RGB clip into Co,Y,Cg
#~ Y = 0.25 * R + 0.5 * G + 0.25 * B
#~ Cg = -0.25 * R + 0.5 * G - 0.25 * B + 0.5
#~ Co = 0.5 * R - 0.5 * B + 0.5
v
#put planes into yuv for masktools (awkward)
#RGBintoYV12
r1=ShowRed.converttoyv12(matrix="PC.709")#R->Y
g1=ShowGreen.converttoyv12(matrix="PC.709")#G->Y
b1=ShowBlue.converttoyv12(matrix="PC.709")#B->y
r=YtoUV(r1,r1,r1.pointresize(r1.width*2,r1.height*2))#y->y, y->u, y->v
g=YtoUV(g1,g1,g1.pointresize(g1.width*2,g1.height*2))#y->y, y->u, y->v
b=YtoUV(b1,b1,b1.pointresize(b1.width*2,b1.height*2))#y->y, y->u, y->v
#Note: remember b=u=Cg=z, r=v=Co=x, g=y=y=y
mt_lutxyz(r,g,b,yexpr="x 4 / y 2 / + z 4 / +",uexpr="y 2 / x 4 / - z 4 / - 128 +",vexpr="x 2 / z 2 / - 128 +",chroma="process")
YV12intoRGB
}

function YCgCo2RGB(clip v) {
#convert an assumed Co,Y,Cg clip into RGB
#~ R = Y - Cg + Co
#~ G = Y + Cg
#~ B = Y - Cg - Co + 1
v
#put planes into yuv for masktools (awkward)
r1=ShowRed.converttoyv12(matrix="PC.709")#R->Y
g1=ShowGreen.converttoyv12(matrix="PC.709")#G->Y
b1=ShowBlue.converttoyv12(matrix="PC.709")#B->y
r=YtoUV(r1,r1,r1.pointresize(r1.width*2,r1.height*2))#y->y, y->u, y->v
g=YtoUV(g1,g1,g1.pointresize(g1.width*2,g1.height*2))#y->y, y->u, y->v
b=YtoUV(b1,b1,b1.pointresize(b1.width*2,b1.height*2))#y->y, y->u, y->v
#Note: remember b=u=Cg=z, r=v=Co=x, g=y=y=y
mt_lutxyz(r,g,b,yexpr="y z + 128 -",uexpr="y z - x - 256 +",vexpr="y z - x +",chroma="process")
YV12intoRGB
}

function YV12intoRGB(clip v) {
#place v,y,u data into r,g,b planes
#this result has no visual meaning (however, closest approximation) but is only for performing arithmetic on the data
v
r=vtoy.converttorgb(matrix="PC.709")
g=greyscale.converttorgb(matrix="PC.709")
g=g.pointresize(width/2,height/2)#Y was doublesized
b=utoy.converttorgb(matrix="PC.709")
MergeRGB(r,g,b)#u->b, v->r, y->g
}

StainlessS
18th August 2011, 04:25
ClipClop, New Plugin for range/frame editing of clips, see here:-

http://forum.doom9.org/showthread.php?t=162266

Planar, YUY2, RGB32, RGB24.

Does NOT affect Audio (as source clip).

Clipclop is a simple plugin to replace ranges in a source clip with the same range, from a replacement clip.
Supports up to 255 replacement clips, with unlimited number of replacements into output clip.

StainlessS
20th August 2011, 15:46
There is a great little utility that I thought deserved another mention here on-site, I did a search and
AMP WinOFF has not had mention since 2004. AMP WinOFF is a utility whose best attribute is
that it can shut down/hibernate etc, the computer under various conditions, mainly that where the CPU
usage falls below a user selected level of activity. Most similar type programs pretend they do this, but what
they measure is "User Activity" rather than CPU activity, not quite the same, and probably of limited use
to Doom9 members. I have been using WinOFF since about 2004, perhaps earlier and have always
been very happy with it. I noticed recently that a number of threads were concerned with adding shutdown
type capability into eg Encoder GUI's, with AMP WinOFF, this becomes completely un-necessary,
especially if doing several jobs simultaneouly, you would not want to shutdown just because one of those
jobs has completed, that type of utility function should be implemented at a machine level.

However, having multiple shutdown options are quite ofter handy, and the Hibernation options
are always a good idea (goes to sleep, wakes up and continues as if nothing had happened).

This is typical of how I used to use WinOFF using TMPGEnc (dont use TMPGEnc anymore).
Encode in TMPGEnc, Hibernate after 1 hour of processing, auto boot at a certain time in the
morning (Bios Setup), Auto Logon to system, continue encode in TMPGEnc, use TMPGEnc
implemented ShutDown On Completion. All automated.

Anyway, have just visited WinOFF website and found that a new version was released in Nov 2010,
(not updated mine for several years) and thought I should let you all in on the secret.

Below from AMP WinOFF Website:-

AMP WinOFF 5.0.1

Description

AMP WinOFF is an utility for scheduling the shutdown of Windows computers,
with several shutdown conditions and fully configurable. Some of its features are:

Several modes/conditions for shutdown planification:
At certain date/time (e.g. 12:00 AM).
After a period of time (e.g. 1 hour and 15 minutes).
When there isn't user activity (i.e. no mouse/keyboard input).
When there isn't CPU activity.
When there isn't network activity.

Option of set several conditions at the same time for the planification. Examples:
Shut down at 08:00 PM or when there is no user activity for 15 minutes.
Shut down when the CPU load is below than 1% and the network transfer is below than 1Kb/s.
Several types of shutdown: power off, restart, close session, lock session, administrative shutdown/restart, sleep and hibernate.
Immediate shutdown and session lock from the taskbar icon menu.
Several security options including anti-close protection and password protected access to the configuration.
Option of showing a display with the active shutdown planification.
Option of executing a program, capturing the desktop, and/or hang up the modem before the shutdown.
Command line support for batch processing.
Dual English/Spanish version.

http://www.ampsoft.net/utilities/WinOFF.php

StainlessS
27th August 2011, 18:47
From Previous post above:


This is typical of how I used to use WinOFF using TMPGEnc (dont use TMPGEnc anymore).
Encode in TMPGEnc, Hibernate after 1 hour of processing, auto boot at a certain time in the
morning (Bios Setup), Auto Logon to system, continue encode in TMPGEnc, use TMPGEnc
implemented ShutDown On Completion. All automated.


You can "Auto Logon" to the system using AutoLogon tool from
SysInternals (Microsoft). here: (EDIT: Updated Feb 2011)

http://technet.microsoft.com/en-gb/sysinternals/bb545027

StainlessS
5th September 2011, 10:57
Prune(), New plugin for Trim & Splice.

Prune is a simple plugin to trim() multiple source clips and splice the results into a new clip.
Supports up to 256 source clips, with unlimited number of trims/splices into output clip.

Video:- Planar, YUY2, RGB32, RGB24.

http://forum.doom9.org/showthread.php?t=162446

vampiredom
1st November 2011, 20:02
New Utility and Function: MpegAutoIndex and MpegAutoIndexSource()

http://forum.doom9.org/forumdisplay.php?f=69

All requirements are included in the distribution.

MpegAutoIndex provides easy script-controlled indexing for MPEG2, h264/MPEG4 and VC1 sources via Donald Graft's indexing tools. As of 2011/11/01, h264 .mkv files are also supported. [note: .mkv containers, VC1 formats and interlaced h264 require a license from neuron2.net (http://neuron2.net)]

The package includes the indexers - and expands h264 support to include .mp4 and .mov containers via the included mp4box and faad executables. Likewise, it now includes ASF2VC1 to enable accurate indexing of VC1 in .wmv containers.

MpegAutoIndexSource() uses NicAudio for sourcing a large variety of audio formats. It also includes SoundOut for easy exporting of AC3 and WAV formats, which can be particularly helpful for 5.1 channel encodings, etc. The function provides many options for audio input/processing/output.

When opening .VOB files, MpegAutoIndexSource() automatically detects and indexes the entire set.

# MPEGAutoIndexSource(filename [, options])

# Open an MPEG4 file
MpegAutoIndexSource("foo.mp4")

# Open an AVC stream using DGIndexNV and hardware double-rate deinterlacing
MpegAutoIndexSource("foo.mts", NV=true, args="deinterlacing=2")

# Open an AVC stream using DiAVC and hardware double-rate deinterlacing
MpegAutoIndexSource("foo.mts", DI=true, args="deinterlacing=2")

# Open an NTSC MPEG2 DVD stream using DGIndex, force it to 24P (film)
# Downmix the multichannel audio to stereo, Normalize the audio to 99%
MpegAutoIndexSource("VTS_01_1.VOB", FieldOperation=1, Downmix=true, PeakAudioLevel=0.99)

# Open an AVC stream from BluRay using DGIndexNV, forcing 24p
# Downmix the multichannel audio to stereo, normalize it to 100%
# Output the audio as a 256kbps AC3 file
MpegAutoIndexSource(
\ "12345.m2ts",
\ NV=true,
\ args="fieldop=1",
\ Downmix=true,
\ PeakAudioLevel=1.00,
\ AC3Out=true, AC3Bitrate=256
\ )

# Open an VC-1 .wmv file
MpegAutoIndexSource("vc1.wmv", NV=true)

# Open a .mkv file with h264 video
MpegAutoIndexSource("vc1.wmv", NV=true)

StainlessS
4th December 2011, 21:59
New utility, MeGUI AutoEncode Batcher

Utility to allow group selection of *.AVS files for batching to MeGUI AutoEncode.

Here:-
http://forum.doom9.org/showthread.php?t=163343

StainlessS
12th December 2011, 04:42
New utility, DGIndex Batcher v0.01 (Previous post for MeGUI AutoEncode Batcher is new also, v0.12).

Utility to allow group selection of files for batching to DGIndex.

EDIT: Can call above previously posted "MeGUI AutoEncode Batcher" to pass generated AVS files
for it to AutoEncode batch to MeGUI.

EDIT: Both utilites are now updated.

Here:-
http://forum.doom9.org/showthread.php?t=163369

redfordxx
16th December 2011, 16:25
New plugin, RedAverage (http://forum.doom9.org/showthread.php?p=1537311#post1537311).

Set of filters to sum, average and merge "unlimited" number of clips.
Input and output can be independently 8bit or 16bit (for higher precission).

StainlessS
16th January 2012, 18:33
ShowChannels() v0.1

Plugin for Avisynth 2.5+.

Planar, YUY2 and RGB.

Simple plugin whose only function is to display the average Y,U and V
values for a YUV frame or R,G, and B for an RGB frame.
Also shows accumulated average for all frames visited so far.

Typical output for a YUV clip:-

347 ] Frames Visited = 348

This Frame Accumulated
Y U V Y U V
Ave 77.00 125.52 125.42 70.91 125.87 125.78
Min 4 80 95 0 69 83
Max 255 177 165 255 190 174
~Min 14 95 101 12 92 101
~Max 234 167 148 235 167 151

See here:-
http://forum.doom9.org/showthread.php?t=163829

DrPhill
27th January 2012, 14:55
I have created a new plugin in C. It adds a 'watermark' to a video.

A 'watermark' deforms the image as if it were 'embossed' into it. Teh watermark is defined by the user as a black and white image (still or moving). The intensity of the effect is controllable through parameters.

This filter currently only works in RGB32, and has not been exhaustively tested, though it is known to work on at least three machines.

I would dearly like someone with real C skills to check the code for obvious bugs, portability issues and general silliness.......

The source and release are available from SourceForge (https://sourceforge.net/projects/watermarkplugin/).

Any and all comments, feedback and suggestions are welcome, but preferably to this thread (http://forum.doom9.org/showthread.php?t=163870) as I have email notification on it.

Example of output (http://www.youtube.com/watch?v=4Jxb3Y4aq2w)

Thanks

panzerboy
31st January 2012, 10:45
http://sourceforge.net/projects/avisynthgmplyr/files/?

This is an implementation of GIMPs layers as AVIsynth merge filters.
See the GIMP docs for the types of merges.
http://docs.gimp.org/2.6/en/gimp-concepts-layer-modes.htm

I've cribbed the code from the GIMP source (mostly the pixel arithmetic) and inserted it into the SDK example 1.7.
Amazingly, it all seems to work!

So there's 20 merge filters in AvisynthGimpLayer.dll (must think of a better name).

Normal(clip, clip, opacity=float)
Multiply(clip, clip, opacity=float)
Divide(clip, clip, opacity=float)
Screen(clip, clip, opacity=float)
GimpOverlay(clip, clip, opacity=float)
Burn(clip, clip, opacity=float)
Dodge(clip, clip, opacity=float)
Hardlight(clip, clip, opacity=float)
Softlight(clip, clip, opacity=float)
GrainExtract(clip, clip, opacity=float)
GrainMerge(clip, clip, opacity=float)
Difference(clip, clip, opacity=float)
Addition(clip, clip, opacity=float)
Subtract(clip, clip, opacity=float)
DarkenOnly(clip, clip, opacity=float)
LightenOnly(clip, clip, opacity=float)
Hue(clip, clip, opacity=float)
Saturation(clip, clip, opacity=float)
Colour(clip, clip, opacity=float)
Value(clip, clip, opacity=float)

They work on RGB or RGBA clips only.
The last four Hue, Saturation, Colour and Value have a RGB-HSV conversion and back.
So they will probably run extra slow.

So why?
I play with mandelbrots with the Fractal Extreme program.
I started off with static pictures now I tend to do zoom movies.
With the static pictures I often generate multiple copies of the mandelbrot with different colour palettes and mappings.
These get layered in GIMP.
Lately I've been doing similar with the movies using Merge, Mergechroma and MergeLuma.
I wanted to do a movie of a older static picture
http://www.flickr.com/photos/panzerboy/6233908023/
, to get an match I needed the same layering that GIMP provides.
http://youtu.be/Nk5aeJi22bg

wonkey_monkey
26th February 2012, 01:25
I had a need of this simple filter - there may be a better way to implement it, but the work's done now so I thought I may as well share it.

http://horman.net/simpleselect.zip

simpleselect(clip, f1 [,f2...,fn])

Return only frames f1, f2,...,fn of the source clip, e.g.

simpleselect(clip, 2, 3, 5, 7, 9, 13) # return a 6-frame clip comprising frames 2,3,5,7,9,13 of clip

David

pbristow
26th February 2012, 16:18
You probably could have just used:

SelectEvery(clip, 999999, 2, 3, 5, 7, 9, 13)

If your source has more than 999999 frames, then increase the number to suit. It just needs to be bigger than the total number of frames presented. (I wonder if there's a limit on how many frames SelectEvery can handle?)

...but having a separate function for it might be easier for people. :) And it would be interesting to see which version performs better.

Could you provide the source code, too? This would be a good training example for folks starting out on coding their own plug-ins, I think: A nice simple objective, which lets you focus on one aspect of what a typical plug-in needs to do.

Thanks! :)

Gavino
26th February 2012, 17:35
simpleselect(clip, f1 [,f2...,fn])

Return only frames f1, f2,...,fn of the source clip
How does it treat the audio?

wonkey_monkey
27th February 2012, 00:35
You probably could have just used:

SelectEvery(clip, 999999, 2, 3, 5, 7, 9, 13)

Argh, you know what? I actually tried that, and I thought it wasn't working as expected - but that was because I was stacking the result with the original clip, so it appeared that it was returning a clip with the selected frames and then holding the last frame :stupid:.

Source is here (http://horman.net/simpleselect.cpp) (fixed), but I don't know useful it will be, it really was cobbled together - I still only have a vague grasp of how filters come together, I only know just enough to pummel the simplesamples into doing what I want.

How does it treat the audio?

Probably quite badly!

David

StainlessS
27th February 2012, 03:36
David, source; 404.

If you want to handle audio, you need a 'GetAudio' member fn, presume you have not got one.
(otherwise, will get full length audio from source clip)

If you dont want any audio in output clip, set 1st 2 or 3 of below, to 0 in constructor.

vi.audio_samples_per_second=0; // 0 means no audio, type int
vi.num_audio_samples=0; // changed as of 2.5, type __int64
vi.nchannels=0; // as of 2.5, type int


EDIT: Found it, here is David's link to source (used "SimpleSample.cpp" by mistake):-
http://horman.net/simpleselect.cpp
Very succinct, looks ok to me.

EDIT: May want to add below to constructor

frames=(int*)malloc(vi.num_frames*sizeof(int));
if(frames==NULL)
env->ThrowError("SimpleSelect: Cannot allocate memory");

StainlessS
23rd March 2012, 01:29
FrameSelect() v1.0, NEW Plugin for Avisynth v2.5+ by StainlessS.

FrameSelect() is a simple plugin to select individual frames from a clip.

Can select frames numbers by direct arguments to filter, or in a string, or in a command file.

Video:- Planar, YUY2, RGB32, RGB24.

Audio:- Returns NO AUDIO (Does not really make sense for individual frames).

EDIT: For frame range and audio support with fade in/out see trim/splice plugin Prune().
http://forum.doom9.org/showthread.php?t=162446
EDIT: For frame range replacement see ClipClop().
http://forum.doom9.org/showthread.php?t=162266


FrameSelect(Clip, int F1, ... , int Fn, string 'SCmd',string 'Cmd', bool 'Show', bool 'Ver')

http://forum.doom9.org/showthread.php?t=164497

Partly inspired by DavidHorman's SimpleSelect() 2 posts earlier. (Thankyou David).

pbristow
23rd March 2012, 12:34
FrameSelect() v1.0, NEW Plugin for Avisynth v2.5+ by StainlessS.

FrameSelect() is a simple plugin to select individual frames from a clip.

Can select frames numbers by direct arguments to filter, or in a string, or in a command file.


Interesting... With the command string & file options, do you plan to allow ranges (e.g. "1; 15-18; 32-399; 501")? That would be a very nice way of setting up EDLs (Edit Decision Lists). The same format could then be used as efficient output for functions that detect various things happening in the video.

A nice companion function would then be something that, rather than just selecting or ignoring frames from a single source, would actually switch between two sources - i.e. frames listed are taken from source A, but the rest are instead taken from source B. People who are writing functions to detect and fix particular symptoms in video then wouldn't have to worry about implementing their own switching logic: Just have the detecting filter output an EDL listing the frames that need "fixing", then run it with a script such as:


EDL = Q:\project\list_of_bad_frames.txt
FindTheBadness(OriginalVideo, threshold=99, output=EDL)
FixedVideo = FixTheBadness(OriginalVideo)
SelectAlternative(FixedVideo, OriginalVideo, commandfile=EDL)


Or even run FindTheBadness just once, and re-use the same EDL many times as they develop and fine-tune the way FixTheBadness works.

pbristow
23rd March 2012, 12:45
[SLAPS FOREHEAD] Ignore me, I missed the edit where you'd linked to Prune() and ClipClop(). You're clearly way ahead of me. :)

StainlessS
25th March 2012, 03:50
ClipClop() v1.10, Range/Frame Replacement Plugin for Avisynth v2.5+ by StainlessS.

New Version v1.10, Major improvement.

http://forum.doom9.org/showthread.php?t=162266

Planar, YUY2, RGB32, RGB24.

Does NOT affect Audio (as source clip).


ClipClop() v1.10, Range/Frame Replacement Plugin for Avisynth v2.5+ by StainlessS.

Planar, YUY2, RGB32, RGB24.

Does NOT affect Audio (as source clip).

Clipclop is a simple plugin to replace ranges in a source clip with the same range, from a replacement clip.
Supports up to 255 replacement clips, with unlimited number of replacements into output clip.


If you wanted to do 1000 single frame replacements in script, that would require 3 trims and 2 splices for each
replaced frame, ie 3000 trims and 2000 splices. This would involve 5000 'zero cost' filters which together will
cost a little more than zero. With ClipClop(), this is reduced to 1 single filter with an overhead of approx
1 trim or splice filter. There is a small overhead setting up the filter (before the very 1st frame is fetched)
while parsing the file/string commands, but then parsing and setting up 5000 trim/splice filters in a script
would not be without cost either. Clipclop can parse in the region of 40000 commands (from file) in about 1 second
[guessed, based on timing the sister plugin Prune(), a trim/splice plugin].

v1.10, Implements 'Nickname's, Pseudonyms for the replacement clips, ie instead of '17 100,200' you could use eg 'dn 100,200',
in this case it might be to replace frames 100 to 200 of the source clip with the same frames of a denoised clip (clip 17).
OR, 'cp 345' to replace frame 345 with a clip where frame n was copied from frame n-1 of the source clip, ie CopyFromPrevious
[this could be generated via 'SelectEvery(1,-1)', or 'CopyFromNext' clip by 'SelectEvery(1,1)].
Supports Nicknames of up to 31 characters in length so you could use eg 'PredictFromPrevious 1234', or 'FlippedVertical 666,999'.
Nicknames allow you to think in terms of functionality rather than to keep looking up which clip index holds a modified clip
and you could actually write your command file/string before you even know how many clips you need, what clip index they will be,
or even how you will actually create/process the clip.

Once you've tried ClipClop(), you will wonder why you spent all those years doing it the hard way.
(Repeat after me, "I dooo believe in Fairies!".)

Hakker
26th March 2012, 19:27
This place could use a place where authors can host their files. sometimes you need to search a while to get a certain plugin due to host of it being dead and all.

StainlessS
23rd April 2012, 01:09
New Script filter.

MatchFrames v1.02 - 23 April 2012

Function MatchFrames(clip c, clip f, bool "Show", Float "Thresh",Float "Thresh2",string "FileName",string "LogFile")
# MatchFrames v1.02, by StainlessS:
# Find And return frames in c clip that are best matched to frames in f clip.
# Requires YV12, as uses LumaDifference(). Null Audio returned.
# ##########
# Args:
# c = clip, Source clip.
# f = clip, Consisting of frames that you wish to find in the c clip.
# Show = bool[true], Returns both find and found frames using StackHorizontal.
# Thresh = float[0.0 == Search for best match], Threshold for declaring match.
# Thresh2 = float[0.0 == NOT time ordered], If (Thresh < Thresh2) Then clip f is time ordered (in c).
# This arg can significantly cut down on the time taken to search for frames.
# Assuming time ordered f clip (Thresh < Thresh2),
# Where:-
# A match found where diff of find to found frames <= Thresh,
# Next search will start from found frame + 1.
# Else if diff of find to BEST found frame < Thresh2,
# Next search will start from BEST found frame + 1.
# Else
# Next search will start from current start position.
# End if
#
# FileName= string["MatchFramesCmd.txt"], Output Frames command file (For FrameSelect plugin).
# LogFile = string["MatchFrames.Log"], Output Log file.
# ##########

A mod of Gavino's FindFrame()

Advantages:-

Deals with a clip of frames to find rather than a single frame.
Can find best match or 1st match below or equal to a threshold.
Float Threshold.
Can show StackHorizontal required 'find' frame alongside source clip 'found' frames.
Can output a command file consisting of frame numbers found.
Command file can be used with FrameSelect() Plugin to select all found frames (useful if viewing StackHorizontal frames without 2nd SLOW run for extraction).
Outputs LogFile
Can cut down on search times if clip f is known to be time ordered (in c).

Find it here:
http://forum.doom9.org/showthread.php?t=164766

jmac698
9th July 2012, 05:37
New Avisynth filter
taverage 0.1 by jmac698
Jul 8, 2012

A filter to average all frames, pixel-by-pixel. YUV formats only. Designed for Avisynth 2.58.
Usage: taverage(clip clip)

Source is GPL

Note, it's very slow.

http://www.sendspace.com/filegroup/9Jp55ub7vo%2BWcMacRzuyCQ

jmac698
11th July 2012, 04:24
New Avisynth plugin
findpos 0.2 by jmac698
Jul 11, 2012

A filter to find pixels on each line. YUV only. Avisynth 2.58+
Usage: findpos(clip clip, int x1, int x2, int thresh)

Search from x1 to x2 on each line for a pixel >=thresh, return a clip where luma of each line is the position found.
If not found, luma will be x2.

defaults:
x1 0
x2 7
thresh 22

http://www.sendspace.com/file/x5abs3

Version History

0.2: Release build. Ensure you have the vc2008 runtime installed.

jmac698
11th July 2012, 11:25
New Avisynth filter
dejitter 0.3 by jmac698
Jul 11, 2012

A filter to resize each line of the source by a different amount. YUV only. Avisynth 2.58+
Usage: dejitter(clip src, clip offsets)

For each line, read the luma of the first two pixels of offsets. Call these x1 and x2. Resize the source
from pixels x1 to x2 inclusive to be the full width of the source.
Uses bilinear filtering.

http://www.sendspace.com/file/8imj3k

0.3: Made release build. Make sure to install the vc2008 runtime as well.
0.2: fix problem with x1
0.1: first release

jmac698
11th July 2012, 12:49
New Avisynth script
TBC 0.61 by jmac698
Jul 11, 2012

A script to resize each line of the source by a different amount, by searching for black borders. YUV only. Avisynth 2.58+
Usage: see tbc.avs demo
Requirements: dejitter 0.2, findpos 0.1 (included)

0.6: first plugin version

http://www.sendspace.com/file/s78pp4

Installation note:
Please extract the included plugins and place into your plugins directory.
jitter03.zip -> jitter.dll -> plugins\jitter.dll
findpos02.zip -> findpos.dll -> plugins\findpos.dll
The VC2008 runtime is required. Download at:
http://www.microsoft.com/en-us/download/details.aspx?id=5582

Version History

0.61: Included updated plugins.

jmac698
12th July 2012, 10:38
New Avisynth runtime plugin
jcorr 0.3 by jmac698
Jul 25, 2012

A plugin to calculate the correlation between two frames. YV12 only. Avisynth 2.58+

Usage: jcorr(clip clip1, clip clip2)#returns float, can be used as runtime value

http://www.sendspace.com/file/5ke3a7

Note:
Do not confuse with corr2d, at http://avisynth.org/vcmohan/Corr2D/Corr2D.html ,
which calculates many correlations per frame to let you find the movement between frames in a panning scene.

Version History

0.3
-Fixed small numerical inaccuracy
-Made new test file to find inaccuracy
-Changed to a faster algorithm
-Static, SSE build
July 25

0.2
Fixed bug where one of the calculations used a chroma plane.
Updated demo script with better tests.
July 12

0.1
first release.

jmac698
12th July 2012, 12:46
New Avisynth plugin
corrbyline 0.1 by jmac698
Jul 12, 2012

A plugin to calculate the correlation between two frames, a line at a time. YUV only. Avisynth 2.58+

Usage: corrbyline(clip clip1, clip clip2)
Returns a clip of the same properties and the correlation as the luma per line, *255, if positive, 0 otherwise.

Note: to be published later

Wilbert
12th July 2012, 19:04
You gave both plugins the same name?

jmac698
12th July 2012, 19:14
oops typo, and in fact don't have time to post it...

jmac698
13th July 2012, 09:58
New Avisynth plugin
slicer 0.3 by jmac698
Jul 16, 2012

A plugin to extract raw VBI data. YV12 only. Avisynth 2.58+
Planar only.

Usage: slicer(clip clip, int line, int x, int width, int bits, int order, int slicelevel, int n)#returns int, can be used as runtime value

clip - a video with some white lines in it, such as EIA608, Teletext, Timecode, etc.
line - the line to extract
x - the starting x coordinate to look for the code. Should set to the mid-point of the first bit.
width - the width of the bits
bits - the number of bits (<32)
order - 0 means lsb first, 1 means msb first
slicelevel - anything above this is a "1". In an ideal video, this would be set to 126.
n - optional frame number to use, otherwise current_frame

http://www.sendspace.com/file/b0798i

Note:
There is also a similar plugin, DumpPixelValues
http://www.theneitherworld.com/mcpoodle/Tools/DumpPixelValues.html

Version History

0.3
Changed width to float, as long codes need more precision.
Jul 16

0.2
New demo with a real code. Updated docs.
Jul 16

0.1
first release.
Jul 13

jmac698
13th July 2012, 21:40
New Avisynth filter
addcode 0.2
Jul 16, 2012 by jmac

An Avisynth plugin to add codes (like timecodes) as white lines to a video.

Usage:
addcode(clip clip, int line, int x, float width, int height, int bits, int order, int luma0, int luma1, int word)

clip - video to add code to
line - line to start code on
x - starting position of code
width - width of each bit
height - height of each bit
bits - number of bits to draw
order - 0 means draw lsb first, 1 means msb first
luma0 - luma to draw for 0 bit
luma1 - luma to draw for 1 bit
word - a number representing the bits to draw

This will only draw the bits as a block, overwriting the specified area of the video. Some parts of the video may still show at the sides. If you want a completely black background, either make sure the bits take the full width of the video, or draw a black line by using a full width code of 0 bits first. You can also create settings to draw arbitrary white or black lines anywhere on the video. It's even possible to turn this into a plot function with foreground and background pens. It could plot single pixels in YV12 which is normally quite difficult. It could also draw checkerboards.

To add a timecode, use something like this in a scriptclip:

addcode(last,last.height-4,0,last.width/18,2,18,0,16,235,current_frame)#good for at least 145 minutes
http://www.sendspace.com/file/udsu6h

Version History

0.2
Changed width to float, added timecode example and drawing rectangles to demo.
Jul 16

0.1
First release. There is very little checking, please use reasonable values.
The x, width, and height should not exceed the video size
Jul 13

jmac698
14th July 2012, 10:45
New Avisynth filter
mandelbrot 0.2
Jul 18, 2012 by jmac

An Avisynth plugin to animate fractals.

Usage:
mandelbrot(clip clip, float cr_center, float ci_center, float zoom,
float aspect, int startcolor, int endcolor, int maxiter)

clip - video as template to plot on
cr_center pans the image left/right (use -2.5 to +1.5, start at -1.5)
ci_center pans the image up/down (use +-1, start at 0)
zoom - initial zoom, where 1=the full mandelbrot set
aspect - set the PAR. Use 1 for computer, 10/11 for NTSC.
startcolor - the lowest color
endcolor - the highest color, the colors vary between start and end based on iterations to reach bailout
maxiter - maximum iterations, this has the largest effect on speed but needs to be increased for higher zooms

The Mandelbrot set is moved/zoomed based on current frame. The colors are not animated, they are based
on iterations reached.

http://www.sendspace.com/file/qxxijz

Version History

0.2
remove extra parameters and just use Avisynth's animate, fix parameters bug, change parameters, new demo.
Jul 18

0.1a
static build release

0.1
First release - buggy. There is a problem in passing any parameters, so they've been pre-programmed.
Jul 14

jmac698
16th July 2012, 05:32
Old Avisynth filter
Decomet 0.4
Nov 10, 2011 by jmac

Usage: decomet(clip1, clip2)

clips - separate recordings of the same video. The videos must be edited to the same start point and stay in sync.
Works by selecting the clean pixels from two separate recordings of the video.

http://www.sendspace.com/file/ker4to

Note: the original link died, so I'm posting in a more appropriate thread.

William.Lemos.BR
18th July 2012, 15:26
Hi!

Iดm trying to use Decomet in Avisynth 2.6 but I get the error message:

"LoadPlugin: unable to load "C:\Program Files\AviSynth 2.6\plugins\avisynth_c.dll", error=0x7 e"

Does Decomet work with Avisynth 2.6? (in Win7 64, but using AviSynth 2.6 32 bits)

Thanks in advance!

IanB
19th July 2012, 01:26
0x7E is ERROR_MOD_NOT_FOUND

Install all the modules (libraries) that "C:\Program Files\AviSynth 2.6\plugins\avisynth_c.dll" depends upon.

Also not sure what still needs avisynth_c.dll these days, avisynth has included the C interface for a very long time.

jmac698
19th July 2012, 06:06
Hello,
I've created a page to discuss such issues here:
http://forum.doom9.org/showthread.php?t=165386

It appears to me that this thread was created mainly for announcements, so I'd like to keep it clean.

William.Lemos.BR
19th July 2012, 15:30
Thanks, IanB and jmac698!

Iดll try your sugestion and post the results at the other thread..

jmac698
23rd July 2012, 12:10
Composite Artefacts Filter Package 0.1
A collection of dot crawl and rainbow filters, with a script illustrating their use.

http://www.sendspace.com/file/ja3u2u

StainlessS
24th July 2012, 20:35
New set of compile-time/run-time functions RT_Stats.
Similar to eg AverageLuma but more programmable.

http://forum.doom9.org/showthread.php?t=165479

jmac698
25th July 2012, 20:13
New Avisynth plugin
findampbyline 0.1
Jul 25, 2012 by jmac

A plugin to find the amplitude of a waveform on each line.

Usage:
findampbyline(clip clip, float scale, int mode)

clip - the clip to measure. Should crop out all but waveform.
scale - scale factor, for example sqrt(2) to find peak when
measuring sinewaves
mode -
0: result is luma value
1: result is normalized to luma255=(rms*scale)/110
2: 20*log10(norm)-20*log(1/110)=luma255

http://www.sendspace.com/file/tft7j5

Version History

0.1
First release.

0.2
Fix some scaling issues. Still not completely accurate.

sirt
25th July 2012, 20:20
Thanks jmac698. To be honest I have no idea what this filter is intended for ! Could you explain why somebody would likely to use it and when ?

jmac698
25th July 2012, 21:01
It can measure the amplitude of a waveform. For example, let's say you draw a sinewave on each line, but a different frequency. The amplitude is 110 (the maximum possible). You can record this signal, and play it back. Now run the filter. The result is the amplitude on each line. Instead of the ideal luma=110 for each line, you start bright at the top and get darker on the way down. This means the sharpness is being reduced as you record higher frequencies.
In other words, this is a precise test of frequency response of a VCR. The official tvlines number is where it reaches half the amplitude, or -6dB. You can use this to test the difference between normal and edit mode, or how a TBC reduces sharpness.

Eventually I can create a script to precisely measure any recording/playback/passthrough system, and give a report on various things like noise, linearity, jitter, resolution, bandwidth, frequency response, differential gain and phase, brightness, contrast, tint, saturation, and so on, like an expensive test instrument does.

sirt
26th July 2012, 18:58
Thanks for the explanations but it looks quite complicated. In other words, I think your filter is intended to measure some specifical frequencies as you did to measure those refering to dot crawl but I guess it won't delete anything in practice, just underscore a category of frequencies. If I am correct, It's still unclear why somebody would be required to resort to it. In my opinion, somebody who wants to delete some video artifact will try to use a dedicated filter. Or do you plan to mix your new functions in future scripts ?

jmac698
26th July 2012, 20:22
Sirt,
It has no relation to general video filtering. It is only for interest of experts and for learning. However, based on the learning, in the future I think I can make better quality of video captures, because I can precisely calibrate the VCR and remove it's distortion effects. Also distortion effects from TBC or other pass-through devices.

pbristow
26th July 2012, 21:14
To Sirt: What jmac is opening up here is a whole new dimension to working with AviSynth.

Traditionally, what we do is work with an existing digitised video file, captured either by ourselves or somebody else. We look at it, analyse it, try to figure out what's gone wrong with it (or at least not gone wonderfully), and thus how best to clean it up and/or enhance it... And then we develop the AviSynth scripts (and sometimes whole new plug-ins) to do that.

In that approach, we're very often working "blind". We don't *know* what errors were introduced into the video, or how or when or why, so we have to try to figure all that out from looking at the end results of the capture process. Or sometimes, we *do* know what happened, and we wish it hadn't happened and that we'd been able to get involved in the process of analog to digital transfer sooner to stop it happening... But it's too late, so we just have to clean up the mess that we find, as best we can.

But in some cases... *We* have the analog source. We ourselves are doing the transfer from analog to digital. Thus, we have access to the hardware that's involved in that transfer, and we thus we have a chance to figure out what it's doing "wrong" (or at least, sub-optimally), that might be spoiling our results and need correcting (or at least reducing) via AviSynth.

With tools like the ones jmac is offering/hinting at here, and direct access to the hardware involved in our transfers, we can discover more about what our hardware is doing to the analog sources it gets. That in turn can help us to devise the best kind of filtering to apply after a video has been captured, to correct whatever the hardware is doing "wrong"/sub-optimally.

To jmac698: I salute you, sir. :) More power to your elbow, as we say around here.

jmac698
26th July 2012, 22:41
Couldn't have explained it better myself :)
My elbow needs more power for sitting on this hard desk :)
And you *get* it.. great!

theluckyman
6th August 2012, 05:31
I am trying to make a script with Megui for Staxrip so I have scripts in avisynth_plugin folder but when i click Preview or Save button then i received error about 'RepairSSE2.dll' or 'RepairSSE3.dll' but it is work on home pc with 4 GB RAM memory but i prefer to do it on my kimisufi box with 24 GB RAM memory. maybe dll need is outdated or something. it happened to all kind of box with Windows 2008 R2 but work at home pc which is Windows 7 work as well as older like Vista or XP.

Answer replies would be nice.

IanB
6th August 2012, 06:50
The RepairSSE2.dll or RepairSSE3.dll error sounds like missing runtime support. Install the MSVC runtimes appropriate for the plugins you have.


Can a Mod please strip out to a new thread(s) all of the the recent posts that are not actually announcing a new plugin or utility.
E.g #123 to #126, #130 to #135, #136+#137(this post)

wonkey_monkey
30th August 2012, 20:19
preroll.zip (http://horman.net/preroll.zip)

This plugin attempts to solve issues caused with certain audio sources (such as nicac3source), that being that if a video frame's worth of audio is requested when the previous video frame's audio has not been decoded, then the decoder may not produce the expected audio (it may fade in from silence for example, which could become an audible glitch if a video is trimmed and re-spliced).

All the filter does is fetch the previous frame's audio if it wasn't the last frame requested, before then fetching the current frame's audio and returning it. Usage is just:

clip=clip.preroll

Stainless wrote a more flexible version (http://forum.doom9.org/showthread.php?p=1587343#post1587343) but stated that it wasn't tested.

David

tebasuna51
30th August 2012, 22:01
This plugin attempts to solve issues caused with certain audio sources (such as nicac3source), ...

Solved issues with new NicAudio.dll v2.0.6 release (http://forum.doom9.org/showthread.php?p=1587337#post1587337).

wonkey_monkey
31st August 2012, 09:09
Solved issues with new NicAudio.dll v2.0.6 release (http://forum.doom9.org/showthread.php?p=1587337#post1587337).

Ohh, thanks tebasuna51 - I did look yesterday before I posted but it wasn't up yet :) Still, preroll may help with other audio sources.

David

wonkey_monkey
23rd September 2012, 16:36
Download: quad.zip (http://horman.net/quad.zip)

quad is a quadrilateral transformation filter similar to vcmohan's reform, although (so far) quad doesn't crash ;) and does a true quadrilateral transformation. It uses spline16 interpolation (can be switched off for speed purposes) and is multi-threaded.

Minimum parameter requirements are 4 x,y pairs defining the corners of the target quadrilateral. The source quadrilateral can also be specified, if required.

No source, sorry - it makes use of too many half-written libraries scattered around my hard drive.

quad
====

An Avisynth plugin to perform quadrilateral transformations.

Usage
=====

quad(clip, tx0,ty0, tx1,tx1, tx2,ty2, tx3,ty3, [sx0,sy0, sx1,sy1, tx2,ty2, tx3,ty3, bool invert, bool normal, bool draft])

Parameters:
-----------

tx0,ty0-tx3,ty3: the four corners of the target quadrilateral.
sx0,sy0-sx3,sy3: the four corners of the source quadrilateral (default: clip's corners, clockwise from top left)
invert: invert the transformation (transpose t and s)
normal: specify that the coordinates are normalised to the range 0-1.
draft: don't use spline16 interpolation

wonkey_monkey
23rd September 2012, 22:54
The example works (with AvsPmod & VirtualDub), but there is some unreproduceable flickering of black rectangles in the top right after clip start.

Not something I've seen... is the black rectangle always the same height? Is it 1/4 or 1/8 of the clip height? Is it full width or just partial width?

Can you post a screenshot?

David

vcmohan
24th September 2012, 11:51
Good to note that a better plugin is now available. Incidentally the crashes of my "Reform" plugin was traced to an inappropriate default parameter and has been corrected. Hopefully it will not crash.

I suggest to please create a new thread wherein all comments be posted and not clutter this main annoncement thread. The comment thread may be provided a link here.

StainlessS
8th October 2012, 23:39
CallCmd v1.00, Execute command - 8 Oct 2012
New Plugin to execute command on selectable frames or at script startup or closedown.

http://forum.doom9.org/showthread.php?t=166063

wonkey_monkey
14th October 2012, 00:37
xyremap v0.1 (http://horman.net/xyremap.zip)

An RPN-based pixel remapper.

http://forum.doom9.org/showthread.php?p=1595742

StainlessS
17th November 2012, 18:45
New LocateFrames script, to find frames in c clip that match frames in f clip.
Sister script to MatchFrames which is intended for matched frames extraction,
LocateFrames is intended to be usable by other scripts to identify matches.
LocateFrames given a version number of v1.06 despite being new script, as it
uses identical logic to MatchFrames.

http://forum.doom9.org/showthread.php?p=1600961#post160096

panzerboy
1st December 2012, 00:04
Bug fix release for my Gimp-style Merge filters. Colour, Hue and Saturation filters fixed.
same URL as before http://sourceforge.net/projects/avisynthgmplyr/files/?
The filters are really slow as they are just c++ code.
So I tend to run the gimp filters with a 'direct stream copy' in Virtualdub for uncompressed output then run the two passes of x264 encoding using the uncompressed (merged) avi.
There is SSE2 code supplied for GIMP but I've done little x86 assembler and never GNU format assembler, so much googling and reading to do.

StainlessS
5th December 2012, 09:36
Update for, ShowChannels() v0.6 - 05 Dec 2012, Plugin for Avisynth 2.5+

Planar, YUY2 and RGB.

Simple plugin whose only function is to display the average Y,U and V
values for a YUV frame or R,G, and B for an RGB frame.
Also shows accumulated average for all frames visited so far.

v0.5, 31 Oct 2012, Added x,y,w,h coords, not colorspace restricted (real pain in the bum to implement).
Can use odd coords for eg YV12, and even sample a single pixel.

v0.6, 05 Dec 2012. Added Interlaced arg for Planar only. Now gets correct chroma for planar interlaced , even down to single pixel.

See Here: http://forum.doom9.org/showthread.php?t=163829

fvisagie
7th December 2012, 09:13
I take it that the intention is not to clutter this thread with inanities while it strives to benefit the community by sharing potentially useful new functionality, but I'm unsure where that distinction might be drawn. Is the thread necessarily restricted to what could be termed computer science, or does it extend to, say, handy utilities I wrote in the course of my work that others may potentially find useful?

jmac698
7th December 2012, 12:08
It says plugins and utilities. Are they related to avisynth or at least video?

fvisagie
7th December 2012, 14:26
Yes to both - http://forum.doom9.org/showthread.php?t=166588 and http://forum.doom9.org/showthread.php?t=166627, in this case.

fvisagie
11th December 2012, 21:06
ALBR - Adaptive lens blur repair

Function for adaptively repairing video damaged by lens blur, using a frame-adaptive repair mask, a selection of sharpeners and multi-stage motion-compensated artifact removal. It also provides blanket sharpening and denoising-only modes, the latter mainly for applying an equivalent amount of denoising to footage that did not need repairing.

http://forum.doom9.org/showthread.php?t=166588

fvisagie
11th December 2012, 21:07
SpliceFiltered

Function that simplifies the task of creating a long sequence of splices or blends between filtered and original clips by allowing the user to enter splice frame numbers and optional duration of blend (overlap) into a single text list. It's mainly intended to be used with prefiltered or prerendered clips, and/or when splice blending is needed to mask filtering transitions.

http://forum.doom9.org/showthread.php?t=166627

vcmohan
16th December 2012, 13:05
Reformer (http://avisynth.org/vcmohan/Reformer/Reformer.html) plugin is for conversion between rectangle and quadrilateral image areas. This is similar to my Reform plugin but uses matrix algebra and renders better even if the angle of rotation/displacement of coordinates are 90 degrees or more.
Reformer is probably is very much like David Horman's plugin quad. However Reformer works for YUY2 and YV12 formats in addition to RGB formats. Coordinates of both rectangle and quadrilateral can be specified.discussion on this plugin may be posted in the thread of Reformer (http://forum.doom9.org/showthread.php?p=1605916#post1605916)
__________________

StainlessS
16th December 2012, 22:35
PlanetCrop() v1.0 new script function.

Given a series of time lapse planetoid images, locates those images in frame, crops out and joins them all together into
a video clip of required Frame Aspect Ratio, 1 FPS, with optional Auto Luma Levelling.
First scans each image establishing maximum dimensions for whole sequence (after cropping out the planets). Optionally 'grows' those
dimensions to maintain some of the area around the cropped planets. A 'canvas' size is then established to contain the now maximum
dimensions and respecting the desired Frame Aspect Ratio, synthetic black borders are added where necessary.
Borders are the areas added to maintain aspect ratio and can be hi-lited in red. Margins are areas that use the
original image content instead of synthetic black borders (where possible), they replace synthetic borders, and can be hi-lited
in green. Margins are the areas between the established crop coords and synthetic borders.
http://forum.doom9.org/showthread.php?p=1606025#post1606025

vcmohan
1st February 2013, 13:47
SwitchByAudio (http://avisynth.org/vcmohan/SwitchByAudio/SwitchByAudio.html): is a new plugin which attempts to switch between two clips depending upon the length and level of audio pause.
Please see discussion here (http://forum.doom9.org/showthread.php?t=167087).

maxxon
1st February 2013, 23:06
Hi, haven't been around for a bit, but I just noticed this thread while perusing around again. I'd like to add AviSynthLib (http://forum.doom9.org/showthread.php?t=164305) to the list.

This library supports many things, including but not limited to:

Reference arrays (referenceArray.avs)
Single sized element arrays (singleElementSizeArray.avs)
Native for loops (for.avs)
Blocks to contain data in a string format (block.avs)
Memory management (memory.avs)
Profiling tool (profile.avs)
Regression testing (testing.avs)
File and path manipulations and searches (file.avs)
Variable scope insertion (var.avs/varConst.avs)
Additional hex number support (hex.avs)
Additional string support (string.avs)
Including script files only once with ability to have multiple auto searched include directories (include.avsi)

Follow the link for additional information.

Thanks.


Adrian

pandy
14th March 2013, 12:30
New Avisynth plugin
slicer 0.3 by jmac698
Jul 16, 2012

A plugin to extract raw VBI data. YV12 only. Avisynth 2.58+
Planar only.

http://www.sendspace.com/file/b0798i


"Sorry, the file you requested is not available."

Thx jmac698 - perhaps slicer can be helpful to restore some VBS data.

StainlessS
18th March 2013, 12:29
New Version: RT_Stats, Compile-time/Runtime Functions v1.10 - 17 May 2013

Significant update so posting here


Zip contains dll, + source + avs scripts.
RT_YStats_TestTimer.avs # Speed comparison script (eg YPlaneMin/RT_YPlaneMin).
ImageSplicer.avs # Update, much faster
PlanetCrop.avs # Update, much faster
QueryBorderCrop.avs # Now a plugin
QueryLumaMinMax.avs # Now a plugin
YInRangeLocate.avs # Now a plugin, previously unreleased
DAR.avs # Now a Plugin
LocateFrames.avs
MatchFrames.avs # RT_Stats NOT required
s_ExLogo() # RT_Stats NOT required


http://forum.doom9.org/showthread.php?t=165479
Also see last two Posts #109 & #110
http://forum.doom9.org/showthread.php?p=1620245#post1620245

StainlessS
12th April 2013, 23:05
New Plugin, Zebra v1.02, Test clip generator
http://forum.doom9.org/showthread.php?t=167663

StainlessS
28th April 2013, 02:36
New version FrameSelect v1.02.

Added filter:
FrameReplace(clip,clip, int F1, ... , int Fn, string 'SCmd',string 'Cmd', bool 'Show', bool 'Ver')

Args identical to FrameSelect, with exception of the 2nd clip arg which is a clip of frames to replace into the 1st clip arg.
The other args must be identical to the script that originally extracted the frames.

FrameSelect here:
http://forum.doom9.org/showthread.php?t=164497

FrameReplace() prompted by this thread:
http://forum.doom9.org/showthread.php?p=1625975#post1625975

EDIT:
FrameReplace replaces frames extracted with FrameSelect(), back into the original clip.
Use the same command args that were used to extract the clip.

v1.03,
Added "Reject" arg to FrameSelect, toggles operation to select NON-SELECTED frames instead of selected ones.

EDIT: FrameSel (FrameSelect REVAMP, ie update/renamed plug) : See 3 posts below ie post #164.

StainlessS
16th May 2013, 16:18
SecurityCamExtractMotion.AVS, v1.0, Included as part of new version RT_Stats new v1.17.

Requires RT_Stats v1.17, FrameSelect v1.03, GScript, Grunt, Maybe DeGrainMedian if required.

Extracts movement from security camera footage:- here
http://forum.doom9.org/showthread.php?p=1628675#post1628675

Works really well.

One clip about 11:00 PM, cut down to about 10% of frames, where about 25 vehicles, 3 cyclists, 2 pedestrians and one fox caused
motion detection. Original clip about 18 mins. Dark, rain shimmering under street lamps.

2nd clip, about 02:00 AM cut down to about 3.5% of frames, where about 9 vehicles caused motion detection.
Original clip about 18 mins. Dark, little activity.

EDIT: Also FrameSelect update see previous post EDIT.

StainlessS
11th June 2013, 11:20
New plugin (well a week or so old),

FrameRepeat() v1.00, Plugin for Avisynth v2.5 & v2.6 by StainlessS.

FrameRepeat() is a simple plugin to select frames to repeat.

Video:- Planar, YUY2, RGB32, RGB24.
Audio:- Returns NO AUDIO.

FrameRepeat(Clip,int 'default',string 'Cmd', bool 'Show', bool 'Ver')

default, int, default=0. The default repeat count for frames not mentioned in command file.
Default =0, is, frames not mentioned in Cmd command file are excluded (repeated 0 times, ie not output at all).

Cmd, string, Default= "", Not set.
Command file, frame numbers supplied in a file. Use eg "Repeat.txt" for command file in your script directory.

#------------- # below contents of a text file eg "Repeat.txt".
1 1 # This is a comment. Output frame 1 once.
2 # Single frame number without a repeat count, outputs frame only once, equivalent to 2 1.
3,2 # Can also use ',' COMMA rather than SPACE as a number separator. Outputs frame 3 twice.
5,3 # Output frame 5, 3 times.
#-------------

Given a 6 frame clip (frames 0 -> 5)

FrameRepeat(clip,default=0,cmd="Repeat.txt") # would produce this sequence "1,2,3,3,5,5,5".

FrameRepeat(clip,default=1,cmd="Repeat.txt") # would produce this sequence "0,1,2,3,3,4,5,5,5".

FrameRepeat(clip,default=2,cmd="Repeat.txt") # would produce this sequence "0,0,1,2,3,3,4,4,5,5,5".

FrameRepeat(clip,default=3) # would produce this sequence "0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5".
# Note, above without a command file.

here: http://forum.doom9.org/showthread.php?p=1632538#post1632538

StainlessS
11th June 2013, 11:39
New Plugin, FrameSel/FrameRep v2.0 (FrameSelect REVAMP)


FrameSel() is a simple plugin to select individual frames from a clip.

Can select frames numbers by direct arguments to filter, or in a string, or in a command file.

Video:- Planar, YUY2, RGB32, RGB24.
Audio:- Returns NO AUDIO (Does not really make sense for individual frames).

FrameSel(Clip, int F1, ... , int Fn, string 'scmd',string 'cmd', bool 'show', bool 'ver',bool "reject",bool "ordered",bool "debug")

FrameRep(), replace back into clip (from whence they came).

here: http://forum.doom9.org/showthread.php?t=167971

StainlessS
11th June 2013, 11:46
New Plugin, ClipBlend/Clipblend16 v0.0


ClipBlend(clip,"delay"=0) # 8 bit Planar, YUY2, RGB
ClipBlend16(clip,"delay"=0) # 16 bit, Stack16 Planar, YUY2, RGB (see Dither Tools)

Added Delay arg to plugin.

Delay, default = 0, == ALL frames played so far blended.

1 = blend with previous frame.
10 = blend with 10 previous frames, etc.

Accumulator resets at frame 0 and if you jump about.


See here: http://forum.doom9.org/showthread.php?p=1632542#post1632542

StainlessS
24th July 2013, 12:59
RgbAmplifier v1.01 - Forensic Tool, new plugin

RGB24 and RGB32
========================================
An Avisynth plugin to amplify color shifts

Given a clip, this filter examines every pixel of every frame and independently multiplies the difference of its specific
R, G and B values from the average R, G and B values of that same pixel location spanning a defined radius of adjacent frames.
If the new values are above or below the allowed RGB values, they are capped at those limits.
The revised RGB values replace the original values, and the amplified clip is returned.
If the Multiplier is set to a value of zero, the plugin acts as a temporal frame averager.

This plugin will:
Convert seemingly imperceptible color changes into obvious color changes
Highlight seemingly imperceptible movements of high contrast pixels
Sharpen the details of moving objects
Cause distortion or ghosting/transparency effect to moving objects (an unavoidable side effect)

This plugin requires RGB24 or RGB32 color space, and is intended for forensic analysis of videos created from fixed position cameras.
Usage on non-stationary cameras may produce unpredictable or content destructive results. The faster the object and/or the greater
the radius, the greater the risk of negatively impacting the visual accuracy of the moving object.

here: http://forum.doom9.org/showthread.php?t=168293

StainlessS
9th August 2013, 08:09
MDec2 New Filter v1.0

MDec2, MultiDecimate like decimating filter.

Planar, YUY2, RGB

MDEC2(clip c,float "rate"=24.0,bool "show"=false,bool "create"=false,string "dir"="C:\",bool "chroma"=true,bool "ver"=false)

MDec2 is a 2 pass decimating filter, acting much like the Multidecimate filter by Donald Graft.
Requires MultiDecimate.Exe & ProcessMD.Exe from MultiDecimate package.

See Here:
http://forum.doom9.org/showthread.php?p=1639822#post1639822

StainlessS
11th September 2013, 00:06
RoboCrop() v1.00, new plugin.
http://forum.doom9.org/showthread.php?p=1632662#post1632662


Plugin's for both Avisynth v2.5 and v2.6.

RoboCrop is an automatic cropping solution to crop black borders from video clips, loosely based on (but using no code from)
Autocrop by Glenn Bussell.

For the most part, you can just call it with RoboCrop(clip) and not bother with any other arguements, it is intended to be pretty
much autonomous in its decisions. You might however want to alter eg WMod and HMod if your encoder has special requirements, and
perhaps Laced if your source is likely to be fully progressive.

Borders are detected by sampling at Samples frames, at scanlines (h/v) using AverageLuma (RGB is converted to Luma Y at either TV or
PC levels, See Matrix). This sampling is done on all 4 sides of the frame.
If a scanline Average luma is below or equal to Thresh, then is considered possible black border, above considered possible image,
if Baffle [default=4] adjacent scanlines above Thresh, then it IS image.

vcmohan
27th September 2013, 13:30
A new plugin Planetarium suitable for use by Planetariums for warping input fish eye image for use with spherical mirror to project on to dome.
Discussion thread (http://forum.doom9.org/showthread.php?t=168837)

ChiDragon
9th December 2013, 00:10
WeaveMan: remove arbitrary pulldown patterns manually (http://forum.doom9.org/showthread.php?t=167875)

For perfectionists to undo non-standard 24->25 fps, 25->29.97 fps, etc. telecine conversions, along with other weird telecine anomalies created by broadcasters speeding up film-sourced content.

A sample case is here (http://forum.doom9.org/showthread.php?p=1630931&highlight=weaveman#post1630931). If you have a sample you would like to try the filter with, post it in the thread above and I will try to explain how to use it.

wonkey_monkey
16th August 2014, 23:39
Deshaker3D (http://forum.doom9.org/showthread.php?p=1690146)

3D image stabilisation - effectively an Avisynth substitute for pass 2 of guth's VirtualDub filter Deshaker.

wonkey_monkey
20th December 2014, 21:08
Inspired by RgbAmplifier (http://forum.doom9.org/showthread.php?t=168293), which I couldn't get to work, I've written a plugin called amp (http://horman.net/avisynth/amp.zip).

It performs temporal smoothing, then (optionally) enhances the difference between the windowed average and the current frame. In theory, this should let you do things like make pulses visible in videos of human faces or wrists, but I suspect you need a very low noise video to pick that up.

Also worth noting is that it will easily enhance codec artefacts, so for enhancing very small changes, it probably works best with lossless or intra-frame codecs like MJPEG or DV.

It works in YV12, YUY2, RGB24 and RGB32 colourspaces, and because of this its parameters are a bit changeable:


amp(clip c, int window, double y, double u, double v, double a)


window is the number of frames either side of the current one used for the temporal smoothing, i.e. a value of 5 will smooth over 5*2+1=11 frames.

For YV12/YUY2 colour spaces, the parameters y u v specify the level of enhancement for each channel. a is ignored.

For RGB24/RGB32 colour spaces, the parameters y u v [a] specify the level of enhancement for the channels r g b [a].

A value of 0 performs no enhancement (returns the unaltered channel of the source frame).
If you only specify y, the same value will be used for the other channels.
By not specifying any of these four parameters (or giving them the value of -1) the filter acts purely as a temporal smoother.

David

StainlessS
17th June 2015, 20:26
RgbAdapt v0.3 new(ish) plugin. http://forum.doom9.org/showthread.php?t=170642


For Avisynth v2.58+

RGB24/RGB32.
Audio as original.

RGBAdapt(clip c, \
\ Float "R_Bias"=0.0,Float "R_Gain"=1.0,Float "R_Cont"=1.0,Float "R_RPow"=1.0,Float "R_Spow"=1.0,Float "R_SPMid"=0.5,Bool "R_Pord"=false,
\ Float "G_Bias"=0.0,Float "G_Gain"=1.0,Float "G_Cont"=1.0,Float "G_RPow"=1.0,Float "G_Spow"=1.0,Float "G_SPMid"=0.5,Bool "G_Pord"=false,
\ Float "B_Bias"=0.0,Float "B_Gain"=1.0,Float "B_Cont"=1.0,Float "B_RPow"=1.0,Float "B_Spow"=1.0,Float "B_SPMid"=0.5,Bool "B_Pord"=false,
\ Int "R_IMin"=0,Int "R_OMin"=0,Int "R_IMax"=255,Int "R_OMax"=255,
\ Int "G_IMin"=0,Int "G_OMin"=0,Int "G_IMax"=255,Int "G_OMax"=255,
\ Int "B_IMin"=0,Int "B_OMin"=0,Int "B_IMax"=255,Int "B_OMax"=255
\ )

Bias -512.0 -> 512.0. Bias = Brightness.
Gain -8.0 -> 8.0 Gain = Zero relative contrast.
Cont -8.0 -> 8.0 Cont = Centre relative Contrast.
RPow 0.1 -> 4.0 RPow = Gamma, r shaped power curve.
SPow 0.1 -> 4.0 SPow = S shaped power curve.
SPMid 0.01 -> 0.99 SPMid = Controls Inflection point for S shaped power curve, 0.5 = mid point ie 0.5*255.0
Pord True/False Pord=Rpow processed first (False) or SPow first (True). The power functions are non commutative.

Assuming all settings apart from RPow, SPow and SPMid at defaults:-
Pord Default (false) RPow1st, when modifying RPow or SPow, the SPow power curve inflection point will
remain fixed at Y = SPMid * 255.0, Rpow will slide it left or right.
Pord SPow1st, when modifying RPow or SPow, the SPow power curve inflection point will remain fixed
at X = SPMid * 255.0, RPow will slide it up or down.

New args v0.3
IMin 0 -> 255 : IMin <= (IMax+1)
OMin 0 -> 255
IMax 0 -> 255 : (IMin-1) <= IMax
OMax 0 -> 255

Any INPUT value less than IMin will be mapped to OMin (both default to 0), and values greater than IMax will be mapped to
OMax (both default to 255). With default settings the Min/Max options have no effect.
These options allow for weird shaped LUT's to eg create masks. Example, Leaving all other settings at default and
for some channel set IMax to eg 127 and OMax to 64 would map all input above 127 to 64 while leaving everything else untouched.
If you additionally set eg IMin=128 and OMin=180, then 0-127 would map to 180 and 128->255 map to 64.
The IMin <= (IMax+1) requirement allows you to map the entire 0->255 range to any two output values.



RgbAdapt_Graffer.exe demos the plugin and all arguments. (Will require VB6 runtimes, most will already have these.)


And here a pic of the Graffer:-
https://s20.postimg.cc/wxyq8spkt/Fishv3_zpsfjmoyerr.jpg (https://postimg.cc/image/yd0axiqnt/)

The Ring on the Fish's cheek shows the pixel that is being tracked and the Before and After colors shown in status bar.
Monitor changes for single pixel as you modify the sliders.
The tick box on left show that SPow is locked so R + G + B settings are affected simultaneously.

fvisagie
1st July 2015, 16:18
Update to Histograms in RGB & CMY (http://avisynth.nl/index.php/Histograms_in_RGB_%26_CMY): here (http://forum.doom9.org/showpost.php?p=1728405&postcount=10).

fvisagie
3rd July 2015, 17:38
Histograms in RGB & CMY (http://avisynth.nl/index.php/Histograms_in_RGB_%26_CMY) updated again here (http://forum.doom9.org/showthread.php?p=1728778#post1728778).

wonkey_monkey
12th September 2015, 22:25
rgba_rpn/y8_rpn (http://forum.doom9.org/showthread.php?p=1738374)

RPN pixel manipulator. Does just about anything*

*okay, not anything. But a lot.

StainlessS
27th December 2015, 03:44
VD_EdKey. New Utility for Avisynth, v1.00


VD_EdKey v1.00.

VD_EdKey, is a compiled AutoIt script utility, intended to assist in creating Avisynth frames command files.
Create command file in VirtualDub with VD_EdKey, and use command file in Avisynth script functions.

VD_EdKey is used together with VirtualDub and NotePad. You must run the app, with BOTH VirtualDub and the
NotePad Editor VISIBLE, you can scroll through a video clip, and press eg CTRL/INSERT to insert the current frame number
into the NotePad Editor. You press the keys with VDub as the active window (not NotePad).
VD_EdKey requires VirtualDub, VirtualDubMod will not be recognised (It does not provide marked ranges in Status Bar).
After creating Command file in NotePad, Save as eg Command.txt and provide it as eg SelectRanges(Cmd="Command.txt") or
RejectRanges((Cmd="Command.txt") {Select/RejectRanges supplied with both Framesel and Prune Avisynth plugins).

*** Current frame is shown in VirtualDub in the middle of the status bar. ***
*** Ranges are marked in VirtualDub via HOME and END keys, shown at Left of status bar (when marked). ***

It is important to NOT do any VirtualDub clip editing, if you eg delete a frame in VirtualDub, then all frames after that frame will
be off by 1, and so all VD_EdKey edited ranges/frames inserted later into NotePad file will be also off by 1.
The VDub loaded clip can be either an AVI or AVS clip, it makes no difference.

All VD_EdKey Keyboard commands:-
# Inserted into NotePad Text file
CTRL/INSERT Insert current frame eg '42'.
CTRL/SHIFT/INSERT Insert current range eg '42,52'. (single frame range is converted to single frame)
# Special use (where script frames file processor gives special meaning to -ve frame or range):
CTRL/DELETE Insert -ve current frame '-42'.
CTRL/SHIFT/DELETE Insert -ve current range '-42,52'. (single frame range is converted to single frame)
# Terminate:
CTRL+SHIFT+ALT+PAUSE is TERMINATE Program (or close via System Tray icon). PAUSE is also known as BREAK, usually next to Scroll Lock.

NOTE: A range shown in VDub status bar as eg "Selecting Frames 100-102(2 frames)" represents frames 100 and 101, frame 102 is exclusive and
does not count. By default, VD_EdKey uses Inclusive END frame ranges (same as Avisynth where end frame DOES count).
You can change the default behaviour to behave the same as VDub by Running VD_EdKey.Exe at least once and changing the auto created
VD_EdKey.ini file contents from "RangeEndIsExclusive=0" to "RangeEndIsExclusive=1". When using VDub "RangeEndIsExclusive=1" mode,
we subtract 1 from the End Frame to convert to Avisynth End Frame Inclusive specification when writing range to NotePad command.
When sending a command using VDub exclusive mode with a status bar range of "100-100(frames=0)", it will beep and show a "No Frames"
type error message for a few seconds, in Avisynth Inclusive mode it will send a 1 frame range command to the NotePad window.

It is easy to see what is happening as the NotePad window will be visible and after each insertion into NotePad, an ENTER key
will also be sent to move the cursor down one line, each command is on its own line. If you make a mistake, it is easy to
just switch to NotePad window and delete the erroneous line.

That is it, thats all it does. Is easier than switching windows, insert/delete frame number, and then back to original window again.

AutoiIt compiled executable with source provided, just click Menu Tools/build to create executable (In Scite4AutoIt3 editor).
Requires AutoIt3 and Scite4AutoIt3 editor to re-build executable.

ssS



Here:- http://forum.doom9.org/showthread.php?t=173010

StainlessS
6th January 2016, 06:25
TWriteAVI v2.02, Plugin Update of existing plugin (never appeared in new plugins thread before).

TWriteAVI v2.0, can write lossless whatever can be played to AVI (or WAV), and using the ForceProcessAVI/WAV functions, can write the
files [or logs] without playing them.

Two Pass:

WhateverSource(...)
A_Two_Pass_Function(Pass=1) # Create some kind of deshaker log or whatever.
ForceProcessAVI() # Force Pass 1, creating log (A function From TWriteAVI plug)
A_Two_Pass_Function(Pass=2) # Use created log
return Last

The ForceProcessAVI function forcibly processes both video and audio streams (ie reads each frame/sample in sequence),
so that any eg log files produced by either video and/or audio processing filter will be forcibly written to disk.
ForceProcessAVI/WAV are runtime functions not filters and so only return on completion.

Simultaneous play and save AVI

WhateverSource(...)
FN="Output.AVI"
FOURCC="ULY0" # Ut_Video
TWriteAVI(FN,Overwrite=true,fourcc=FOURCC).
return Last


Do some kind of processing and save AVI, Then play Lossless file.

WhateverSource(...)
FN="Output.AVI"
FOURCC="ULY0" # Ut_Video
Sharpen(0.3) # Whatever
TWriteAVI(FN,Overwrite=true,fourcc=FOURCC). # Write Sharp AVI whilst clip is played
ForceProcessAVI() # Force Write above TWriteAVI file without playing clip.
AVISource(FN) # Load Saved AVI
return Last # Play Sharpened AVI lossless clip



Function TWriteAvi(clip c,String filename,bool "overwrite"=false,bool "showall"=false,string "fourcc"="",int "dwChannelMask"=-1)
ForceProcessAVI(clip c)
Force Process clip c, ie read from first to last frame, for TWriteAVI writes the AVI file (Video + Audio) without having to play clip.
Function TWriteWAV(clip c,String filename,bool "overwrite"=false,int "dwChannelMask"=-1)
ForceProcessWAV(clip c)
Force Process clip c audio only, ie read from first to last audio sample, for TWriteWAV writes the WAV file (Audio) without having to play clip.


Here:- http://forum.doom9.org/showthread.php?t=172837

StainlessS
3rd February 2016, 00:13
SawBones/FrameSurgeon v1.00, a VirtualDub/Avisynth script, utility combo to edit bad frames.
Create Command file in VirtualDub with Sawbones, and use Command file in Avisynth script function FrameSurgeon().


SawBones v1.00

SawBones, is a compiled AutoIt script utility, intended to assist in creating Avisynth command file for FrameSurgeon.avs script.

SawBones is used together with VirtualDub and NotePad. You must run the app, with BOTH VirtualDub and the
NotePad Editor VISIBLE, you can scroll through a video clip, and press eg CTRL/DELETE to insert a FrameSurgeon DELETE (DEL n) command
for the current frame into the NotePad Editor. You press the keys with VDub as the active window (not NotePad).
SawBones requires VirtualDub, VirtualDubMod will not be recognised (It does not provide marked ranges in Status Bar).
After creating Command file in NotePad, Save as eg Command.txt and provide it as eg FrameSurgeon(Cmd="Command.txt").

*** Current frame is shown in VirtualDub in the middle of the status bar. ***
*** Ranges are marked in VirtualDub via HOME and END keys, shown at Left of status bar (when marked). ***
*** FXd clips (where d is Digit 1-9) are user provided to FrameSurgeon.avs function and default to source clip if not user supplied. ***
*** Interpolation commands in FrameSurgeon are for YV12 and YUY2 only, others any colorspace. ***

It is important to NOT do any VirtualDub clip editing, if you eg delete a frame in VirtualDub, then all frames after that frame will
be off by 1, and so all SawBones edited ranges/frames inserted later into NotePad file will be also off by 1.
The VDub loaded clip can be either an AVI or AVS clip, it makes no difference, you could eg have a stacked multi-window frame
open in VDub so as to choose from your FXd clips.

All SawBones Keyboard commands that are inserted into NotePad Text file:-

CTRL/F1 CopyFromPrevious frame to current frame (ie replace current frame n with frame n - 1. (CP n)
CTRL/F2 CopyFromNext frame to current frame (ie replace current frame n with frame n + 1. (CN n)

CTRL/1 Replace current frame with same frame from FX1 clip. (FX1 n)
CTRL/2 Replace current frame with same frame from FX2 clip. (FX2 n)
CTRL/3 Replace current frame with same frame from FX3 clip. (FX3 n)
CTRL/4 Replace current frame with same frame from FX4 clip. (FX4 n)
CTRL/5 Replace current frame with same frame from FX5 clip. (FX5 n)
CTRL/6 Replace current frame with same frame from FX6 clip. (FX6 n)
CTRL/7 Replace current frame with same frame from FX7 clip. (FX7 n)
CTRL/8 Replace current frame with same frame from FX8 clip. (FX8 n)
CTRL/9 Replace current frame with same frame from FX9 clip. (FX9 n)

CTRL/SHIFT/1 Replace range with same range from FX1 clip. (FX1 s,e)
CTRL/SHIFT/2 Replace range with same range from FX2 clip. (FX2 s,e)
CTRL/SHIFT/3 Replace range with same range from FX3 clip. (FX3 s,e)
CTRL/SHIFT/4 Replace range with same range from FX4 clip. (FX4 s,e)
CTRL/SHIFT/5 Replace range with same range from FX5 clip. (FX5 s,e)
CTRL/SHIFT/6 Replace range with same range from FX6 clip. (FX6 s,e)
CTRL/SHIFT/7 Replace range with same range from FX7 clip. (FX7 s,e)
CTRL/SHIFT/8 Replace range with same range from FX8 clip. (FX8 s,e)
CTRL/SHIFT/9 Replace range with same range from FX9 clip. (FX9 s,e)

CTRL/SHIFT/ALT/1 Interpolate current frame n using n-1 and n+1 as source frames. (I1 n)
CTRL/SHIFT/ALT/2 Interpolate 2 frames starting at current frame n, using n-1 and n+2 as source frames. (I2 n)
CTRL/SHIFT/ALT/3 Interpolate 3 frames starting at current frame n, using n-1 and n+3 as source frames. (I3 n)
CTRL/SHIFT/ALT/4 Interpolate 4 frames starting at current frame n, using n-1 and n+4 as source frames. (I4 n)
CTRL/SHIFT/ALT/5 Interpolate 5 frames starting at current frame n, using n-1 and n+5 as source frames. (I5 n)
CTRL/SHIFT/ALT/6 Interpolate 6 frames starting at current frame n, using n-1 and n+6 as source frames. (I6 n)
CTRL/SHIFT/ALT/7 Interpolate 7 frames starting at current frame n, using n-1 and n+7 as source frames. (I7 n)
CTRL/SHIFT/ALT/8 Interpolate 8 frames starting at current frame n, using n-1 and n+8 as source frames. (I8 n)
CTRL/SHIFT/ALT/9 Interpolate 9 frames starting at current frame n, using n-1 and n+9 as source frames. (I9 n)

CTRL/DELETE Delete current frame. (DEL n)
CTRL/SHIFT/DELETE Delete range (DEL s,e)


NOTE, By default, SawBones uses Inclusive END frame ranges (same as Avisynth) whereas VDub uses Exclusive END frame ranges,
ie range 100,102 in Avisynth is 3 frames (100 to 102), in VDub it is only 2 frames (100 to 101), you can change default behaviour
to behave the same as VDub by Running SawBones.Exe at least once and changing the auto created SawBones.ini file contents
to "RangeEndIsExclusive=1". If using default setting "RangeEndIsExclusive=0", then if a marked Range is shown in status bar as
"100-102" then range used will be 3 frames, if "RangeEndIsExclusive=1" then range used will be 2 frames.
It is easy to see what is happening as the NotePad window will be visible and after each insertion into NotePad, an ENTER key
will also be sent to move the cursor down one line, each command is on its own line. If you make a mistake, it is easy to
just switch to NotePad window and delete the erroneous line.

Where same frames are flagged for replacment mulitple times, later one will take precidence.
All frame/range deletes will be done AFTER replacements, multiple deletes on same frame will only result on single frame deletion.
Already Interpolated frames/ranges CANNOT be replaced and will produce an error (In avs script), but they can be deleted.

FrameSurgeon.avs requires MvTools, GScript, RT_Stats, FrameSel, ClipClop and Prune Plugins.

AutoiIt compiled executable with source provided, just click Menu Tools/build to create executable (In Scite4AutoIt3 editor).
Requires AutoIt3 and Scite4AutoIt3 editor to re-build executable.

ssS



Function FrameSurgeon(clip c, String "Scmd",String "Cmd",bool "Show",Int "ShowMode",int "dv",
\ clip "FX1",clip "FX2",clip "FX3",clip "FX4",clip "FX5",clip "FX6",clip "FX7",clip "FX8",clip "FX9",
\ int "pel",int "sharp",int "rfilter",Float "ml") {

FrameSurgeon() by StainlessS:-
Requires MvTools[(c) Manao], GScript[(c) Gavino], RT_Stats, FrameSel, ClipClop and Prune Plugins [(c) StainlessS].
Any colorspace, Interpolation commands in FrameSurgeon for YV12 and YUY2 only.

Replace/Delete damaged frames using commands in a either command string or file (one command per line in both file and string).
If both string (SCmd) and file (Cmd) commands supplied, then File Processed first and then String later (relevant as later
replacements take precedence where a frame replaced more than once). Any deletes take place AFTER ALL replacements have been done.
Interpolation Commands are available for YV12 and YUY2 only due to MVTools usage (fails if 'Id' commands used in other colrspaces).

Args-:
c, Source clip.
SCmd, Default "", Commands supplied as string.
Cmd, Default "", Commands supplied as FileName. (Either SCmd or Cmd MUST be supplied).
Show: Default False, Show Info on Frame.
ShowMode: Default 0, When Show==true, then 0=Show ClipClop metrics(post replacement), else if 1 Show Prune Metrics(post Delete).
Dv, Default 0, ClipClop and Prune DebugView level (0 - 4, Need DebugView utility)
FX1-FX9, Default c, Defaults to source clip, and if Show==True then Subtitled as eg "FX1" in frame center.
User Replacement clips. eg could use FX1 clip as Light Denoise, FX2 as Medium Denoise or whatever.
Interpolation args:- MvTools args. Used for 'Id' commands (where d = digit 1 to 9).
pel Default 2, Default as for MSuper(), ie 2, range=1 or 2 or 4
sharp Default 2, Default as for MSuper(), ie 2, range=0 -> 2
rfilter Default 2, Default as for MSuper(), ie 2, range=0 -> 4
ml Default 100.0, Default as for MFlowInter(), ie 100.0, range=greater than 0.0.

Supported commands (where n=frame number, s= range start frame, e=range end frame, d is digit '1' to '9'
NOTE, e range End Frame behaves as in trim eg -20 means 20 frames starting at frame s, e=0 means to last frame):-
"CP n" CopyFromPrevious ie replace frame n with frame n - 1.
"CN n" CopyFromNext ie replace frame n with frame n + 1.
"I1 n" Interpolate 1 frame n (using frames n-1 and n+1 as Interpolation source frames, (Id commands YV12, YUY2 only).
"I2 n" Interpolate 2 frames starting at frame n, (using frames n-1 and n+2).
"I3 n" Interpolate 3 frames starting at frame n, (using frames n-1 and n+3).
"I4 n" Interpolate 4 frames starting at frame n, (using frames n-1 and n+4).
"I5 n" Interpolate 5 frames starting at frame n, (using frames n-1 and n+5).
"I6 n" Interpolate 6 frames starting at frame n, (using frames n-1 and n+6).
"I7 n" Interpolate 7 frames starting at frame n, (using frames n-1 and n+7).
"I8 n" Interpolate 8 frames starting at frame n, (using frames n-1 and n+8).
"I9 n" Interpolate 9 frames starting at frame n, (using frames n-1 and n+9).
"FXd n" Replace frame n with same frame from FXd clip, eg "FX3 100" replace frame 100 with same frame from FX3 clip.
"FXd s,e" Replace range s to e with same range from FXd clip.
#
"-n" Delete frame n
"DEL n" Delete frame n
"-s,e" Delete frames s to e
"DEL s,e" Delete frames s to e

Here:- http://forum.doom9.org/showthread.php?p=1755859#post1755859

martin53
15th February 2016, 21:13
xNLMeans doom9 forum thread (http://forum.doom9.org/showthread.php?t=172966)
CPU-based 'Non Local Means' denoiser implementation with some extensions for improved usability, please see manual for details

Chikuzen
5th March 2016, 05:54
I wrote a new? plugin.

yadifmod2 (https://github.com/chikuzen/yadifmod2) = yadif + yadifmod for avs2.6/avs+

Binary download (https://github.com/chikuzen/yadifmod2/releases)

If you find a bug, please report here (https://github.com/chikuzen/yadifmod2/issues).

ChiDragon
8th March 2016, 00:39
Thanks. Seems to work fine in 2.6 after installing the 2015 redistributable x86.

Sharc
8th March 2016, 13:56
yadifmod2 works here as well. Thank you.

StainlessS
11th March 2016, 18:03
MediaInfo Client library MIFO_Lib v1.01
MIFO_Library.Avsi v1.01, MediaInfo library routines.
Req GScript, RT_Stats, CallCmd. Using MediaInfo Cli v0.7.83

Library of script functions to access MediaInfo Command Line version, to provide media information on named media file.
Can do Template String and Template file searches (best for Info Display), and extract individual parameter items
(for making decisions in real time, eg source filter selection based on whether AVI is lossless [AviSource] or Lossy [FFMPegSource or L-Smash to Index the file]).
Also can extract full/Raw information or only specific sections.

here:- http://forum.doom9.org/showthread.php?t=173268

Fizick
18th March 2016, 05:04
I wrote a new? plugin.

yadifmod2 (https://github.com/chikuzen/yadifmod2) = yadif + yadifmod for avs2.6/avs+

Binary download (https://github.com/chikuzen/yadifmod2/releases)

If you find a bug, please report here (https://github.com/chikuzen/yadifmod2/issues).
Sorry, I do not have github account. I like results for DV with opt=0. :)
Optimized modes work fine, but results are wrong - strange pixels.

StainlessS
27th March 2016, 03:42
I've just found a nice little utility 'Virtual Magnifying Glass', can be configured to show R,G,B values and coords under mouse.

Here:- http://magnifier.sourceforge.net/

StainlessS
17th April 2016, 23:52
MorphDupes_MI script.

Finds runs of duplicates and replaces them with either Interpolated or blended frames.

Planar, YUY2. Audio, no change. Multi-Instance capable.

http://forum.doom9.org/showthread.php?p=1764865#post1764865

StainlessS
7th May 2016, 23:31
Recent versions of ffmpeg for some reason seem to be heavy on CPU usage, so I'de like to set it permanently to Below Normal or Low Priority.


Prio v2.0.0.2960 (Process Priority Saver) (c) 2005-2011 OK Software.

Tool to Permanently Set Process Priority in Windows XP, and Win 7 [EDIT: Vista too if you care about that], (not Win 8 or above).

Prio is a very easy solution to this problem of Windows Task Manager not saving priorities because it’s actually an
add on component for Task Manager itself giving it the ability to do just that. This means you don’t have another
full blown program running in the background, only a Prio service exe consuming a tiny 384KB.

See Prio here:- http://www.prnwatch.com/prio/
And results of Virustotal scan on executable (0/56) here:- https://www.virustotal.com/en/file/593f35d595aa891f3e2a705da37098c1fd00653740850a5103a57b6e7981927e/analysis/1462641694/
Free for personal use.
EDIT: Prio saves its ini file in "%APPDATA%\prio.ini", on my XP system,
"Documents and Settings\UserName\Application data\prio.ini" but is also available
via the new Task Manager Menu "Prio\User Settings" option so you can inspect or manually edit (comes up in NotePad,
just clear all text or delete the ini to reset to all defaults).

For those with Win8 and above, perhaps something here will be of use
5 Tools to Permanently Set Process Priority in Windows:- https://www.raymond.cc/blog/permanently-set-process-priority-in-windows-task-manager-with-prio/

EDIT:
for some reason seem to be heavy on CPU usage

Windows pretends to be pre-emptive, ie says that it does not require application cooperation for task switching to occur,
this just aint really true. It seems that one of the ways in which Windows performs its trickery is to do task switching
upon calls to the OS (a Windows run of the mill app will usually spend about 90% of run time in OS).
In the past, an app had to call a specific function every now and then so that task switching could occur, they have
replaced this old requirement by strategically scattering task switching checking on OS entry and probably several
additional opportune times whilst inside the OS. Upshot of this is, that if an app does not call the OS over long periods
of time then task switching is so very bad (everything else in system grinds to a nearly halt). Try writing a Visual Basic
program to do nothing but loop indefinitely without calling anything else, it will be a bit of a struggle to try and get some
kind of control so that the offending task can be killed. (I have never tried that on a multi-processor system, perhaps it
does not perform so badly).
My old Sinclair QL computer from 1984/85-ish, had no problems whatever in doing proper task scheduling [EDIT: 32KB OS incl a Pascal like SuperBasic interpreter and rudimentary windowing system], and you could write a machine code program that did nothing after startup except loop around forever, and at highest priority [127 of 127], and it was no problem at all to switch to command line (Basic interpreter) and suspend or kill the offending task, why can windows not do this more than 17 years later ? (XP, or 30 years Win10, I expect W10 is exactly the same).
EDIT: Above in red no longer true, was true for Windows NT (and I think Windows 2000) but no longer so.

Anyway, I suspect that ffmpeg is spending less time in OS (or greater periods between calls) than it used to, hence the minor problems on
my dual core Core Duo XP32.

EDIT: Have installed and set ffmpeg to Low Priority, working well. When I'm not busy, ffmpeg ambles along at close to 100% CPU,
and can eg copy files across network without interference from ffmpeg hogging the cpu (and little difference to ffmpeg speed).
Would normally if eg copying file across network taking 2 mins for copy, and starting ffmpeg, suddenly copy time shoots up to 45 mins,
this no longer happens at all, and CPU still up around 100% and little difference to ffmpeg speed and none to copy speed.
I am a happy bunny. http://www.cosgan.de/images/smilie/tiere/c020.gif

StainlessS
29th June 2016, 13:30
ScriptEd,
Avisynth Script Editor Plugin, for VirtualDub Deep Color modification (A recent VirtualDub Modification by Shekh)
EDIT: 'VirtualDub Deep Color', is a pseudonym for VirtualDub FilterMod.
EDIT: VirtualDub Deep Color AKA VirtualDub FilterMod, now known as VirtualDub2. (A rose by any other name would still smell :) )

VirtualDub Deep Color modification itself:- http://forum.doom9.org/showthread.php?t=172021
Open high bit depth formats like tiff, sgi, ffv1, ... whatever supported by ffmpeg.
Apply "rgb levels" filter - this way can inspect what is the quality of image (whether gradients are actually high precision).
Crop, flip, convert format also work.
Export at full precision as tiff sequence.
Basically, everything that current version of VirtualDub does, Plus More.


ScriptEd, A simple Avisynth/VapourSynth script editor plugin for VDDC:- https://sourceforge.net/p/vdfiltermod/wiki/scripted/

A simple script editor with functionality very similar to that implemented in VirtualDubMod.

Currently implemented for ALL:-
CTRL/G Goto (Script Line or Frame Number)
CTRL/Z Undo
CTRL/Y Redo
CTRL/F Find
F3 Find Next
SHIFT/F3 Find Prev
CTRL/N New file
CTRL/O Open File
CTRL/S Save File
F5 Save and reopen at current frame.
F7 Save and open.
Menu Only Revert
CTRL/SHIFT/O Insert FileName
CTRL/SPACE Start code completion


Currently implemented for Avisynth:-
Avisynth Syntax hi-liting and external functions hi-liting and completion
CTRL/P Insert current frame number
CTRL/R Insert Range
CTRL/T Insert Trim with range
CTRL/I Import Frameset as Trims (replicate VDub range deletions into script).
CTRL/SHIFT/ALT/C Comment selected.
CTRL/SHIFT/ALT/U UnComment selected.

Currently implemented for VapourSynth:-
VapourSynth Syntax hi-liting and external functions hi-liting and completion
CTRL/P Insert current frame number



ScriptEd is implemented as a plugin for VirtualDub Deep Color, and as such could be fairly easily extended for further functionality
without having to re-compile the entire VDub Deep Color App
VapourSynth frame/range insertions should be quite simple to add, mostly copy/paste if someone knows VS/Python syntax for doing so,
ie how is range specified, with comma or hyphen?, how do you specify a Trim(), or multiple Trim()'s with AlignedSplice in between them,
basically that is pretty much all that is required together with some copy/paste.

All Hail Shekh http://www.cosgan.de/images/smilie/musik/k015.gif

EDIT: ScriptEd Plugin will appear in VDDC Menu/Tools/

StainlessS
16th July 2016, 11:24
GamMac v1.00 , Gamma Machine.


GamMac(), An extraordinary Idea by VideoFred. Coded by StainlessS.
http://forum.doom9.org/showthread.php?t=173683

RGB Only. Useful to correct color cast on old 8mm films.
Alters channel pixel average to match LockChan using Gamma correction. (By default alters Red and Blue channels to match Green).
Additional tweaking via RedMul, GrnMul and BluMul.

GamMac(clip c,int "LockChan"=1,Float "LockVal"=128,
\ Float "RedMul"=1.0,Float "GrnMul"=1.0, Float "BluMul"=1.0,
\ Float "MinLim"=32.0,Float "MaxLim"=255.0-32.0,float "GamLo"=0.25,Float "GamHi"=4.0,Bool "Show"=false)


LockChan Default 1. -1 -> 2. -1=Lock to LockVal. 0=Red. 1=Green. 2=Blue. Chan for lock to Ave.
LockVal, default 128.0. Ignored if LockChan != -1. 0.0 < LockVal < 255.0
RedMul, default 1.0. 0.0 < RedMul <= 10.0. Red channel adjustment.
GrnMul, default 1.0. 0.0 < GrnMul <= 10.0. Green channel adjustment.
BluMul, default 1.0. 0.0 < BluMul <= 10.0. Blue channel adjustment.
MinLim, default 32.0. 0.0 < MinLim < 255.0 If any channel average smaller than this, then no effect on channel.
MaxLim, default 255.0-32.0. MinLim < MaxLim < 255.0 If any channel average greater than this, then no effect on channel.
GamLo, default 0.25. 0.1 <= GamLo <= 10.0. Upper value for guess gamma (starting guess range and limit)
GamHi, default 4.0. GamLo < GamHi <= 10.0. Lower value for guess gamma (starting guess range and limit)
Show, default false. True, show info.


Home Thread here:- http://forum.doom9.org/showthread.php?t=173695

johnmeyer
16th July 2016, 20:31
Many thanks. Can't wait to try this out. -John

Reel.Deel
24th July 2016, 16:40
Inspired by RgbAmplifier (http://forum.doom9.org/showthread.php?t=168293), which I couldn't get to work, I've written a plugin called amp (http://horman.net/avisynth/amp.zip).


Hi David,

Something I just noticed, the amp link above is correct but on your homepage is wrong, along with the discussion link.

MWilson
31st July 2016, 12:25
ChromaJig v1.6a - Automatic Colorization

http://forum.doom9.org/showthread.php?p=1775733#post1775733

MWilson
5th August 2016, 04:01
Found a couple plugs on github, KelvinColorShift and HealDeadPixels: https://github.com/ladipro/avisynth_filters/releases

StainlessS
6th August 2016, 22:09
qCombed() v1.00, new plugin, mod of IsCombed (c)Donald Graft.


qCombed(), by StainlessS @ Doom9.org. http://forum.doom9.org/showthread.php?p=1776495#post1776495

Runtime function to establish combing status of video frames, or to write a frames file of combed frames [Intent for ClipClop() use].

ColorSpace, Planar and YUY2. (v2.5 dll but as only examines the luma channel can also function with v2.6 colorspaces).

qCombed() is a mod of IsCombed from DeComb plugin for Avisynth, (c) Donald Graft. [can be found here:- http://rationalqm.us/mine.html].


qCombed has two modes of operation, can use in conditional filter eg Scriptclip() or ConditionFilter() [just like IsCombed()],
and also has complete clip scan and frames file writing capability builtin.

qCombed(clip c,int "Threshold"=20,String "FileName"="",int "ClipIndex"=1,Bool "Range"=False,String "RngSep"="",int "n"=current_frame)

Args:-

Threshold, default 20. Threshold used to establish combed-ness, 0 <= Th <= 255. [same as for IsCombed(Threshold)].

FileName, default "". When filename is default "", qCombed will behave the same as IsCombed() and all other args with exception
of Threshold (and additional 'n') are totally ignored.
When in this mode it uses current_frame as set at each frame by runtime script functions eg Scriptclip()
and WriteFileIf() or ConditionalFilter(). In addition, you can use it within at compile time eg in a GScript
script and interogate frames by setting the n arg to the desired frame number. In this mode the function returns
a Bool status, True = Combed.
If you set FileName to eg "ClipClop_Cmd.txt", it will switch modes from default IsCombed() style
function, to a function which scans entire clip and writes a frames command file. In this mode, all other
args (with exception of 'n', which is ignored) are also valid. Will take time to scan entire clip but
output file will exist on return, and qCombed() will return the number of combed frames in clip as Int.

ClipIndex, default 1. Ignored unless FileName != "", ie in File Writing mode. By Default writes a ClipClop() style frame command file
where commands may look like:
1 100 # Clip index 1, frame 100. (where arg Range=False, or single frame range).
1 200,210 # Clip index 1, frames 200 -> 210 (where arg Range=true).
The clip index (1 as above) is a requirement in ClipClop which supports up to 256 clips, and so needs a clip index.
A ClipIndex of -1, will omit the clip index and just write the frames or ranges.
Valid range -1 -> 255 although 1 is probably the only sensible setting for ClipClop (clip 0 being the unaltered source clip).

Range, Default false. If False (default), writes all frame numbers on individual lines, else if true, then concatenates adjacent
frames into ranges (single frame range will write only a single frame number).

RngSep, Default "". RangSep of "" will be converted to ',' COMMA and used only if Range is True, as shown above in "1 200,210".
Can set RngSep to any character Chr(32) SPACE to Chr(126), only the first character in string is used.

n, n defaults to current_frame when FileName is default "", ie Conditional filter mode, but can be given explicitly as
arg in eg GScript script. When FileName != "", n has no function.



See thread here:- http://forum.doom9.org/showthread.php?p=1776495#post1776495

raffriff42
26th September 2016, 13:23
SmoothLimiter, a slightly improved Limiter (http://avisynth.nl/index.php/Limiter).
* Add a transition zone or "knee" to avoid "flat-topping" gradients.
* Independent limits in black,white,yellow,blue,green & red.

https://www.dropbox.com/s/dlxze946a69hrs9/SmoothLimiter-demo-input.png?raw=1

https://www.dropbox.com/s/yx5qkx9jcqkc4kb/SmoothLimiter-demo-k0.png?raw=1

https://www.dropbox.com/s/7umqvbpehntck3o/SmoothLimiter-demo-k3.png?raw=1

However,
* Don't try to use it as "color correction", or focus on a particular color.
* For example, don't try to kill reds while leaving all other colors untouched - it won't work.

Version 2, supports high bit depth; requires AVS+## requires MaskTools
## requires http://avisynth.nl/images/Utils-r41.avsi
Import("Utils-r41.avsi")

## converted to AVS+ 18-Apr-2017
## refined 3-Oct-2017
##################################
### range limiter with soft 'knee' transition, (AVS+)
### supports independent yellow, blue, green & red limits
### (not for secondary color correction)
##
## @ ymin - black limit; range 0 (no change) to max (extreme) (<=128 depending on <k>)
## @ ymax - white limit; min (extreme) (>=128 depending on <k>) to 255 (no change)
## @ y - 'yellow' (-u) max; range 0.0 (extreme) to 1.0 (default, no change)
## @ b - 'blue' (+u) max
## @ g - 'green' (-v) max
## @ r - 'red' (+v) max
## @ k - "knee" (transition zone); range 0 (none) to 9 (max); default 3
##
## Examples
## | ## all default arguments:
## | SmoothLimiter(0, 255, y=1.0, b=1.0, g=1.0, r=1.0)
## | ## restrict mainly blue:
## | SmoothLimiter(0, 255, y=0.5, b=0.24, g=0.5, r=0.5)
##
function SmoothLimiter(clip C,
\ int ymin, int ymax,
\ float "y", float "b",
\ float "g", float "r",
\ int "k")
{
bits = C.BitsPerComponent
s255 = getFullscale(bits)

k = Min(Max(0, Default(k, 3)), 9)
sk = scbf(8, bits, k)

mmax = 128 - (8 * k)
mmin = 128 + (8 * k)

ymin = scbf(8, bits, Min(Max(0, ymin), mmax))
ymax = scbf(8, bits, Min(Max(mmin, ymax), 255))

umin = scbf(8, bits, Min(Max(0, 128-Round(128.0*Default(y, 1.0))), 124))
umax = scbf(8, bits, Min(Max(132, 128+Round(128.0*Default(b, 1.0))), 255))

vmin = scbf(8, bits, Min(Max(0, 128-Round(128.0*Default(g, 1.0))), 124))
vmax = scbf(8, bits, Min(Max(132, 128+Round(128.0*Default(r, 1.0))), 255))

s = "((x<"+scbs(8, bits, 128)+") "
\ + "? ((x>LO_k) ? x : ((x * LO_s) + xMIN)) "
\ + ": ((x<HI_k) ? x : ((x-HI_k) * HI_s + HI_k)))"

ymin_k = ymin + Round(sk / 16.0 * 128) ## '_k' = knee point
ymax_k = ymax - Round(sk / 16.0 * 128)
ymin_s = (ymin_k-ymin) / Max(0.001, Float(ymin_k)) ## '_s' = slope
ymax_s = (ymax-ymax_k) / Max(0.001, s255-ymax_k)

sy = (ymin==0 && ymax==s255) ? "x"
\ : s.ReplaceStr("xMIN", String(ymin))
\ .ReplaceStr("LO_k", String(ymin_k))
\ .ReplaceStr("HI_k", String(ymax_k))
\ .ReplaceStr("LO_s", StrinF(ymin_s, 3))
\ .ReplaceStr("HI_s", StrinF(ymax_s, 3))

umin_k = umin + Round(sk / 16.0 * 128)
umax_k = umax - Round(sk / 16.0 * 128)
umin_s = (umin_k-umin) / Max(0.001, Float(umin_k))
umax_s = (umax-umax_k) / Max(0.001, Float(s255-umax_k))

su = (umin==0 && umax==s255) ? "x"
\ : s.ReplaceStr("xMIN", String(umin))
\ .ReplaceStr("LO_k", String(umin_k))
\ .ReplaceStr("HI_k", String(umax_k))
\ .ReplaceStr("LO_s", StrinF(umin_s, 3))
\ .ReplaceStr("HI_s", StrinF(umax_s, 3))

vmin_k = vmin + Round(sk / 16.0 * 128)
vmax_k = vmax - Round(sk / 16.0 * 128)
vmin_s = (vmin_k-vmin) / Max(0.001, Float(vmin_k))
vmax_s = (vmax-vmax_k) / Max(0.001, Float(s255-vmax_k))

sv = (vmin==0 && vmax==s255) ? "x"
\ : s.ReplaceStr("xMIN", String(vmin))
\ .ReplaceStr("LO_k", String(vmin_k))
\ .ReplaceStr("HI_k", String(vmax_k))
\ .ReplaceStr("LO_s", StrinF(vmin_s, 3))
\ .ReplaceStr("HI_s", StrinF(vmax_s, 3))

return C.mt_lut(
\ yexpr=mt_polish(sy),
\ uexpr=mt_polish(su),
\ vexpr=mt_polish(sv),
\ chroma="process")
}

Original version:## requires MaskTools

##################################
### range limiter with soft 'knee' transition,
### supports independent yellow, blue, green & red limits
### (not for secondary color correction)
##
## @ ymin - black limit; range 0 (no change) to 124 (extreme)
## @ ymax - white limit; range 132 (extreme) to 255 (no change)
## @ y - 'yellow' (-u) max; range 0.0 (extreme) to 1.0 (default, no change)
## @ b - 'blue' (+u) max
## @ g - 'green' (-v) max
## @ r - 'red' (+v) max
## @ k - "knee" (transition zone); range 0 (none) to 9 (max); default 3
##
## @ Example
## SmoothLimiter(0, 255, y=0.5, b=0.24, g=0.5, r=0.5)
##
function SmoothLimiter(clip C,
\ int ymin, int ymax,
\ float "y", float "b",
\ float "g", float "r",
\ int "k")
{
ymin = Min(Max(0, ymin), 124)
ymax = Min(Max(132, ymax), 255)

umin = Min(Max(0, 128-Round(128.0*Default(y, 1.0))), 124)
umax = Min(Max(132, 128+Round(128.0*Default(b, 1.0))), 255)

vmin = Min(Max(0, 128-Round(128.0*Default(g, 1.0))), 124)
vmax = Min(Max(132, 128+Round(128.0*Default(r, 1.0))), 255)

k = Min(Max(0, Default(k, 3)), 9)

s = "((x<128) "
\ + "? ((x>LO_k) ? x : ((x * LO_s) + xMIN)) "
\ + ": ((x<HI_k) ? x : ((x-HI_k) * HI_s + HI_k)))"

ymin_k = ymin + Round(k / 16.0 * 128) ## '_k' = knee point
ymax_k = ymax - Round(k / 16.0 * 128)
ymin_s = (ymin_k-ymin) / Max(0.001, Float(ymin_k)) ## '_s' = slope
ymax_s = (ymax-ymax_k) / Max(0.001, Float(255-ymax_k))

sy = (ymin==0 && ymax==255) ? "x"
\ : s.StrReplace("xMIN", String(ymin))
\ .StrReplace("LO_k", String(ymin_k))
\ .StrReplace("HI_k", String(ymax_k))
\ .StrReplace("LO_s", String(ymin_s, "%0.3f"))
\ .StrReplace("HI_s", String(ymax_s, "%0.3f"))

umin_k = umin + Round(k / 16.0 * 128)
umax_k = umax - Round(k / 16.0 * 128)
umin_s = (umin_k-umin) / Max(0.001, Float(umin_k))
umax_s = (umax-umax_k) / Max(0.001, Float(255-umax_k))

su = (umin==0 && umax==255) ? "x"
\ : s.StrReplace("xMIN", String(umin))
\ .StrReplace("LO_k", String(umin_k))
\ .StrReplace("HI_k", String(umax_k))
\ .StrReplace("LO_s", String(umin_s, "%0.3f"))
\ .StrReplace("HI_s", String(umax_s, "%0.3f"))

vmin_k = vmin + Round(k / 16.0 * 128)
vmax_k = vmax - Round(k / 16.0 * 128)
vmin_s = (vmin_k-vmin) / Max(0.001, Float(vmin_k))
vmax_s = (vmax-vmax_k) / Max(0.001, Float(255-vmax_k))

sv = (vmin==0 && vmax==255) ? "x"
\ : s.StrReplace("xMIN", String(vmin))
\ .StrReplace("LO_k", String(vmin_k))
\ .StrReplace("HI_k", String(vmax_k))
\ .StrReplace("LO_s", String(vmin_s, "%0.3f"))
\ .StrReplace("HI_s", String(vmax_s, "%0.3f"))

return C.mt_lut(
\ yexpr=mt_polish(sy),
\ uexpr=mt_polish(su),
\ vexpr=mt_polish(sv),
\ chroma="process")
}

# http://avisynth.nl/index.php/HDColorBars
##################################
function StrReplace(string base, string findstr, string repstr)
{
pos = FindStr(base, findstr)
return (StrLen(findstr)==0) || (pos==0)
\ ? base
\ : StrReplace(
\ LeftStr(base, pos-1) + repstr +
\ MidStr(base, pos+StrLen(findstr)),
\ findstr, repstr)
}

vcmohan
2nd January 2017, 08:10
Three plugins to work with avisynth+ r2347 are added. These are
1. FQPlus (http://forum.doom9.org/showthread.php?t=174161)
2.modPlus (http://forum.doom9.org/showthread.php?t=174162)
3.movePlus (http://forum.doom9.org/showthread.php?t=174163)

The links take to discussion threads.

martin53
5th March 2017, 22:20
Tiny helper plugin StrResolve (https://forum.doom9.org/showthread.php?p=1799667#post1799667) mainly for masktools expressions

vcmohan
8th March 2017, 12:48
TxPlus (http://www.avisynth.nl/users/vcmohan/TxPlus/index.html) is a plugin having over 20 transition functions, similar to TransAll of avisynth. TxPlus supports all bit depths and color formats (except stacked formats). Discussion here (http://forum.doom9.org/showthread.php?t=174399)

martin53
10th March 2017, 22:10
Not really new, though - released about 2015.
AudioTimeline (https://forum.doom9.org/showthread.php?p=1710421#post1710421).
Similar to Waveform or AudioGraph. Intended to observe a bigger time interval, e.g. several seconds or minutes of audio under the video, also when making thubsheets every x minutes.

fieliapm
10th April 2017, 19:52
There is new version of VideoInputSource:

discussion (https://forum.doom9.org/showthread.php?t=170311)

binary (https://github.com/fieliapm/himawari_avs_plugin/raw/master/VideoInputSource/VideoInputSource.dll)

source (https://github.com/fieliapm/himawari_avs_plugin/tree/master/VideoInputSource)

Everyone can use it to grab video frame from video capture card or webcam in real-time

StainlessS
14th April 2017, 00:33
FredAverage().
A simple average filter for Avisynth v2.6 standard colorspaces, only.
Returns a clip where each return frame is a single color average of input frame, same size and colorspace as input.
Does an invert on result if Bool Invert==true.


FredAverage, (not to be confused with RedAverage).

Avisynth v2.6 only plugin.

ColorSpace, YV12, YV16, YV24, YV411, Y8, YUY2, RGB24, RGB32, only.

Return clip Y, U and V, or R, G and B, will be channel averages, unless Invert==True, where channels averages will be inverted.

FredAverage(clip c, Bool "Invert"=false)

Invert, Default false == sampled average. Otherwise Inverted average.

Returns clip same colorspace and size as input.


See home thread here:- https://forum.doom9.org/showthread.php?t=174520

fieliapm
16th April 2017, 18:09
avsi4comp (https://forum.doom9.org/showthread.php?t=172972) - some utility functions help video editing/compositing easily in AviSynth
Not well documented yet, but example scripts in example directory show that how to use them.

It is compatible with AviSynth 2.5x,2.6x,and AviSynth+

StainlessS
7th June 2017, 20:23
StrFmt,

Simple plugin to produce formatted string, and additional function to string replace with another string.


StrFmt(String format, dat1,...,datn)

Returns a formatted string. The unnamed 'format' string and optional unnamed 'dat' args are used to construct the text string that is
returned, uses C/CPP printf() style formatting.
Format: compulsory string controlling format and describing the datn type args that are expected.
datn: Variable number of data args of any type (excluding clip).

printf Format spec here:- http://msdn.microsoft.com/en-us/library/56e442dc%28v=vs.71%29.aspx
NOTE, the only support for printing Bool variables is %s as string, ie prints "True" or "False".

Formatting supported, %[flags] [width] [.precision] type

flags, one of "-,+,0, ,#"
width, integer, "*" supported (width supplied via dat arg).
Precision, integer, "*" supported (precision supplied via dat arg).
type,
"c,C,d,i,o,u,x,X", Integer type, c,C=character, d,i=signed, o,u,x,X=unsigned (o=octal, x=Hex).
"e,E,f,g,G", Floating point type
"s,S", String type (also Bool).

Formatting Insertion point is marked with '%' character in the format string (as in Avisynth String function), if you wish to use
a percent character within the returned string, it should be inserted twice in the format string ie '%%' will produce a single '%'.
The data datn arg strings do not require a double '%' character.

A Backslash character '\' introduces escape sequences, to insert a backslash character itself, you must supply a double
backslash sequence ie '\\'.
Converts embedded escape character sequences (Case Significant):-
'\\' Converted to '\' Single Backslash
'\n' Converted to Chr(10) NewLine
'\r' Converted to Chr(13) Carriage Return
'\t' Converted to Chr(9) Horizontal TAB
'\v' Converted to Chr(11) Vertical TAB
'\f' Converted to Chr(12) FormFeed
'\b' Converted to Chr(8) BackSpace
'\a' Converted to Chr(7) Bell
'\x', where x is ANY OTHER CHARACTER not included above, will be copied verbatim, ie '\x'.

eg
StrFmt("Hello there %s and %s.\nGoodbye %d.","Fred","Ted",2013)
would return same as:- "Hello there Fred and Ted." + Chr(10) + "Goodbye 2013."

*****
*****
*****

StrRep(string source,string find,string replace,bool "sig"=True) # Based on Algorithm by Vampiredom, Gavino & IanB.
String args 'source', 'find' and 'replace' unnamed and compulsory.
Takes a source string, searches for all occurences of find string and replaces the found strings with the replace string.
Can use "" in replace string (only in replace) to delete the found substrings from the source string.
Newlines are treated no differently to other characters, and could be replaced/deleted.
'sig' arg,default true is Case Significant. Set false for case insignificant find string.


See home thread here:- http://forum.doom9.org/showthread.php?t=174649

real.finder
16th January 2018, 05:06
can this https://github.com/DmitryUlyanov/deep-image-prior be avs/avs+ plugin?

it look interesting

StainlessS
21st January 2018, 20:58
FrameStore v0.01 - Avs+ x86/x64

FrameStore_ReadMe.txt

FrameStore(clip c) # by StainlessS
Requires VS 2008 runtimes.

An Avisynth v2.6, Filter to both take and produce a single frame.
All standard AVS+ v2.6 Colorspaces.

The function creates a store for FRAME 0 of the input clip c.
The function is intended to sever the link between a frame and any clips that it is reliant upon.



A=Colorbars.trim(0,-1) # 1 frame
B=A.FlipVertical # B is reliant upon clip A
C=A.Overlay(B,Opacity=0.5) # C is reliant upon clips A and B

D=C.FrameStore # D is not reliant upon A, or B, or C.

return D


https://forum.doom9.org/showthread.php?p=1831346#post1831346

introspected
2nd February 2018, 20:31
AutoOverlay - new plugin to auto-align two clips in different modes with histogram matching: https://github.com/introspected/AutoOverlay
Discussion (https://forum.doom9.org/showthread.php?t=175247)

`Orum
24th March 2018, 10:30
DupStep (https://forum.doom9.org/showthread.php?t=175338), a frame deduplicator (CFR to VFR conversion; eventually will support VFR to VFR). Similar to other filters like DeDup, but adds support for things they don't have (e.g. deep color). It can also emulate other filters perfectly given certain parameter restrictions, e.g. ExactDedup(_keeplastframe=true). Supports only 64-bit environments.

StainlessS
1st April 2018, 22:20
New Script function, Duplicity() v1.01,


Duplicity(), by StainlessS @ Doom9.
A two faced scheming and double dealing [on your behalf] de-dupe tool. [writes duplicate frame number/ranges to Frames file].

Req RT_Stats v1.43 + CallCmd (c) StainlessS, + GSCript + Grunt (c) Gavino.
[GScript not needed if Avs+, Will Not AutoDelete DBase if CallCmd not available]

Avs 2.6 Planar, YUY2, RGB24/32 (RGB converted to Luma-Y using Matrix arg, defaults to PC levels 601/709 based on Width & Height).

DeDuppers use some method to determine if a frame is a duplicate of its predecessor, a typical measuring method might be
LumaDifference (average absolute luma difference per pixel), unfortunately the result of such measure may be due to a small
frame global change (lots and lots of pixels change by a small amount), or a smaller number of pixels change by a
larger amount, both these cases could produce the exact same result. Another case may be that of a very small number of
pixels change by a very large amount (eg a person closing a fist with remainder of frame static) and such measure might seem
to be a duplicate as it could produce much smaller numbers than a frame global change of a small amount.

Duplicity() uses a double measurement system, Primary measurement (LumaDifference) to detect frames 'Unique' to their immediate
predecessor (large or 'frame Global' changes), and a Secondary method to determine if 'Non-Unique' frames are either 'Low Motion'
or 'Duplicate' frames. This second measurement method is LumaPixelsDifferent (result 0.0->255.0 where 255.0 is equivalent to
100.0%, user args for this method actually require Duplicity arg 'IgnorePercL' in range 0.0->100.0%).
LumaPixelsDifferent(as far as this dupe function is concerned), compares frames and shows percent of pixels whose
corresponding pixel absolute luma difference is greater than Int arg 'ThL', if this percent difference is greater than 'IgnorePercL',
then it is deemed to be a 'Low motion' frame and if less or equal to 'IgnorePercL' then is a duplicate ('IgnorePercL' can be
0.0, meaning any pixels at all with difference greater than 'ThL' is a 'Low Motion' Frame). Where both 'ThL' and 'IgnorePercL'
are 0 and 0.0 respectively, will show percentage of pixels that are not Exactly the same. 'IgnorePercL' could be set to 0.0
in which case the function is governed soley by any pixel differences exceeding 'ThL', or can set 'IgnorePercL'= eg 0.001%
meaning the it will disregard as noise 1 pixel difference exceeding 'ThL' in every 100,000 pixels [eg 1 pixel in every
316x316 region].

The function determines if the current frame is a 'Unique' frame or not (via 'ThG' LumaDifference to predecessor), if Unique,
then the job is done and is considered a Non-Duplicate, these Unique frames are marked in a DBase as Unique. If a frame is
'Non-Unique', then the function scans both backwards and forwards looking for 'Unique Start' and 'Unique End' frames (and if
necessary, marking them in DBase). This Backwards/Forwards scanning permits jumping around in the clip for perusal and getting
exact same results as if travelling forwards only (even backwards traversal only, should work just fine). When the
'Unique Start' and 'Unique End' frames are established, we then know the extent of the unknown (unvisited) frames, and can scan
and measure those with the second measurement method (LumaPixelsDifferent) to determine Low Motion/Dupe status.
When determining Low Motion/Dupe status, we compare with an 'Anchor Frame', which at the beginning of a 'Non-Unique' sequence
is the 'Unique Start' frame. When scanning a Duplicate sequence the 'Anchor Frame' is the predecessor frame to the very first
duplicate in the current sub sequence of the 'Non-Unique' sequence, so potential duplicates are not necessarily compared with
their immediate predecessor. When a frame is determined to be 'Low Motion' (not a dupe), any detected duplcates are written to
the DBase and also to the output Frames file, and it switches to detecting sequences of 'Low Motion' frames within the
'Non-Unique' sequence. On each detected 'Low Motion' frame, the Anchor frame for the next frame (whether it be another
'Low Motion' frame or a new 'Dupe' frame) will be switched to that newly detected 'Low Motion' frame. With this method,
all frames BETWEEN (but excluding) the 'Unique Start' and 'Unique End' in the 'Non-Unique' sequence are detected as perhaps
multiple 'Low Motion' and 'Duplicate' sub sequences.
Setting LagMax arg to some low number (min 1), will limit distance of the Anchor frame prior to the current frame, eg setting
LagMax=1, would always do LoMo/Dupe compare with the current frame and its predecessor.

Although you might be able to scan backwards and get same detections, results are written to file in visited sequence and
you should NOT jump about whilst writing the final frames file. Also, this is a Multi-Instance script, can use multiple instances
at the same time (view side by side metrics) but you should really choose a unique 'Frames' filename for each instance.


https://forum.doom9.org/showthread.php?t=175357
EDIT: Update to v1.01.

StainlessS
28th April 2018, 14:57
FDecimate2 v2.00 - 28 Apr 2018

FDecimate2, mod of FDecimate v1.02.
FDecimate2, fixes some problems with bugged metrics in FDecimate v1.02.
EDIT: Also adds support for RGB32/24 and 8 bit v2.60 Planar colorspaces.

Dll's for Avisynth v2.58 x86, v2.60 x86 and x64.

Here:- https://forum.doom9.org/showthread.php?p=1840557#post1840557

MWilson
1st May 2018, 20:00
New Script Functions, Trog and WDG. For Reducing Grain.
Requires RGTools, Median, DFTTest, and UU_MT_Blend.

function trog(clip v,int "tr",bool "push")
{###(c) MWilson 2018
tr=default(tr,12)
push=default(push,true)
v=v.converttoyv12()
repair(v.temporalmedian(tr,true),v,18,18,18)
return (push==true) ? repair(last.m10(),last,18,18,18) : last
}

function wdg(clip v,int "sigma")
{###(c) MWilson 2018
sigma=default(sigma,32)
v=v.converttoyv12()
grainreduced=v.dfttest(sigma=sigma)
mask=merge(v,grainreduced.Invert())
darkened=mask.coloryuv(cont_y=768)
darkened.temporalmedian(1,true).m10()
coloryuv(cont_y=-127)
grainmask=last
return uu_mt_blend(grainreduced,grainmask,1,"gmerge",3)
}

function m10 (clip y)
{###(c) MWilson 2018
y=y.converttoyv12()
a1=y.trim(1,-0)
a2=y.trim(2,-0)
a3=y.trim(3,-0)
a4=y.trim(4,-0)
a5=y.trim(5,-0)
a6=y.trim(6,-0)
a7=y.trim(7,-0)
a8=y.trim(8,-0)
a9=y.trim(9,-0)
a10=y.trim(10,-0)
merge(a10,a9,.05)
merge(last,a8,.1)
merge(last,a7,.15)
merge(last,a6,.2)
merge(last,a5,.25)
merge(last,a4,.3)
merge(last,a3,.35)
merge(last,a2,.4)
merge(last,a1,.45)
merge(last,y,.5)
c=last
return c
}

ifb
2nd June 2018, 19:55
Probably not worth it's own thread, but I made a bar generator for VapourSynth. NTSC on up to 8K is supported with SDR/HDR (HLG, PQ) and 709/2020 primaries.

ColorBars is a filter for generating test signals. The output is a single frame of color bars according to SMPTE RP 219-1, 219-2, or ITU-R BT.2111-0. For NTSC, the bar pattern is described in SMPTE EG 1. For PAL, EBU bars are generated.

https://github.com/ifb/vapoursynth-colorbars

videoh
2nd June 2018, 22:20
Sweet, that will come in handy. Thanks for your work, ifb.

StainlessS
24th July 2018, 16:03
ForceProcess v1.00 - 24 July 2018

A standalone drop in replacement for RT_Stats v2.0(currently Beta11) RT_ForceProcess().


ForceProcess(), v1.00, By StainlessS @ Doom9

Requires VS2008 CPP runtimes,

ForceProcess(clip, bool "Video"=True,bool "Audio"=false,Bool "Debug"=True) :- Returns 0


If Video (default true), Force read every frame of clip from 0 to FrameCount-1.
If Audio (default false), Force read every sample of clip from 0 to NumberOfSamples-1.
Useful where a clip outputs some kind of file for use in a second filter, this function would in such a case
forcibly read and therefore write the file, so that it may be available to other filters or to a second pass of the filter that
initially wrote the file.
Debug, default true. Write Progress to DebugView.

The ForceProcess function forcibly processes both video and audio streams (ie reads each frame/sample in sequence),
so that any eg log files produced by either video and/or audio processing filter will be forcibly written to disk.
ForceProcess is a runtime function not filter and so only returns on completion.

Example:

Two Pass:

WhateverSource(...)
A_Two_Pass_Function(Pass=1) # Create some kind of deshaker log or whatever.
ForceProcess() # Force Pass 1, creating log
A_Two_Pass_Function(Pass=2) # Use created log
return Last


https://forum.doom9.org/showthread.php?t=175616

wonkey_monkey
27th August 2018, 02:04
pixelscope, a debugging filter to display pixel values.

https://forum.doom9.org/showthread.php?p=1849850

https://i.imgur.com/lrn7ZmO.png

StainlessS
2nd September 2018, 19:51
DirtBox_MI_v0.03.avs New filter.

Fixes damage like this (two consecutive damaged frames, left fixed with metrics, right bad source, middle Zebra dc detection clip)


Frame Before Bad Frames pair [showing LHS detection metric of 4.598, and hilited 'L' flag denoting left Source frame for interpolation]
https://s20.postimg.cc/4ox3enegp/Dirt_Box_MI_v0.03_165.jpg (https://postimg.cc/image/4ox3enegp/)
First of bad frame pair
https://s20.postimg.cc/u7pfrosvt/Dirt_Box_MI_v0.03_166.jpg (https://postimg.cc/image/u7pfrosvt/)
Second of bad frame pair
https://s20.postimg.cc/51ohkuzbd/Dirt_Box_MI_v0.03_167.jpg (https://postimg.cc/image/51ohkuzbd/)
Frame after bad frame pair [showing RHS detection metric of 2.303, and hilited 'R' flag denoting right Source frame for interpolation]
https://s20.postimg.cc/5r79x87kp/Dirt_Box_MI_v0.03_168.jpg (https://postimg.cc/image/5r79x87kp/)
(Above top frame, LHS detection [left of damage detection is shown in the rhs metric], the damage is to the right, bottom frame RHS detection, the damage is to the left)

Or Flash Frame Photography (static or near static cam), where Th arg might want to be somewhat bigger.
Adjust Th setting by viewing RHS RAT metrics on frame before bad frames, so that it is below the lowest bad frame metrcs ratio.


DirtBox_MI(), v0.03

[ Take your time saying the name out aloud when in public place ].

Req:- GScript OR Avs+, Grunt, MvTools2, Masktools2, RemoveGrain, CallCmd, RT_Stats v1.43.
CallCmd() optional, will auto delete DBase on clip closure if present.
YUV Only (well whatever MvTools2 + MaskTools2 supports).

Function DirtBox_MI(clip c,clip "dc"=c,Float "Th"=1.3,Float "ThMin"=0.5,Int "MinLen=1",Int "MaxLen"=2,
\ Int "SPad"=16, Int "SSharp"=1, Int "SRFilter"=4, [* MSuper *]
\ Int "ABlkSize"=16, Int "AOverlap"=4, Int "ASearch"=3,Int "ADct"=0, [* MAnalyse *]
\ Int "RBlkSize"=8, Int "ROverlap"=2, Int "RthSAD"=100, [* MRecalculate *]
\ Float "Iml"=200.0, Bool "IBlend"=True, Int "IthSCD1"=400, Int "IthSCD2"=130, [* MFlowInter *]
\ Int "OthSCD1"=400,Int "OthSCD2"=130, [* Detect Override *]
\ bool "Show",Int "Chop",String "SurgeonFile",String "OverrideFile"
\ )

Args:-
c, Source clip.
dc, Detection Clip, Default c. Must have same number of frames as Src c, no other requirement.
Intent to use eg Zebra Bands to better tune for detection, Used only for primary detect of
leftmost and rightmost frames where damage occurs.

Th, Bad Ratio Threshold, default 1.3. If eg Cur->Nxt / Max(Prv->Cur,0.001) > Th then Nxt
frame is possble 1st of damaged frames (but Cur->Nxt must also be >= ThMin as described below).
Suggest much higher for flash frame detection (probably dont need Zebra dc clip)..
Default Th of 1.3 is VERY sensitive, take care with this setting, it could well chew up your
prized video clip.
ThMin, Difference of Cur->Nxt must be at least this to detect Left 'breakup'. default 0.5.
(Avoid detection where current frame is a duplicate of prev frame and Cur->Nxt diff is very small.)
[Same in reverse for detecting RHS breakup]. Do Not set to 0.0, ie OFF.

MinLen, Minimum length of damaged sequence to fix, default 1.
MaxLen, Maximum length of damaged sequence to fix, default 2 (1 <= MinLen <= MaxLen <= 9).
MaxLen provides the maximum supported by the FrameSurgeon script, ie 9, and so will not be
increased further.
Suggest only use MaxLen of 9 where Th is really quite high, bare minimum of maybe 5.0 or
perhaps even 10.0, even then is probably a bit dodgy.

MSuper args:
SPad, Default 16, See MvTools MSuper(hpad=8,vpad=8) [We use same for both].
SSharp, Default 1, See MvTools MSuper(sharp=2)
SRFilter, Default 4, See MvTools MSuper(rfilter=2)

MAnalyse args:
ABlkSize, Default 16, See MvTools MAnalyse(BlkSize=8,BlkSizeV=8) [We use same for both].
AOverLap, Default 4, See MvTools MAnalyse(OverLap=0)
ASearch, Default 3, See MvTools MAnalyse(Search=4)
ADct, Default 0, See MvTools MAnalyse(Dct=0). Using other than default value can be VERY slow.

MRecalculate args:
RBlkSize, Default 8, See MvTools MRecalculate(BlkSize)
NOTE, RBlkSize = 0 Will Switch OFF MRecalculate, probably a bit faster at possible expense of quality.
ROverlap, Default 2, See MvTools MRecalculate(Overlap)
RthSAD, Default 100, See MvTools MRecalculate(thSAD=200)

MFlowInter args:
Iml, Default 200.0, See MvTools MFlowInter(ml=100.0)
IBlend, Default True, See MvTools MFlowInter(Blend=True). Blend or copy frame at scene change.
IthSCD1, Default 400, See MvTools MFlowInter(thSCD1=400) : (0 < IthSCD1 <= (8*8)*255)
IthSCD2, Default 130, See MvTools MFlowInter(thSCD2=130) : (0 < IthSCD2 <= 255)
Threshold which sets how many blocks have to change for the frame to be considered as a
scene change. It is ranged from 0 to 255, 0 meaning 0 %, 255 meaning 100 %.
Default is 130 (which means 51.0%).
Used by MvTools2 MFlowInter during interpolation.

Detection Override args:
OthSCD1, Default 400. as MVTools MSCDetection arg. (0 < OthSCD1 <= (8*8)*255). See MvTools2.
OthSCD2, Default 130. as MVTools MSCDetection arg. (0 < OthSCD2 <= 255)
These two thresholds govern whether frames either side of bad sequence are determined to be
from the same scene, if not from Same scene then detection is Overidden and 'E' flag is set in metrics,
on what would have been the 1st/leftmost interpolation Source frame.
NOTE, If OthSCD1 > 8*8*255 or OthSCD2 > 255 then switches OFF scene change testing, will NOT override
any detections that seem to have good frames either end from different scenes. (will likely
result in blended scene transitions).

Metrics Args:
Show, Show Metrics, default True.
Chop, Show Mode if Show=True,
0 Normal
1 Left half of frame is fixed, Right original.
2 Top half of frame is fixed, Bottom original.

File Output args:
SurgeonFile, Default "FrameSurgeonCmd.txt". If Non "", then writes a FrameSurgeon() command file to
recreate result, so can manually edit the result file and re-render in FrameSurgeon.
[part of the Sawbones/FrameSurgeon combo which also requires ClipClop()].
If using Multi-instances, each instance should have its own SurgeonFile file.

OverrideFile, Default "Overridden.txt". Detected Sequences that were Overridden because the interpolation
source frames seemed to be from Different scenes
[In FrameSurgeon() format,
"I2 666" would be two frame bad seq starting at frame 666, where interp src frames would have
been frames 665 and 668].

Dc clip implemented to assist in detection, where can use eg Zebra() to create a 'tuned to error' diagnostic clip.
Most damage will likely occur horizontally (in eg VHS tracking gunk), and so we might use Zebra Default Row=true
to create a vertical set of Zebra bars (same height as clip c), and can use the Zebra args, Threshold, Lo and Hi,
to tune some of the bars to better reveal where errors occur. If any of the bars seem of no use, then best
get rid of those bars (crop) so as not to 'water down' the detection metrics.
May be able to detect several kinds of frame corruption, including flash frames, up to 9 frames catered for.
Where it can detect flash frames, will only likely be possible where frames are from the SAME SCENE, not two
different scenes separated by white gunk.
Dc clip probably not needed for flash photography flashes.
To deal with Interlaced clip, can eg SeparateFields / SelectEven/Odd and handle each separately, then weave them
back together again afterwards. Is multi-instance capable and so (despite use of global vars) will work just fine.
Probably better to not jump about, jumping into middle of bad sequence will start detect from jump point,
but OK to go backwards where already visited.

Shows Flags where hi-lited,
E = End Of Scene
Shown only on 1st detected Interpolation Src frame (frame before bad sequence starts).
Override where detected bad seq interpolation source frames are NOT from same scene (by OthSCD1 and OthSCD2)
0 = Any Digit 0 to 9, 0 when E flag not hi-lited, else digit representing length of bad sequence
that was Overridden as for E flag above.
L = Left Intep Src frame
R = Right Interpolate Src frame,
* = Interpolated frame.


Here:- https://forum.doom9.org/showthread.php?t=175708

StainlessS
14th January 2019, 19:21
RandomSource(), Simple source filter prodcing RGB32 640x480@24 FPS clip by default, random colored for test purposes.

dll's for avs v2.58, Avs/+ v2.60 x86 & x64.
Requires VS2008 CPP Runtimes,
Here:- https://forum.doom9.org/showthread.php?p=1862844#post1862844

https://i.postimg.cc/Cz1fvq45/Random.jpg (https://postimg.cc/Cz1fvq45)

wonkey_monkey
14th January 2019, 20:42
warp, a filter to correct or distort video geometry using control points. Also includes a new version of quad.

https://forum.doom9.org/showthread.php?p=1862853

Demo/tutorial video: https://www.youtube.com/watch?v=SG1eex7HmLM

https://i.imgur.com/5Aerv2g.png

StainlessS
4th February 2019, 02:21
TitleBar, v1.02, new plug.


TitleBar() - by StainlessS @ Doom9:- https://forum.doom9.org/showthread.php?t=176062

Requires VS2008 CPP Runtimes.

VIDEO: Planar, YUY2, RGB32, & RGB24.

Plugin's for both Avisynth v2.58 and v2.6 (avs+ x86 & x64).

Filter to Add a 20 pixel Black TitleBar to top of clip, and to write a title string and optional Frame Number to each frame.
Uses DDigit text renderer & where showing FrameNumber, does not require ScriptClip() filter call.

Titlebar(clip c,String "Tit"="",Bool "ShowFrameNo"=True,Int "Col"=$000000,String "ColChr"="",Bool "Esc"=True)

Tit, Default "", Title string to write above video clip to the TitleBar.
The Tit title string may also contain Escape codes if Esc Arg is True, see later.

ShowFrameNo, Default True. If True, then also writes Frame Number as in eg "1234] My Title String".

Col, Default $000000. RGB color of the TitleBar background.

ColChr, Default "" (Starting Color = default). A single character as a string which sets the Starting color used for printing the FrameNumber/Title text.
If the ColChr string contains more than a single character, it will throw an error.
Valid single character can be any one of these (upper or lower case):-
"0123456789ABCDEF" # 16 Color character codes '0' to 'F'
"GHIJKLMNOPQRSTUV" # 16 Greyscale character codes in ascending order of lightness 'G' to 'V' ($00 -> $FF)
"-!*" # 3 Specials,
# '-' = Default color. : As '7' [White] in Color colorspace : As 'S' [Near white $CC] in Y8.
# '!' = HiLite color. : As 'A' [Orange] in Color colorspace : As 'V' [White $FF] in Y8.
# '*' = Silently converted to '-', ie Default color. (Only has real meaning embedded in the Tit title string).

Esc, Default True. If True, then Escape codes "\a?", and "\x??" can be used to embed data into Tit Title string (The 'a' and 'x' MUST BE LOWERCASE).
Where "\a?", '?' is any character valid as in above ColChr, enables changing color on title bar, within the Tit title string.
In such a case, "\a*" switches to the OnEntry or Starting color, ie same color as set via ColChr.
Where "\x??", each '?' character MUST BE an UPPERCASE hex digit '0' -> 'F'. Enables embedding 8 bit Hex character code into the Tit title string.
You can use eg "\\x00" to embed a literal sequence of "\x00" into the title string, ie "\\" embeds a single backslash and so does not interpret as hex insertion code.
Use similar to avoid color escape code eg "\\a-" to embed literal "\a-".
Esc=False, does NOT process color Escape codes nor Hex insertion Escape code.
NOTE, the only character in range 0->31 that can be used in Tit title string is BEL [chr(7)] (where "\a" is converted to BEL color switch code), all other codes
in range 0->31 (eg chr(9) TAB) are converted to SPACE character. Also, CarriageReturn(13) and Newline(10) will terminate the title string early, eg you cannot
use Newline(10) to print on the input clip [neither as "\n" nor Chr(10)].
Likewise, characters $E0 -> $FF will be converted to SPACE character (they also do not exist in font).

eg,

# Chr(137) [$C9]is Copyright symbol (c).
ColChr = "!" # Hilite Code (takes effect from FrameNumber as ShowFrameNumber=True)
Return ColorBars.Titlebar("TitleBar \a-\xC9 StainlessS \a*2019",True,ColChr,Esc=true) # FrmNo=Hilite, copyright in Default, Year in same as FrmNo

COLOR TABLE:-
# Ordinal Color ColChr or eg("\a0" for embedded DARKGRAY)
00) DARKGRAY "0"
01) DODGERBLUE "1"
02) ORANGERED "2"
03) ORCHID "3"
04) LIME "4"
05) AQUAMARINE "5"
06) YELLOW "6"
07) WHITE "7"
08) SILVER "8"
09) CORNFLOWERBLUE "9"
10) ORANGE "A"
11) PLUM "B"
12) CHARTREUSE "C"
13) POWDERBLUE "D"
14) GOLD "E"
15) GAINSBORO "F"
#
# Grey ColChr
16) $00 "G"
17) $11 "H"
18) $22 "I"
19) $33 "J"
20) $44 "K"
21) $55 "L"
22) $66 "M"
23) $77 "N"
24) $88 "O"
25) $99 "P"
26) $AA "Q"
27) $BB "R"
28) $CC "S"
29) $DD "T"
30) $EE "U"
31) $FF "V"
# Specials
DEFAULT "-"
HILITE "!"
ON_ENTRY "*"
###################################

TitleBarTest.avs
############
ColorBars(width=1024)
# Chr(137) [$89]is Copyright symbol (c).
SHOWFRAMENO = true
COLCHR = "!" # Hilite Code (takes effect from FrameNumber if ShowFrameNumber=True, Else takes effect on Tit title string)
ESC = True
Titlebar("Title\aDBar \a-\x89 \a2S\a3t\a4a\a5i\a6n\a8l\a9e\aAs\aBs\aCS \a*2019",ShowFrameNo=SHOWFRAMENO,ColChr=COLCHR,Esc=ESC)
############


https://i.postimg.cc/NKbwVGYZ/Titlebar-Test.jpg (https://postimg.cc/NKbwVGYZ)


See here:- https://forum.doom9.org/showthread.php?t=176062

StainlessS
12th March 2019, 23:26
Shuffle, plugin v1.03, (req VS 2008 runtimes). https://forum.doom9.org/showthread.php?t=176193


Shuffle, by StainlessS @ Doom9.

Shuffle spacial columns or rows (1D), or blocks(2D) of frames, or temporal shuffle (frame order), all shuffles Inversable, ie undoable.
Potential usage in clip obfuscation using 'secret keys', or slideshow random ordering of frames.

Plugin for all Avs/+ valid colorspace.
Dll's for Avs v2.58, v2.60/+ x86 and x64.

Shuffle1D_X(clip c, Int "Seed"=0, Int "blkW"=8, Bool "Once"=False, Bool "Inverse"=False ) # Horizontal 1D Shuffle
Shuffle1D_Y(clip c, Int "Seed"=0, Int "blkH"=8, Bool "Interlaced"=False, Bool "Once"=False, Bool "Inverse"=False ) # Vertical 1D Shuffle
Shuffle2D (clip c, Int "Seed"=0, Int "blkW"=8, Int "blkH"=blkW, Bool "Interlaced"=False, Bool "Once"=False, Bool "Inverse"=False ) # 2D Shuffle
ShuffleT (clip c, Int "Seed"=0, Bool "Inverse"=False ) # Shuffle Temporal, ie frame order.

c, Clip to Shuffle
Seed, -1=Random seed (Non inverse-able), 0 (default) same shuffle every time, Else any other int = UserSeed or 'SECRET_KEY'.
BlkW, Default 8, width of blocks or columns to shuffle.
(Must be compatible with X Crop args, eg 2 or multiple thereof for YV12, also must divide exactly into Width of clip, use crop or Addborders where necessary).
BlkH, Shuffle1D_Y Default=8. Shuffle2D Default=BlkW, NOTE, Changed from original default 8.
Height of blocks or rows to shuffle.
(Must be compatible with Y Crop args, eg 2 or multiple thereof for YV12, also must divide exactly into Height of clip, use crop or Addborders where necessary).
Interlaced, If True, then doubles minimum requirement of BlkH (Shuffle1D_Y and Shuffle2D ONLY).
eg YV12, where Interlaced=False blkH would require multiple of 2, and where Interlaced, Would would require multiple of 4, so as not to destroy interlacing.
Once, Default False. If true, then uses the same shuffle pattern for every frame, else shuffled differently for every frame.
Perhaps better compression if not using ShuffleT.
Inverse, Reverses previously done shuffling, Must Use Same Key as was used for the Shuffling stage (and maybe ideally all in reverse shuffle order).

Where ONLY 2 x 1D shuffles (ie both X and Y shuffling), then the order for de-shuffling does not matter, can use Inverse X and then Inverse Y or vice versa.
Shuffle2D is much better than 2x1D shuffles ie Shuffle1D_X + Shuffle1D_Y (or vice versa).
Shuffle2D together with either of the 1D shuffles is a bit pointless.
If using ShuffleT (frame order shuffle) suggest before or after ALL other shuffles, and in reverse order when Inverse = true.
If Inverse, then must uses same Seed, BlkW, BlkH, Interlaced and Once args to recover obfuscated source.
Seed, can be different for all Shuffle instances, if any of them use random seed (-1), you will not be able to inverse the result.
For ShuffleT(), source clip should be frame accurate and ideally not from eg DIVX/XDIV (they can often have a key frame only every 8 seconds or so, so would be VERY slow).

(Q) What use is seed=0 ? (A) Exact same sequence every time.
(Q) What use is Random seed ? (A) maybe for ShuffleT() of pics for slideshow.

The AVS Folder has a number of Demos (7 at time of writing) that will run with Colorbars or An Avi.

Some images from included scripts.

Shuffle_2x1D.avs
https://i.postimg.cc/jWPy4j45/Shuffle-2x1-D-00.jpg (https://postimg.cc/jWPy4j45)

Shuffle_2D.avs
https://i.postimg.cc/qNQPMk3N/Shuffle2-D-00.jpg (https://postimg.cc/qNQPMk3N)

Shuffle_Compared.avs
https://i.postimg.cc/VSmk2Lc5/Shuffle-Compared-00.jpg (https://postimg.cc/VSmk2Lc5)

Shuffle_T.avs
https://i.postimg.cc/LhY2CZZN/Shuffle-T-00.jpg (https://postimg.cc/LhY2CZZN)

Shuffle_3D.avs
https://i.postimg.cc/0b5RgMzT/Shuffle-3-D-00.jpg (https://postimg.cc/0b5RgMzT)

https://i.postimg.cc/wBnVvVF1/Shuffle-2x1-D.jpg (https://postimages.org/)

.

https://i.postimg.cc/BbPfFMfR/Shuffle2-D.jpg (https://postimages.org/)

.

https://i.postimg.cc/mDzT3bQd/Shuffle-Compared.jpg (https://postimages.org/)

see here:- https://forum.doom9.org/showthread.php?t=176193

wonkey_monkey
12th March 2019, 23:32
petrol stations open 24 hours (https://gasstation-nearme.com/open-24-hours)



:confused:

StainlessS
12th March 2019, 23:51
Thanks Wonkey, I had just spotted that myself, Not sure if PostImage slips in the odd advert into its links, I've seen the same thing at least once before.
Fixed.

StainlessS
6th April 2019, 03:22
NumCommandProcessor() v1.02


# NumCommandProcessor.avsi

NumCommandProcessor(), v1.02 by StainlessS @ Doom9 : https://forum.doom9.org/showthread.php?p=1870956#post1870956

Call some clip function with int command args taken from a Command String or File.
Can write/append generated commands to Logfile for further hand edit and frameserve with raw log commands and without NumCommandProcessor.

Required:-
RT_Stats v1.43+ [(c) StainlessS]
Avs+ [(c) Ultim, Pinterf & others], OR GScript [(c) Gavino].

NumCommandProcessor(clip c, String CMD,String CmdFunc,Int "NumMax"=c.Framecount-1,Int "NumMaxStep"=0,Bool "Reverse"=False,Bool "Debug"=True,String "LogFile"="",Bool "LogAppend") : returns result clip

Two modes of operation governed by CmdFunc string,

1 ) EMBEDDED single Number, eg "DeleteFrame(%d)" where Commands in CMD(String or File) must be single integer number only, no ranges allowed.
'%d' in above string is the insertion point for the integers read from CMD String or File.
If CmdFunc function is some kind of Delete or Insert function eg DeleteFrame or DuplicateFrame or RemovePixelRow or etc, then assuming the CMD string/file
integers are in ascending order, then should set Reverse=True, as when deleting/inserting something, higher number eg frames will move by 1 place due to the deleted/inserted frame/pixelRow.
In addition, if eg deleting frames, then should also set NumMaxStep=-1, to reduce the frame count so that validation check is decremented after each frame deleted.
If CmdFunc is some kind of Insertion function eg "DuplicateFrame(%d)" then should set NumMaxStep=1 as frame count will grow at every frame duplicate insertion.
If ANY kind of EMBEDDED non frame style function, eg "RemovePixelRow(%d)" then MUST set NumMax = c.Height-1 to validate cmd integers against height, and if eg
"RemovePixelColumn(%d)" then set NumMax = c.Width-1 (assuming that your clip is called c).

2 ) APPLYRANGE (NON-EMBEDDED), eg "Blur(1.58,1.58)" [NO insertion point ie no embedded '%d'].
In this mode, the CmdFunc is applied using ApplyRange with the numbers obtained from the CMD string/file (Can be single frame or range).

NEITHER of the above modes are of any use for trimming a clip, if you require command file for trimming ranges see
FrameSel Plugin (Especially SelectRanges.avs, which also requires Prune if trimming audio)
FrameSel:- https://forum.doom9.org/showthread.php?t=167971&highlight=FrameSel
Prune:- https://forum.doom9.org/showthread.php?t=162446
FrameSel SelectRanges.avs allows for Either Selecting or Rejecting command frames/ranges.

CMD, If First character is an Asterisk(*) then is interpreted as a multiline Command String of command numbers[one number/range per line], Otherwise a FileName of command numbers.
EMBEDDED mode allows only single Integers in CMD, whereas APPLYRANGE mode allows for 1 (frame) or 2 (range) on any command line.
Best if numbers/ranges in ascending order, and non overlapping ranges suggested (but not enforced).

CmdFunc, Function Name and optional positional insertion marker '%d' where the command number will be inserted, eg "DeleteFrame(%d)".
Do not include source clip, uses Last as in "DeleteFrame(%d)" or "Blur(1.58,1.58)".
See previously noted EMBEDDED and APPLYRANGE (NON-EMBEDDED) modes.
Do not use more than 1 insertion marker, it will produce error alert (there are no checks).

NumMax, Default c.FrameCount-1.
Maximum possible valid command number for validation, eg if "DeleteFrame(%d)" then use c.FrameCount-1, or for "RemovePixelRow(%d)" then c.Height-1,
For "RemovePixelColumn(%d)" use c.Width-1, etc (assuming that your clip is called c).
For APPLYRANGE (Non-EMBEDDED) mode, always set as as Default c.FrameCount-1.

NumMaxStep, Default 0. (Range: -1, or 0, or 1 ONLY)
Adjustment to NumMax validation check after some EMBEDDED mode delete or insert style CmdFunc,
eg use NumMaxStep=-1 for "DeleteFrame(%d)" or "RemovePixelRow(%d)" and NumMaxStep=1 for "DuplicateFrame(%d)" or "DuplicatePixelRow(%d)".
NOT USED in APPLYRANGE mode.

Reverse, Default False. If True, then Process CMD list of numbers in reverse order, from bottom of list to top, Else from top to bottom.
If eg Deleting or Inserting frames, then after each operation, all frames above would change their frame number, so must do in reverse order.
Probably does not really matter in APPLYRANGE mode unless ranges overlap (which they really should not).

Debug, Default True. Send Func calls to DebugView as each are called (Google DebugView) .

LogFile, Default "" ie No Log file. Give it a Filename to Produce log of commands used.

LogAppend, Default False. Only valid if LogFile!="". If True, then Append to existing Logfile, else Delete existing Logfile at Start.
LogFile and LogAppend, allow you to 'Collect' a bunch of generated commands for perhaps further hand edit, using NumCommandProcessor
just to generate a template with correct frames/ranges (including Reverse order if necessary, and validating ranges),
then make small adjustments eg Change Subtitle text or colors for one off adjustment.


Returns result clip after all commands executed, ALL processing of frames/ranges done before frame serving commences.

Eg >>>>>>>>>>>>>>>>>>>>>>>>>>>

Import(".\NumCommandProcessor.avsi")
Import(".\NumCommandUtility.avsi")
Import(".\PixelRemDup.avsi")

Colorbars(Width=1024,Height=768).KillAudio.ConvertToYV24.ShowFrameNumber

CMD="""* # <<<<<<<========== If 1st Character is Asterisk/Star ['*'] Then is a Command String, ELSE is a FileName.
100
200
300
400
500
"""
#CMD="CMD.txt" # Alternate use where numbers in File (same format)

RANGECMD="""* # <<<<<<<========== If 1st Character is Asterisk/Star ['*'] Then is a Command String, ELSE is a FileName.
100 149
200, 299
400
500 ,599
"""
#RANGECMD="RANGECMD.txt" # Alternate use where numbers in File (same format)


LOGFILE="MyLog.Log" # APPEND All to Log (Default="" ie not used)
LOGAPPEND=TRUE # APPEND All to Log (Default=FALSE, ie Delete LOG at start)

############################
## Pick One of below to Return, comment out others (Reverse assumes that CMD/RANGECMD are in ascending order)

## EMBEDDED mode frame Deletion / Insertion (Using CMD)
Return NumCommandProcessor(CMD,"DuplicateFrame(%d)",NumMaxStep=1,Reverse=True,LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # Embedded, Insertion so REVERSE=True and NumMaxStep=1
#Return NumCommandProcessor(CMD,"DeleteFrame(%d)",NumMaxStep=-1,Reverse=True,LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # Embedded, Deletion so REVERSE=True and NumMaxStep=-1

## APPLYRANGE modes (Using RNGCMD) NO Optional names allowed, and ALL (used) args in proper order (ApplyRange requirement).

#Return NumCommandProcessor(RANGECMD,"FlipVertical",LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # APPLYRANGE, Accept Defaults, Frame or Range Commands
#Return NumCommandProcessor(RANGECMD,"FlipHorizontal",LogFile=LOGFILE,LogAppend=LOGAPPEND).Info #
#Return NumCommandProcessor(RANGECMD,"Blur(1.58,1.58)",LogFile=LOGFILE,LogAppend=LOGAPPEND).Info #
#Return NumCommandProcessor(RANGECMD,"Sharpen(1.0,1.0)",LogFile=LOGFILE,LogAppend=LOGAPPEND).Info #
#Return NumCommandProcessor(RANGECMD,"Levels(24,1.2,220,16,235,false)",LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # NO Optional names allowed, and in order.
#Return NumCommandProcessor(RANGECMD,"""MySub("Hello, World!","Ariel",64,$FF5555,$0,5)""",LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # NO Optional names allowed, and in order.

## EMBEDDED pixel row/col Delete/Insert. (Using CMD)
## Assumes that you have RemovePixelRow, RemovePixelColumn, DuplicatePixelRow, and DuplicatePixelColumn script functions.

#Return NumCommandProcessor(CMD,"DuplicatePixelRow(%d)",NumMax=Height-1,NumMaxStep=1,Reverse=True,LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # Embedded, Insertion so REVERSE=True and NumMaxStep=1
#Return NumCommandProcessor(CMD,"RemovePixelRow(%d)",NumMax=Height-1,NumMaxStep=-1,Reverse=True,LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # Embedded, Deletion so REVERSE=True and NumMaxStep=-1
#Return NumCommandProcessor(CMD,"DuplicatePixelColumn(%d)",NumMax=Width-1,NumMaxStep=1,Reverse=True,LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # Embedded, Insertion so REVERSE=True and NumMaxStep=1
#Return NumCommandProcessor(CMD,"RemovePixelColumn(%d)",NumMax=Width-1,NumMaxStep=-1,Reverse=True,LogFile=LOGFILE,LogAppend=LOGAPPEND).Info # Embedded, Deletion so REVERSE=True and NumMaxStep=-1

<<<<<<<<<<<<<<<<<<<<<<<<<<<

See home thread here:- https://forum.doom9.org/showthread.php?t=176257

lansing
8th April 2019, 02:21
I don't get why are people still posting their software updates in this thread, the first post have not been update in 7 years...

ChaosKing
8th April 2019, 08:36
I don't get why are people still posting their software updates in this thread, the first post have not been update in 7 years...

You can always start exploring from the last post...

wonkey_monkey
8th April 2019, 10:27
I don't get why are people still posting their software updates in this thread, the first post have not been update in 7 years...

Because this is the "New Plugins and Utilities" thread. The first post may not be any use, but the last ones are.

fvisagie
8th April 2019, 12:30
Plus, subscribed users get the updates anyway.

StainlessS
8th April 2019, 13:49
This thread is monitored by RSS feeds all over the world (for new plugs).
sadly, whenever anybody posts some inane remark, the feeds also get that too, (like this inane remark) :(

lansing
8th April 2019, 15:51
You can always start exploring from the last post...

I thought the main purpose of this thread is to have a place for people who're looking for plugins to find them easily in a list with brief descriptions on the first post, like a wiki. And the fact that people were posting their new plugins here is to have them added to the first post so others can find them easily. Having regular users digging up the thread looking for plugin themselves completely defeated the purpose.

StainlessS
8th April 2019, 23:17
find them easily in a list with brief descriptions
It is for new/nearly new plugs that cannot be found anywhere else when initially posted.

At time when this thread was new, OP could handle a few new plugs and add to first post, but as gets bigger, then can no longer do that,
posts in Usage forum have max post size of 16KB, so when at max, can no longer expand (even if enthusiasm to do so has not died).
.

StainlessS
24th April 2019, 13:22
problem where eg dll has been downloaded from another computer or internet, and is blocked by the system because of this, you need to remove NTFS Alternate Data stream for the file.

Problem already posted about here[and some dozen posts following it]:- http://forum.doom9.org/showthread.php?p=1837271#post1837271

https://i.postimg.cc/13hhcYbq/Untitled.jpg (https://postimages.org/)

Solution, can Unblock via file Properties[as shown by above image arrow] , or use SysInternals Streams.exe or easiest found so-far is to use NirSoft "AlternateStreamView"
which allows mass removal via "Delete Selected Streams" menu option.
AlternateStreamView:- https://www.nirsoft.net/utils/alternate_data_streams.html

Below showing the Zone.Identifier Data that needs removal.
https://i.postimg.cc/HssDSyLp/Untitled.jpg (https://postimages.org/)


NOTE, some of Nirsoft tools may flag an Antivirus warning about PUP's (potentially unwanted programs), as many of its utils are sys fix tools to show passwords and such.
All Nirsoft tools are hi quality top notch tools and are nothing whatever to worry about [EDIT: So long as you download direct from NirSoft].

EDIT: After scanning all my drives, I found I had hundreds [if not thousands] of blocked files.

EDIT: Files are so blocked for your protection, only unblock if you think they are safe [non-malware].

EDIT:
To STOP all downloaded files from being blocked by system, under XP with GpEdit.msc, [Group Policy Editor].

gpedit.msc
User Configuration > Administrative Templates > Windows Components > Attachment Manager
Enable: "Do not preserve zone information in file attachments"

Above GpEdit.msc does NOT have an icon in Administrator tools (bit of a secret one and already exists in basic XP, Server 2003 Admin tools install not necessary), need use Start/Run or from command line.
For a easy removal of multiple Alternate Data Streams, can move all files to FAT32 partition [FAT32 dont support alternate data streams] and then move them back again.

EDIT: Below, Registry edit for fixing the problem [folder contents].

Folder: "STOP_DownloadedFileBlocking"

File: "!!! ENABLE Switches OFF file blocking !!!" [empty text file for info only]


File: "ENABLE_DoNotPreserveZoneInformationInFileAttachments_(FileBlockingIsDisabled).reg"

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments]
"SaveZoneInformation"=dword:00000001



File: "DISABLE_DoNotPreserveZoneInformationInFileAttachments_(FileBlockingIsReEnabled).reg"

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments]
"SaveZoneInformation"=dword:00000000

Groucho2004
24th April 2019, 13:41
All Nirsoft tools are hi quality top notch tools and are nothing whatever to worry about.I second that, they have very useful tools.

Groucho2004
7th May 2019, 00:46
Not exactly a new Avisynth plugin but I'll post it here anyway:

This plugin returns info about OS/CPU/Memory/Screen/etc.

https://i.postimg.cc/434z3c8z/SysInfo.png

Details in its dedicated thread (https://forum.doom9.org/showthread.php?t=176131).

StainlessS
22nd May 2019, 10:43
Function to estimate required rFactor for Nnedi3_RPow2() upscale function.
(Purpose is to enable automated decision for rFactor without human intervention.)


Function Estimate_Nnedi3_Rpow2(clip c,Int OutW,Int OutH, Float "Th"=Sqrt(2.0),Bool "Debug"=False) # https://forum.doom9.org/showthread.php?t=176437

Requires:- RT_Stats if DEBUG==True, else no requirements.

Estimate required rfactor for nnedi3_rpow2() based on greatest output dimension (OutW or OutH)

Returns Int, 1(dont use nnedi3_rpow2), or 2^(1->10).
c, Input clip, used to obtain input frame size.
OutW, Output resize clip Width.
OutH, Output resize clip Height.
Th, Default sqrt(2.0) ~ 1.4142 (range 1.0 <= Th <= 2.0), choice threshold.
Th=1.0 : Always upscale twice as much as required [DONT USE]
Th=1.5 : Produces rfactor that when upscaled greatest dimension is at least 50% greater than that produced by next lower rfactor (if that makes sense).
eg, out c.Width is biggest = 100, and Th = 1.5, then
result = 1 if OutW < 150 and 2 if OutW >= 150.
result = 2 if OutW < 300 and 4 if OutW >= 300.
result = 4 if OutW < 600 and 8 if OutW >= 600.
result = 8 if OutW < 1200 and 16 if OutW >= 1200.
Th=1.1 : eg, out c.Width is biggest = 100, and Th = 1.1, then (10% greater)
result = 1 if OutW < 110 and 2 if OutW >= 110.
result = 2 if OutW < 220 and 4 if OutW >= 220.
result = 4 if OutW < 440 and 8 if OutW >= 440.
result = 8 if OutW < 880 and 16 if OutW >= 880.
Th=2.0 : Never upscale enough [DONT USE]
Debug, Default False. When true return Messageclip with some debug info, else return Int rFactor result.

Simple Client using Debug mode (requires RT_Stats)

BlankClip(width=100,height=100)

Estimate_nnedi3_rpow2(600,600,1.5,Debug=TRUE)

Return Last

https://i.postimg.cc/htdnNngL/pow-00.jpg (https://postimages.org/)

Default Th=SqRt(2.0), Assuming both dimensions equally scaled and upscaling between 1.0 and 2.0 times, then SqRt(2.0) threshold is broken when Input clip is to be doubled in Area.
Similar decision when deciding between rFactor of 2 and 4, 4 and 8, etc.

Home thread here:- https://forum.doom9.org/showthread.php?t=176437

StainlessS
12th June 2019, 18:35
For the few of you Math Monsters on-site (many probably know bout these already),

Free Stuff:

MicroSoft Mathematics,
From WikiPedia:- https://en.wikipedia.org/wiki/Microsoft_Mathematics

MicroSoft Mathematics
Microsoft Maths also known as Microsoft Mathematics is a freely downloadable educational program, designed for Microsoft Windows, that allows users to solve math and science problems. Developed and maintained by Microsoft, it is primarily targeted at students as a learning tool.

Also versions for Windows phone available, and Office addons.
x86 and x64 version, XP compatible,

M$ Download:- https://www.microsoft.com/en-us/download/details.aspx?id=15702#tm

EigenMath:- http://www.eigenmath.org/
Eigenmath is a symbolic math program for people who need to compute with symbols as well as numbers.
Produces some nice output
https://i.postimg.cc/fkM5m0z1/Eigen-Math.jpg (https://postimg.cc/fkM5m0z1)

https://i.postimg.cc/Mv38hS3K/Eigen-Math-2.jpg (https://postimg.cc/Mv38hS3K)

https://i.postimg.cc/ZW9hmMXP/Eigen-Math-3.jpg (https://postimg.cc/ZW9hmMXP)

Script

y=1/3x^2

y

Result
https://i.postimg.cc/xqkGKyrx/Eigen-Math-4.jpg (https://postimg.cc/xqkGKyrx)

EDIT: EigenMath executable is only 570KB, expanded entire folder incl PDF docs and tutorial video ~ 4.5MB. (Very small in comparison to similar type programs).
Non install, easily portable.

wonkey_monkey
30th June 2019, 13:36
Info2 (https://forum.doom9.org/showthread.php?p=1878222), a replacement for the built-in Info() filter:

https://i.imgur.com/c4rDblj.png

https://forum.doom9.org/showthread.php?p=1878222

wonkey_monkey
30th June 2019, 17:52
FastBlur (https://forum.doom9.org/showthread.php?t=176564). It blurs fast.

https://i.imgur.com/u8Ffqhq.png

https://forum.doom9.org/showthread.php?t=176564

Bernardd
7th August 2019, 17:09
Hello,

This new script brings the RGBAdapt plugin an automatic mode to achieve the white balance.

The default white balance results from the combination of gain, contrast, average, gamma (rpow) and gamma correction with S (spow) curve on each color channel.

The correction in agreement with the gray-world theory results from the combined action of a correction of bias and a correction of rpow, the second treating the part not taken into account by the first one. The script calculates for each image the proportion of work done by each process. Finally a spow correction (S curve) is added.

The data used to calculate these corrections, ie the average, maximum and minimum values ​​of the color channels, do not allow a continuous description of the histogram curve of the three basic colors, so they are not sufficient to choose the inflection point of the S curve. By default, the script proposes for each channel, an inflection centered on its average value. For a little disturbed movie, this solution may be satisfactory, but in general, you will need to adjust the spmid of each channel by watching the movie.

Script here

https://forum.doom9.org/showpost.php?p=1881328&postcount=60

wonkey_monkey
27th November 2019, 22:07
ColourWarp (https://forum.doom9.org/showthread.php?p=1891529). It warps colours.

Examples: https://i.imgur.com/q6tI4xq.jpg

StainlessS
24th August 2020, 16:34
SpotLess(), new de-spotting script filter.

Script filter to remove Spots and noise using mvTools2 and Medianblur2.
Copes with spots on multiple consecutive frames, setting RadT accordingly.
Based on an idea by Did้e.
Mvtools2/MedianBlur2 by Pinterf, so AVS+ colorspace and x64 compatible.

Chosen function name would seem to be a very good choice, not perfect, but very nearly is.

Adjective: spotless
1) Completely neat and clean

You should also try spotless as a prefilter in smdegrain. Worked very good for me with almost zero artifacts left from spotless.

yes, it's do better job than any methods ...

This is a wonderful tool. As it happens, I've been cleaning a VHS cap and the silly video has quite a lot of spots and scratches in every other field. SpotLess cleans them up nicely and also takes care of most of the chroma noise too.. I haven't checked things with longer samples but looks good anyway.


Home Thread here:- https://forum.doom9.org/showthread.php?t=181777

real.finder
13th March 2021, 17:23
sAddGrainCT https://github.com/realfinder/AVS-Stuff/blob/Community/avs%202.5%20and%20up/sAddGrainCT.avsi

the support in https://forum.doom9.org/showthread.php?t=174121

wonkey_monkey
5th May 2021, 17:55
DebugColourSpaces (https://horman.net/avisynth/download/DebugColourSpaces.zip) - for testing filters against multiple colourspaces at once

Discussion (in Avisynth Development) (https://forum.doom9.org/showthread.php?t=182817)

wonkey_monkey
15th May 2021, 19:51
Waveform 2.0 (https://forum.doom9.org/showthread.php?t=182866)

wonkey_monkey
31st May 2021, 22:55
Feedback (https://forum.doom9.org/showthread.php?t=182910)

Lets you send a filter chain's output back into itself as input for the next frame.

kedautinh12
15th August 2021, 17:10
EEDI2CUDA ported from Vapoursynth
https://github.com/AmusementClub/VapourSynth-EEDI2CUDA/issues/3#issuecomment-899069883

kedautinh12
16th August 2021, 13:14
EEDI2CUDA now have x86 ver
https://github.com/AmusementClub/VapourSynth-EEDI2CUDA/actions/runs/1135300628

kedautinh12
26th August 2021, 02:20
BestAudioSource@a5b0669 (have x86 ver)
https://drive.google.com/file/d/1F3FC98vKDKVxBIkBTAlWZ7TF1eyY19I-/view?usp=sharing

I got from
https://gitlab.com/uvz/AviSynthPlus-Plugins-Scripts/-/tree/master

Parameters
https://forum.doom9.org/showthread.php?t=177337

kedautinh12
9th September 2021, 15:04
New fork frfun7 from pinterf
https://github.com/pinterf/Frfun7/releases

GMJCZP
9th September 2021, 20:37
New fork frfun7 from pinterf
https://github.com/pinterf/Frfun7/releases

Fabulous! If the whole family of prunedtree plugins is revived it would be great, and if we add the TUnsharp update to that my Khameleon script would be 100% operational in HBD.
I'm going to update the information on Khameleon, thanks to pinterf.

kedautinh12
12th September 2021, 17:31
Avisynth-retinex
https://github.com/Asd-g/AviSynth-Retinex

kedautinh12
5th November 2021, 07:02
SubImageFile
https://github.com/Asd-g/AviSynthPlus-SubImageFile/releases/tag/1.0.0

PropToClip
https://github.com/Asd-g/AviSynthPlus-PropToClip/releases/tag/1.0.0

kedautinh12
1st February 2022, 15:48
edgelevel_avisynth
https://github.com/rigaya/edgelevel_avisynth

kedautinh12
15th March 2022, 00:10
New fork vinverse from Asd-g :D
https://github.com/Asd-g/vinverse

Reel.Deel
29th March 2022, 10:06
Port of FFmpeg's grayworld filter to AviSynth+: https://github.com/Asd-g/AviSynthPlus-grayworld

Thanks Asd :)

arnea
31st March 2022, 20:16
Plugin for stabilizing scanned films using perforation as a reference: https://github.com/arnean/PerfPan

StainlessS
31st March 2022, 21:27
Arnea, maybe make a thread here somewhere too.
Panning algorithm

I took the Avisynth core AddBoders filter and modified it to do panning - i.e. on one side it will add borders but on the other side it will crop to keep the image size.
It will work with all image formats and should be quite effective. Just one remark: if the original clip is in YV12 colourspace then it is possible to pan only in steps of two pixels.
The plugin will automatically do it, but the result is not as good as with other formats.

AddBorders (presume typo),
can be replaced with some resize, and can even shift YV12 by fractional pixel.
Something like (untested - Hope I did it right)

W=Width
H=Height
XSHIFT = -0.5 # Half pixel shift; -ve = right shift, +ve = left shift
Spline36Resize(W,H, XSHIFT,0, W,H)


EDIT: -ve = right shift, as it is where we get source from, rather than we put dest.

Could of course do like this

W=Width
H=Height
XSHIFT = 0.5 # Half pixel shift; +ve = right shift, -ve = left shift
Spline36Resize(W,H, -XSHIFT ,0, W,H)


EDIT: Arnea, dont reply here, is for new plugins only. Start new thread if necessary.

EDIT: Wonkey Donkey posted this in your Avs Devs thread,
For that you can use env->Invoke(...)

http://avisynth.nl/index.php/Filter_SDK/Env_Invoke

Crop and AddBorders will only get you pixel-accurate (or less, depending on colour format) panning, though. Instead you can use one of the resizers with offsets (be warned that bicubicresize will soften your image unless you set b = 0 and c = 0.5, if I remember correctly).
And my edit was this,

EDIT: Below, Wonkey suggests resizer rather than crop, yes, that is better than crop.

StainlessS
1st April 2022, 13:03
Utility script function ConvTxtToOggChap.avsi, posted in another D9 forum,
https://forum.doom9.org/showthread.php?p=1966757#post1966757

Converts very loosely user specified times and chapter name in file, to Ogg/Ogm Chapter style in file.

eg, source file

00:00 Title 1
02:40 Title 2
09:27 Title 3
15:12 Title 4
#...
1:05:23 Title x
1:13:26 Title xx
#...
00:00. Title 7
02:40.12 Title 8
09:27.99 Title 9
15:12.71 Title 10
23:59:59.987 Title 11


Output file

CHAPTER01=00:00:00.000
CHAPTER01NAME=Title 1
CHAPTER02=00:02:40.000
CHAPTER02NAME=Title 2
CHAPTER03=00:09:27.000
CHAPTER03NAME=Title 3
CHAPTER04=00:15:12.000
CHAPTER04NAME=Title 4
CHAPTER05=01:05:23.000
CHAPTER05NAME=Title x
CHAPTER06=01:13:26.000
CHAPTER06NAME=Title xx
CHAPTER07=00:00:00.000
CHAPTER07NAME=Title 7
CHAPTER08=00:02:40.120
CHAPTER08NAME=Title 8
CHAPTER09=00:09:27.990
CHAPTER09NAME=Title 9
CHAPTER10=00:15:12.710
CHAPTER10NAME=Title 10
CHAPTER11=23:59:59.987
CHAPTER11NAME=Title 11


Apparently input style is often posted in YouTube comments.
May be of limited use in Avisynth.

Julek
2nd April 2022, 19:04
Descale now supports AVS:
https://github.com/Irrational-Encoding-Wizardry/descale/releases/tag/r8

kedautinh12
4th April 2022, 10:51
Descale x86 ver
https://github.com/Irrational-Encoding-Wizardry/descale/files/8405290/avisynth-descale-r8-win32.zip

Reel.Deel
11th April 2022, 13:05
ChickenDream: realistic film grain generator, plug-in for Vapoursynth and Avisynth+

Thread: https://forum.doom9.org/showthread.php?t=184052
Repo: https://github.com/EleonoreMizo/chickendream

kedautinh12
25th April 2022, 05:45
AviSynth-sbr
https://github.com/Asd-g/AviSynth-sbr

kedautinh12
28th April 2022, 14:50
crabshank_filters
https://gitlab.com/uvz/AviSynthPlus-Plugins-Scripts/-/tree/master/crabshank_filters

DTL
7th May 2022, 18:08
MDeblock x64 build for new 2.6 AVS API (I hope) - https://github.com/DTL2020/MDeblock/releases/tag/v0.3-x64
Just to make old sources v0.3 work with new AVS+.

kedautinh12
13th May 2022, 13:07
x64 version of Fizick's BlockOverlap
https://github.com/DTL2020/BlockOverlap/releases

kedautinh12
15th May 2022, 07:29
AviSynth-AGM
https://github.com/Asd-g/AviSynth-AGM/releases

kedautinh12
28th May 2022, 16:54
crabshank_filters
https://gitlab.com/uvz/AviSynthPlus-Plugins-Scripts/-/tree/master/crabshank_filters

If anyone errors with crabshank_filters x86 ver from Pinterf's avs+ x86 xp ver build in newer os, you can use with this build:
https://gitlab.com/uvz/AviSynthPlus-Builds

kedautinh12
10th June 2022, 13:16
AviSynth-tcolormask
https://github.com/Asd-g/AviSynth-tcolormask

kedautinh12
11th June 2022, 01:38
AviSynth-FCBI
https://github.com/Asd-g/AviSynth-FCBI

StainlessS
11th June 2022, 19:32
From earlier in this thread,

Utility script function ConvTxtToOggChap.avsi, posted in another D9 forum,
https://forum.doom9.org/showthread.php?p=1966757#post1966757

Converts very loosely user specified times and chapter name in file, to Ogg/Ogm Chapter style in file.

eg, source file

00:00 Title 1
02:40 Title 2
09:27 Title 3
15:12 Title 4
#...
1:05:23 Title x
1:13:26 Title xx
#...
00:00. Title 7
02:40.12 Title 8
09:27.99 Title 9
15:12.71 Title 10
23:59:59.987 Title 11


Output file

CHAPTER01=00:00:00.000
CHAPTER01NAME=Title 1
CHAPTER02=00:02:40.000
CHAPTER02NAME=Title 2
CHAPTER03=00:09:27.000
CHAPTER03NAME=Title 3
CHAPTER04=00:15:12.000
CHAPTER04NAME=Title 4
CHAPTER05=01:05:23.000
CHAPTER05NAME=Title x
CHAPTER06=01:13:26.000
CHAPTER06NAME=Title xx
CHAPTER07=00:00:00.000
CHAPTER07NAME=Title 7
CHAPTER08=00:02:40.120
CHAPTER08NAME=Title 8
CHAPTER09=00:09:27.990
CHAPTER09NAME=Title 9
CHAPTER10=00:15:12.710
CHAPTER10NAME=Title 10
CHAPTER11=23:59:59.987
CHAPTER11NAME=Title 11


Apparently input style is often posted in YouTube comments.
May be of limited use in Avisynth.

UPDATE, ConvTxtToOggChap.avsi now supports COMMA(,) as well as PERIOD(.) as fractional seconds separator.
POSTED AGAIN HERE, as not originally posted in Avisynth forum, update source might be useful to somebody.

UPDATED Post here:- https://forum.doom9.org/showthread.php?p=1970192#post1970192

kedautinh12
26th June 2022, 16:51
AviSynthPlus-NNEDI3CL
https://github.com/Asd-g/AviSynthPlus-NNEDI3CL

Reel.Deel
16th July 2022, 05:50
avs_libplacebo: https://github.com/Asd-g/avslibplacebo
An AviSynth+ plugin interface to libplacebo - a reusable library for GPU-accelerated image/video processing primitives and shaders.

Thanks Asd :)

kedautinh12
16th July 2022, 09:23
avs_libplacebo: https://github.com/Asd-g/avslibplacebo
An AviSynth+ plugin interface to libplacebo - a reusable library for GPU-accelerated image/video processing primitives and shaders.

Thanks Asd :)

Lol, i'm waiting to post it but you faster :D

kedautinh12
2nd August 2022, 14:35
Descale now supports AVS:
https://github.com/Irrational-Encoding-Wizardry/descale/releases/tag/r8

New fix descale for avs here:
https://gitlab.com/uvz/AviSynthPlus-Plugins-Scripts

kedautinh12
18th August 2022, 00:15
AviSynthPlus-w2xncnnvk
https://github.com/Asd-g/AviSynthPlus-w2xncnnvk

guest
18th August 2022, 07:57
AviSynthPlus-w2xncnnvk
https://github.com/Asd-g/AviSynthPlus-w2xncnnvk

What's this do ??

Reel.Deel
18th August 2022, 16:25
What's this do ??

Upscaling. See https://en.wikipedia.org/wiki/Waifu2x

Lots of more examples on the web.

Reel.Deel
21st August 2022, 18:18
AviSynthPlus-RIFE - https://github.com/Asd-g/AviSynthPlus-RIFE

Real-Time Intermediate Flow Estimation for Video Frame Interpolation.

Many thanks Asd :)

Dogway
21st August 2022, 18:36
Oh my god, Reel.Deel too fast was about to report! lol
Asd-g is on a roll

kedautinh12
21st August 2022, 18:59
Asd-g can make avs+ great again :D

Reel.Deel
21st August 2022, 19:14
Oh my god, Reel.Deel too fast was about to report! lol
Asd-g is on a roll

I just happened to be on GitHub at the right moment lol.

I just tried out RIFE on the "lady in red" scene from The Matrix and I'm impressed with the results. All of the other methods I have tried usually have a lot of artifacts of blurring (blending), with RIFE is as sharp as the source and minimal artifacts.

kedautinh12
21st August 2022, 19:20
Oh my god, Reel.Deel too fast was about to report! lol
Asd-g is on a roll

Dogway, can you add it to your deinterlaced scripts??

anton_foy
22nd August 2022, 12:22
Asd-g great work!

Would it be possible to use RIFE for motioncompensation of filters such as temporalsoften for example? I was thinking the way mflowfps was used to mocomp.

Edit: DPIR for avs+ maybe? :D

kedautinh12
22nd August 2022, 14:00
Asd-g great work!

Would it be possible to use RIFE for motioncompensation of filters such as temporalsoften for example or even denoise with RIFE itself?

Edit: DPIR for avs+ maybe? :D

I don't think that cause DPIR need NumPy to work

anton_foy
22nd August 2022, 15:29
I don't think that cause DPIR need NumPy to work

Ah thanks. Seems I cannot use RIFE (or avs_libplacebo or w2xncnnvk) anyway, I guess my GTX 970 card does not support it.

kedautinh12
22nd August 2022, 15:32
Ah thanks. Seems I cannot use RIFE (or avs_libplacebo or w2xncnnvk) anyway, I guess my GTX 970 card does not support it.

if your card support Vulkan, it's can. Try update your driver

anton_foy
22nd August 2022, 16:08
if your card support Vulkan, it's can. Try update your driver

Updated NVIDIA drivers (Vulkan) now and restarted but I get errors:
#RIFE():
RIFE: failed to load model

#w2xncnnvk(scale=1,noise=3,model=2):
waifu2x_nvk: failed to load model

#libplacebo_deband():
System exception - Access Violation

I have the models folders in my 'plugins64' folder where the dll's are.

kedautinh12
22nd August 2022, 17:31
Updated NVIDIA drivers (Vulkan) now and restarted but I get errors:
#RIFE():
RIFE: failed to load model

#w2xncnnvk(scale=1,noise=3,model=2):
waifu2x_nvk: failed to load model

#libplacebo_deband():
System exception - Access Violation

I have the models folders in my 'plugins64' folder where the dll's are.

Are you meet full requiment??
https://github.com/Asd-g/avslibplacebo#requirements

anton_foy
22nd August 2022, 18:19
Are you meet full requiment??
https://github.com/Asd-g/avslibplacebo#requirements

Thank you yes now after I used the required version of AVS+ libplacebo is working. Yet RIFE and w2xncnnvk gives me the same error.

EDIT: okay I fiddled with the folders and rife and w2xncnnvk now runs but I get alot of 'vkAllocateMemory failed -2' and
'vkQueueSubmit failed -4' on both of them. I actually got a few frames from RIFE with some black frames now and then but w2xncnnvk is all black frames. Will try to adjust 'setmemorymax' some more.

Here are the lines:
convertbits(32).convertToPlanarRGB()
rife()

convertbits(32).convertToPlanarRGB()
w2xncnnvk(scale=1,noise=3,model=2)

Thanks.

kedautinh12
23rd August 2022, 00:05
Thank you yes now after I used the required version of AVS+ libplacebo is working. Yet RIFE and w2xncnnvk gives me the same error.

EDIT: okay I fiddled with the folders and rife and w2xncnnvk now runs but I get alot of 'vkAllocateMemory failed -2' and
'vkQueueSubmit failed -4' on both of them. I actually got a few frames from RIFE with some black frames now and then but w2xncnnvk is all black frames. Will try to adjust 'setmemorymax' some more.

Here are the lines:
convertbits(32).convertToPlanarRGB()
rife()

convertbits(32).convertToPlanarRGB()
w2xncnnvk(scale=1,noise=3,model=2)

Thanks.

If you still issue you need report to Asd-g in issue tab of github

DTL
19th October 2022, 06:30
Would it be possible to use RIFE for motioncompensation of filters such as temporalsoften for example? I was thinking the way mflowfps was used to mocomp.


It can run for denoise - but slow and require lots of accelerator memory (6 GB can fit only about equal to MDegrain1 with 1920x1080 frame and 3 AVS+ threads) - https://forum.doom9.org/showthread.php?p=1976763#post1976763

Though do not have any user-adjustable params (content-depending). So may be much more beginners-friendly.

May be any framerate converter with increasing framerate by calculate intermediate frames may run as a source for denoising script in AVS or in compiled form.

" get alot of 'vkAllocateMemory failed -2' and
'vkQueueSubmit failed -4' on both of them."

If it run out of HWA memory or other resources it looks the only way is to decrease AVS threads number (or calls to Vulkan device other ways).

anton_foy
19th October 2022, 10:16
It can run for denoise - but slow and require lots of accelerator memory (6 GB can fit only about equal to MDegrain1 with 1920x1080 frame and 3 AVS+ threads) - https://forum.doom9.org/showthread.php?p=1976763#post1976763

Though do not have any user-adjustable params (content-depending). So may be much more beginners-friendly.

May be any framerate converter with increasing framerate by calculate intermediate frames may run as a source for denoising script in AVS or in compiled form.

" get alot of 'vkAllocateMemory failed -2' and
'vkQueueSubmit failed -4' on both of them."

If it run out of HWA memory or other resources it looks the only way is to decrease AVS threads number (or calls to Vulkan device other ways).

Thanks I will try to reduce the number of threads. Interesting test you made. As I almost only deal with UHD I suspect it will be too slow.

kedautinh12
28th November 2022, 18:11
EEDI3CL
https://github.com/Asd-g/AviSynthPlus-EEDI3CL/releases

kedautinh12
10th December 2022, 16:20
AviSynthPlus-ssimulacra
https://github.com/Asd-g/AviSynthPlus-ssimulacra/releases

Reel.Deel
28th January 2023, 01:26
avs-mlrt - AviSynth+ ML filter runtimes for variety of platforms: https://github.com/Asd-g/avs-mlrt


Thanks Asd :)

kedautinh12
28th January 2023, 04:19
Excellent Asd-g, It will open new era for avs+ :D

DTL
8th February 2023, 23:32
Asd-g made 'compiled' version of RIFE-denoise (about equal to MDegrain1 in 'degrain strength') plugin to test - https://github.com/Asd-g/AviSynthPlus-RIFE/issues/2#issuecomment-1423270259 . I do not have access to required GPU for several days to check until next work day.
It now should work like

RIFE(denoise=true, ... other params for RIFE if required)


Still require Average() plugin loaded.

From my old tests of 2022 - it work about good with sharp and detailed enough content like from 3chip video camera FHD, but fails with soft enough 35mm film scan in 1080p producing lots of bad blended areas. May be need to adjust better 'model' or use new models from 2023 if available.

kedautinh12
17th February 2023, 09:39
Latest ver now. It should be used only for denoising.
denoise parameter is removed.
New parameter denoise_tr. Default 1, it must be greater than 0.
New parameter denoise_blending_mode. 0 - average (still average plugin required); 1 - none. Default 0.
https://github.com/Asd-g/AviSynthPlus-RIFE/issues/2#issuecomment-1434131929

DTL
17th February 2023, 10:57
Well - it now should be possible to run RIFE motion compensation and interpolation and some external blending engine with better protection against bad blends in the areas where RIFE fails with perfect motion compensation. Like tr=2 mode using MDegrain1 as blending engine and MAnalyse as SAD computing:


tr1=RIFE_denoise(denoise_blending_mode=1, denoise_tr=1)
tr2=RIFE_denoise(denoise_blending_mode=1, denoise_tr=2)
sad1=MAnalyse(delta=1, (some way to feed current frame or tr1 as + or -1 frame to MAnalyse - may be Interleave() ?)
sad2=MAnalyse(delta=1, (some way to feed current frame or tr2 as + or -1 frame to MAnalyse - may be Interleave() ?)
out=MDegrain1(sort of Interleaved(last, tr1, tr2), mvbw=sad1, mvfw=sad2, thSAD=our_protection_value)


When using MAnalyse with fastest modes (like zero search if possible like searchparam=0, pel=1 and may be optPredictorsMode=fastest_current_plane_sad_only for newer versions) it should run with low CPU usage and with all motion-search and motion-compensation quality provided from RIFE. Or may be other external blending engines possible with protection from too bad blends (may be block or sample-threshold based or median or ?).

anton_foy
17th February 2023, 20:45
Well - it now should be possible to run RIFE motion compensation and interpolation and some external blending engine with better protection against bad blends in the areas where RIFE fails with perfect motion compensation. Like tr=2 mode using MDegrain1 as blending engine and MAnalyse as SAD computing:


tr1=RIFE_denoise(denoise_blending_mode=1, denoise_tr=1)
tr2=RIFE_denoise(denoise_blending_mode=1, denoise_tr=2)
sad1=MAnalyse(delta=1, (some way to feed current frame or tr1 as + or -1 frame to MAnalyse - may be Interleave() ?)
sad2=MAnalyse(delta=1, (some way to feed current frame or tr2 as + or -1 frame to MAnalyse - may be Interleave() ?)
out=MDegrain1(sort of Interleaved(last, tr1, tr2), mvbw=sad1, mvfw=sad2, thSAD=our_protection_value)


When using MAnalyse with fastest modes (like zero search if possible like searchparam=0, pel=1 and may be optPredictorsMode=fastest_current_plane_sad_only for newer versions) it should run with low CPU usage and with all motion-search and motion-compensation quality provided from RIFE. Or may be other external blending engines possible with protection from too bad blends (may be block or sample-threshold based or median or ?).

So interesting! But how can MDegrain pick up motion vectors from rife? Or is there a way to surpass it to get the interleaved data?

DTL
17th February 2023, 20:54
It no more need MVs for motion compensation - it can run as simple enough blend engine for already motion compensated frames (MVs dx, dy equal to dx=0,dy=0). With internal protection against bad blends where RIFE fails with motion compensation. Today at testing I found internal tr=1 RIFE denoise based on simple (non-bad blends protected) Average() plugin works looks like OK. At 1080p clip and GTX1060 card even 2 AVS+ threads already saturate 'compute1' performance counter to 100% and fps reach 4 limit. Single thread run at about 3 fps. CPU load is only 5%. More AVS+ threads only increase GPU memory load and at about 5 threads it crashes with vk_errors (like out of memory).

But attempt to output motion compensated frames to external blending engine fails (looks like some bug corrupts AVS environment) - reported to Asd-g. Or may be it is bug in old (3.7.3 AVS+ version) - we wll see later.

Script like

src_den=last
tr1=RIFE(denoise_tr=1, denoise_blending_mode=1)
tr2=RIFE(denoise_tr=2, denoise_blending_mode=1)
Average(src_den, 0.2, tr1, 0.4, tr2, 0.4)

corrupts AVS+ environment (clip 'src_den' got much more frames as before RIFE() calls) and Average() plugin fails. At least with my AVS+ version of 3.7.3. Same is with attempt to use 'last' variable in the Average().

anton_foy
17th February 2023, 21:04
It no more need MVs for motion compensation - it can run as simple enough blend engine for already motion compensated frames (MVs dx, dy equal to dx=0,dy=0). With internal protection against bad blends where RIFE fails with motion compensation. Today at testing I found internal tr=1 RIFE denoise based on simple (non-bad blends protected) Average() plugin works looks like OK. At 1080p clip and GTX1060 card even 2 AVS+ threads already saturate 'compute1' performance counter to 100% and fps reach 4 limit. Single thread run at about 3 fps. CPU load is only 5%. More AVS+ threads only increase GPU memory load and at about 5 threads it crashes with vk_errors (like out of memory).

But attempt to output motion compensated frames to external blending engine fails (looks like some bug corrupts AVS environment) - reported to Asd-g. Or may be it is bug in old (3.7.3 AVS+ version) - we wll see later.

Script like

src_den=last
tr1=RIFE(denoise_tr=1, denoise_blending_mode=1)
tr2=RIFE(denoise_tr=2, denoise_blending_mode=1)
Average(src_den, 0.2, tr1, 0.4, tr2, 0.4)

corrupts AVS+ environment (clip 'src_den' got much more frames as before RIFE() calls) and Average() plugin fails. At least with my AVS+ version of 3.7.3. Same is with attempt to use 'last' variable in the Average().

Latest version of avisynth+: https://gitlab.com/uvz/AviSynthPlus-Builds

Edit: I don't know how fluxsmoothT does but it is suppose to be motion protected (temporal median?)?

kedautinh12
17th February 2023, 23:59
Latest ver here:
https://forum.doom9.org/showthread.php?p=1983179#post1983179

DTL
18th February 2023, 19:15
Updated RIFE become better - https://github.com/Asd-g/AviSynthPlus-RIFE/issues/2#issuecomment-1435699935

It is tested with external blending engine of plugin MedianBlurTemporal and it looks produce significantly sharper result in compare with simple Average().

Now testing 1080i clip processing with simulation of tr=2 (if it correctly processed in MedianBlurTemporal with such arguments passing)

LoadPlugin("RIFE.dll")
LoadPlugin("VMAF.dll")
LoadPlugin("MedianBlur2.dll")

FFmpegSource2("src.mxf")

ConvertToYV12(interlaced=true)

SeparateFields()

src=last

ConvertToRGB()
ConvertToPlanarRGB()
ConvertBits(32)

tr1=RIFE(denoise=true, denoise_tr=1, denoise_blending_mode=1, skip=true, sc=true, sc_threshold=0.05)
tr2=RIFE(denoise=true, denoise_tr=2, denoise_blending_mode=1, skip=true, sc=true, sc_threshold=0.05)

tr1=ConvertToRGB24(tr1).ConvertToYV12()
tr2=ConvertToRGB24(tr2).ConvertToYV12()

Interleave(tr1, src, tr2)
MedianBlurTemporal(radiusy=0, radiusu=0, radiusv=0, temporalradius=1)
SelectEvery(3, 1)

Weave()

Prefetch(2)


At 2 threads of AVS the performance at GTX1060 6 GB is about 2 fps. GPU-Z shows GPU chip power about 100..120Watt. CPU load is very low about 5%.

Testing shows it is important to adjust sc_threshold by content to avoid bad interscenes interpolated frames at scenechanges. The default 0.12 may be too high for low-contrast scenechange. Too low value may cause unstable RIFE processing inside scene and flickering or no denoise at all. It looks skip=true uses VMAF for scenechange detection and it looks work better.

kedautinh12
18th February 2023, 23:46
RIFE_denoise3 now
https://github.com/Asd-g/AviSynthPlus-RIFE/issues/2#issuecomment-1435768729

anton_foy
19th February 2023, 17:49
Updated RIFE become better - https://github.com/Asd-g/AviSynthPlus-RIFE/issues/2#issuecomment-1435699935

It is tested with external blending engine of plugin MedianBlurTemporal and it looks produce significantly sharper result in compare with simple Average().

Now testing 1080i clip processing with simulation of tr=2 (if it correctly processed in MedianBlurTemporal with such arguments passing)

LoadPlugin("RIFE.dll")
LoadPlugin("VMAF.dll")
LoadPlugin("MedianBlur2.dll")

FFmpegSource2("src.mxf")

ConvertToYV12(interlaced=true)

SeparateFields()

src=last

ConvertToRGB()
ConvertToPlanarRGB()
ConvertBits(32)

tr1=RIFE(denoise=true, denoise_tr=1, denoise_blending_mode=1, skip=true, sc=true, sc_threshold=0.05)
tr2=RIFE(denoise=true, denoise_tr=2, denoise_blending_mode=1, skip=true, sc=true, sc_threshold=0.05)

tr1=ConvertToRGB24(tr1).ConvertToYV12()
tr2=ConvertToRGB24(tr2).ConvertToYV12()

Interleave(tr1, src, tr2)
MedianBlurTemporal(radiusy=0, radiusu=0, radiusv=0, temporalradius=1)
SelectEvery(3, 1)

Weave()

Prefetch(2)


At 2 threads of AVS the performance at GTX1060 6 GB is about 2 fps. GPU-Z shows GPU chip power about 100..120Watt. CPU load is very low about 5%.

Testing shows it is important to adjust sc_threshold by content to avoid bad interscenes interpolated frames at scenechanges. The default 0.12 may be too high for low-contrast scenechange. Too low value may cause unstable RIFE processing inside scene and flickering or no denoise at all. It looks skip=true uses VMAF for scenechange detection and it looks work better.

Can use Clense() instead of MedianBlurTemporal, its faster.
http://avisynth.nl/index.php/MedianBlur2

Same as Clense() but much slower:
MedianBlurTemporal(radiusy=0, radiusu=0, radiusv=0, temporalradius=1)

DTL
20th February 2023, 00:36
Yes - instead of Interleave/blurtemporal/selectevery it may work simple

Clense(src, tr1, tr2)

Also it looks the skip may be default false and not used for scenechenge detection as I understand. I can not test new build until about middle of next week. You may try any blending engine that work good for you.

Also Clense http://avisynth.nl/index.php/RgTools/Clense looks like 8bit only.

Reel.Deel
20th February 2023, 01:28
Also Clense http://avisynth.nl/index.php/RgTools/Clense looks like 8bit only.

No, it supports HBD also. That page has not been updated but the table in the main page has: http://avisynth.nl/index.php/RgTools#Filters

Tempter57
21st February 2023, 10:36
RIFE_denoise3 now
https://github.com/Asd-g/AviSynthPlus-RIFE/issues/2#issuecomment-1435768729

Unfortunately on given version RIFE_denoise3 has faced a problem
RIFE: skip cannot be used for denoise_tr greater than 1

Used skip=false

DTL
26th February 2023, 14:25
Can use Clense() instead of MedianBlurTemporal, its faster.
http://avisynth.nl/index.php/MedianBlur2

Yes - with interleaved input it work equally to MedianBlurTemporal and a bit faster. But not work with 3-clips provided as Clense(src, tr1, tr2). Or may be I not understand how it work with 'previous' and 'next' optional clips.

Also as alternative blending engine possibly vsTTempSmooth may be tested https://github.com/Asd-g/AviSynth-vsTTempSmooth . It have more settings about temporal weigthing and thresholding. May it can better save from residual bad blends passed via Clense and MedianBlurTemporal (without settings to make better protection from bad blends).

anton_foy
26th February 2023, 16:06
Yes - with interleaved input it work equally to MedianBlurTemporal and a bit faster. But not work with 3-clips provided as Clense(src, tr1, tr2). Or may be I not understand how it work with 'previous' and 'next' optional clips.

Also as alternative blending engine possibly vsTTempSmooth may be tested https://github.com/Asd-g/AviSynth-vsTTempSmooth . It have more settings about temporal weigthing and thresholding. May it can better save from residual bad blends passed via Clense and MedianBlurTemporal (without settings to make better protection from bad blends).

Yes vsTTempsmooth is very good but sadly very slow. If you need more than 3 clips for clense I think Dogway has scripted an extended version?

DTL
26th February 2023, 17:48
Yes vsTTempsmooth is very good but sadly very slow.

It is simply because it is still C-only and process each sample in a long enough loop. If put to SIMD it should work several times faster.

kedautinh12
27th February 2023, 01:49
Unfortunately on given version RIFE_denoise3 has faced a problem
RIFE: skip cannot be used for denoise_tr greater than 1

Used skip=false

You can try with stable ver here:
https://github.com/Asd-g/AviSynthPlus-RIFE/releases

kedautinh12
27th February 2023, 05:28
It is simply because it is still C-only and process each sample in a long enough loop. If put to SIMD it should work several times faster.

Try new ver, asd-g refactor code, maybe make it faster?
https://github.com/Asd-g/AviSynth-vsTTempSmooth/releases

DTL
28th February 2023, 11:22
Version of vsTTempSmooth 1.2.1 with SSE2/AVX2/AVX512 added https://github.com/Asd-g/AviSynth-vsTTempSmooth/releases/tag/1.2.1

About 3.2 times faster at FullHD frame YV12, maxr=7 with AVX2 at i5-9600K.

Still have VirtualDub crash if trying to feed separated fields after RIFE(). The 'progressive' frames looks works good.

anton_foy
28th February 2023, 12:56
Version of vsTTempSmooth 1.2.1 with SSE2/AVX2/AVX512 added https://github.com/Asd-g/AviSynth-vsTTempSmooth/releases/tag/1.2.1

About 3.2 times faster at FullHD frame YV12, maxr=7 with AVX2 at i5-9600K.



Thanks DTL great news! Did you do the update or Asd-g? Edit: ok I see Asd-g optimized it.

DTL
28th February 2023, 14:16
Asd-g is great programmer and made SIMD update with new-generation of SIMD library of vector functions (not intrinsics low-level based but with more high-level syntax). Currently I see some place of possibly better performance if current design issue will be somehow changed - gathering array of pre-calculated weights pointed by each sample diff value is strangely very slow and eats about 50% of total fps. So may be if that issue with gathering internal service data (not input planes samples) will be workarounded somehow (may be even runtime weight calculation instead of pre-calculated array with poor SIMD performance) we can get about 2x more processing speed.

Also in new uploaded 1.2.1 release the crash with separated to planes interlaced was finally fixed. At least at my current quick tests. Better more users testing required before closing issue about one possible crash reason.

As I see vsTTempSmooth rarely used in large users scripts and marked as 'stronger' in MCTD.avsi https://github.com/Asd-g/AviSynthPlus-Scripts/blob/3a0da2968b9a67a702c9678162e09a85895190a2/MCTD_.avsi#L52 if used instead of MDegrain.

Dogway
28th February 2023, 14:49
As I see vsTTempSmooth rarely used in large users scripts and marked as 'stronger' in MCTD.avsi https://github.com/Asd-g/AviSynthPlus-Scripts/blob/3a0da2968b9a67a702c9678162e09a85895190a2/MCTD_.avsi#L52 if used instead of MDegrain.

If it had an option for binomial weights I think it could be used more, I don't know in what cases IDW is more useful? Or TemporalSoften with binomial, whatever fits better.

DTL
1st March 2023, 13:26
For simple denoising work after (perfect) motion compensation the simple enough blending engine may be used. The protection from bad blends may be started from simple threshold-based for low enough noise levels (but still very visibly degrades MPEG compression performance as shown in https://forum.doom9.org/showthread.php?p=1983505#post1983505 ).

The temporal-distance-based weighting is only sort of additional decreasing of possible bad part in the total output blend result for 'far from current' frames motion compensated expecting its quality of motion compensation is significantly worse in compare with 'near' frames. It may increase quality (sharpness) on moving parts of image but decrease denoising in static parts of footage with typically equal quality of motion compensation over total tr-distance.

As I understand current vsTTempSmooth may use additional difference-based weighting with some smooth weighting curve (like weight for other frame sample=f(difference between current and other frame sample) and that pre-computed table for it) - to not have too hard discontinuity at the threshold-based decision of either blend samples values or not (i.e. weight either 1 or 0) based on the difference.

I still not sure if binomial weighting can make better signal to noise level in case of working with natural gaussian-distributed photon shot noise. Are there any research about it available ? Or may be it is more effective against bad blends in case of not perfect motion compensation ?

Currently for performance at todays CPUs with SIMD the best algorithm must be SIMD-friendly with no inter-sample-dependent runtime computing and without random pre-computed lookup table usage (gathering) for each 'SIMD-thread' processing each sample separately. Currently usage of pre-computed weights table with per-sample data gathering in non-SIMD fallback like https://github.com/Asd-g/AviSynth-vsTTempSmooth/blob/f71a46709225add4670452c697815cbfa8196b44/src/vsTTempSmooth_AVX2.cpp#L55 degrade performance at about 50%. Also usage of new data-gathering instructions of AVX512 (partially started from AVX2) can not helps greatly because cache still slow on fetching data from different lines and even levels. The switching from 'scalar single threaded' computing to SIMD 'internal multi-threading' also require changing of algorithm to get all possible benefits from SIMD.

So may be some new 'simple-fast weighting' mode for vsTTempSmooth possible to use is with external motion compensation engine with much more simplified and SIMD-friendly weighting for significantly better performance.

DTL
14th March 2023, 19:39
Release 1.2.3 of vsTTempSmooth https://github.com/Asd-g/AviSynth-vsTTempSmooth/releases/tag/1.2.3 looks like final version with SIMD optimizations added. Run about 8..10x times faster in compare with C-ref (opt=0) at AVX512 chip depending on processing mode (use difference- and frame-distance weighting (slower) or only frame-distance weighting (faster)). AVX2 is about 20..30% slower.

Scalar gathering loop in C finally was changed to SIMD gather hardware instruction (more SIMD-way of execution) https://github.com/Asd-g/AviSynth-vsTTempSmooth/blob/77400e19d990ff7251c99b24af8e7d4bda644692/src/vsTTempSmooth_AVX512.cpp#L88 available at AVX2 and AVX512 architectures and last significant slowing down part of processing was removed. Now vsTTempSmooth Asd-g version 1.2.3 can be used (added to AVS documentation like FilterSDK) as example of simple enough processing re-design to use SIMD architectures. It have C-reference and SIMD implementations of the same processing at 3 different SIMD architectures SSE2/AVX2/AVX512.

mastrboy
17th March 2023, 20:15
Release 1.2.3 of vsTTempSmooth https://github.com/Asd-g/AviSynth-vsTTempSmooth/releases/tag/1.2.3 looks like final version with SIMD optimizations added. Run about 8..10x times faster in compare with C-ref (opt=0) at AVX512 chip depending on processing mode (use difference- and frame-distance weighting (slower) or only frame-distance weighting (faster)). AVX2 is about 20..30% slower.

Scalar gathering loop in C finally was changed to SIMD gather hardware instruction (more SIMD-way of execution) https://github.com/Asd-g/AviSynth-vsTTempSmooth/blob/77400e19d990ff7251c99b24af8e7d4bda644692/src/vsTTempSmooth_AVX512.cpp#L88 available at AVX2 and AVX512 architectures and last significant slowing down part of processing was removed. Now vsTTempSmooth Asd-g version 1.2.3 can be used (added to AVS documentation like FilterSDK) as example of simple enough processing re-design to use SIMD architectures. It have C-reference and SIMD implementations of the same processing at 3 different SIMD architectures SSE2/AVX2/AVX512.

Thanks, I use that filter often, always nice to see performance improvements.

Reel.Deel
1st April 2023, 18:35
BlockDetect: determines blockiness of frames.
https://github.com/Asd-g/AviSynthPlus-BlockDetect

DTL
13th May 2023, 08:43
DecodeYV12toRGB (only interleaved RGB32 currently, planar RGBP8 possible) - https://github.com/DTL2020/ConvertYV12toRGB

Some faster and simple quality (point-resize UV) colour-space convert filter, mostly for UHD frame size and draft/preview quality (for monitoring ?). AVX2 minimum CPU required.
Should work close to ConvertToRGB32(chromaresample=point) in quality.

Reel.Deel
19th May 2023, 01:47
BlurDetect: Determines blurriness of frames by adding the relevant frame property.
https://github.com/Asd-g/AviSynthPlus-BlurDetect

StainlessS
8th June 2023, 21:24
CacheTest(), https://forum.doom9.org/showthread.php?t=184920

Debug Filter.
Writes Messages to DebugView window. Requires DebugView.
Writes repeat frame requests and Out Of Sync frame requests [requested not previous requested frame + 1] to Debugview.

Some results for manually jumping about a bit

00001691 0.22455139 [10788] CacheTest_0001: 0] *** Initialized to frame 0 {RepeatCnt=0, oSyncCnt=0}
00001692 1.09279370 [10788] CacheTest_0001: 0] *** REPEAT REQUEST (ReSeek to 0, Player starts to play ???), {RepeatCnt=0, oSyncCnt=0}
00001693 4.92930794 [10788] CacheTest_0001: 89] *** OUT OF SYNC REQUEST, Previous=122 {RepeatCnt=0, oSyncCnt=1}
00001694 4.93385696 [10788] CacheTest_0001: 2582] *** OUT OF SYNC REQUEST, Previous=89 {RepeatCnt=0, oSyncCnt=2}
00001695 10.90573597 [10788] CacheTest_0001: 2722] *** OUT OF SYNC REQUEST, Previous=2755 {RepeatCnt=0, oSyncCnt=3}
00001696 13.87600136 [10788] CacheTest_0001: 14400] *** OUT OF SYNC REQUEST, Previous=2722 {RepeatCnt=0, oSyncCnt=4}
00001697 16.37423706 [10788] CacheTest_0001: 0] *** Rewind to frame 0, Previous=14400, Counts RESET {RepeatCnt=0, oSyncCnt=0}
00001698 46.82066727 [10788] CacheTest_0001: 674] *** OUT OF SYNC REQUEST, Previous=707 {RepeatCnt=0, oSyncCnt=1}
00001699 47.55070114 [10788] CacheTest_0001: 708] *** OUT OF SYNC REQUEST, Previous=705 {RepeatCnt=0, oSyncCnt=2}


[ DebugView v4.90, @ Micro$oft:- https://learn.microsoft.com/en-us/sysinternals/downloads/debugview ]

kedautinh12
20th October 2023, 07:41
MapNLQ
https://github.com/Asd-g/AviSynthPlus-MapNLQ/releases

Reel.Deel
20th October 2023, 19:57
DualSynth-madVR - VapourSynth/AviSynth madVR wrapper
https://github.com/Irrational-Encoding-Wizardry/DualSynth-madVR

PolyphaseResize - AviSynth filter for scaling pixel-perfect sources (no binary, just source)
https://github.com/djrideout/PolyphaseResize

kedautinh12
21st October 2023, 06:48
Can anyone have binary of PolyphaseResize? Thanks

DTL
21st October 2023, 13:26
This is builds of PolyphaseResize with VS2019 - https://drive.google.com/file/d/1aMCTmDUWUQpb3SEZu9Wg0pL5dPWAqVrM/view?usp=sharing . Looks like a not finished version - it uses not clear conversion from float to int and at main processing looks like unbiased conversion from float to byte (compiler warnings). So may have more quantization noise left. It works without crashing (x64 tried) but looks close to PointResize ?

Reel.Deel
21st October 2023, 13:46
Thanks DTL. I'm not sure what it is supposed to look like but in the source it says it uses the coefficients from here: https://github.com/MiSTer-devel/Filters_MiSTer/blob/master/Filters/Interpolation%20(Sharp).txt

kedautinh12
13th November 2023, 01:25
This is builds of PolyphaseResize with VS2019 - https://drive.google.com/file/d/1aMCTmDUWUQpb3SEZu9Wg0pL5dPWAqVrM/view?usp=sharing . Looks like a not finished version - it uses not clear conversion from float to int and at main processing looks like unbiased conversion from float to byte (compiler warnings). So may have more quantization noise left. It works without crashing (x64 tried) but looks close to PointResize ?

It's the same x64 plugin.dll in the x86 folder

Reel.Deel
5th February 2024, 21:24
intellibravs - Intelligent Brightness plugin for AviSynth+
https://github.com/thedeemon/intellibravs

tormento
9th February 2024, 11:02
AVX2 minimum CPU required
Since what release number?

tormento
9th February 2024, 11:05
MapNLQ
What is it for?

I find scarce if no information about polinomial luma mapping.

kedautinh12
9th February 2024, 12:26
What is it for?

I find scarce if no information about polinomial luma mapping.

https://github.com/Asd-g/AviSynthPlus-MapNLQ

tormento
10th February 2024, 11:51
https://github.com/Asd-g/AviSynthPlus-MapNLQ
I read it before asking. No hint about its purpose.

PoeBear
10th February 2024, 23:55
I read it before asking. No hint about its purpose.

"About: Dolby Vision mapping for AviSynth."

It allows you to recreate the output of Dolby Vision UHDs with FEL tracks

DTL
11th February 2024, 06:59
Since what release number?

Since first development build. It was designed as simple and fast solution as working tech demo of moving pictures data processing at the era of AVX2 and later SIMD capable CPU chips in 202x years. The first end-users AVX2 chips is something about beginning of 201x years (Haswell in 2013 ?).

tormento
11th February 2024, 10:51
Since first development build. It was designed as simple and fast solution as working tech demo of moving pictures data processing at the era of AVX2 and later SIMD capable CPU chips in 202x years. The first end-users AVX2 chips is something about beginning of 201x years (Haswell in 2013 ?).


Wait me!

I am waiting for Arrow Lake or Zen 5! [emoji28]

DTL
4th May 2024, 00:08
First release of M_QTGMC() . https://github.com/DTL2020/QTGMC/releases/tag/m_0.1 (M is sort of Monster-QTGMC)

It opens Super and Ultra Slow processing. Release includes required new .dlls - release for test of mvtools2 2.8.0-a.00 and new created plugin MostDiffVal (used in M_QTGMC). Also some version of QTGMC2() based on Dogway version v3.384s .

With current settings (internal) it attempt to create sharpest possible - so most of noise also keeping in.

M_QTGMC is aggregator of 4 calls to QTGMC2 with blocksizes of 8x8 and 16x16 and PP on (for preset="slow") and off. Also each calls of QTGMC2() uses new AreaMode (with not very high AM params - only +4 additional points of search) of MVs internal refining in MAnalyse and new predictor modes for TrueMotion and for median predictor.

Total performance is expected about 0.1 of classic QTGMC(preset='slow') or maybe a bit higher. (Update: at Core2Duo E7500: 11 vs 0.17 fps = 64x times slower.)

Test on BetacamSP (into DV25) capture: https://imgsli.com/MjYxMTMx https://imgsli.com/MjYxMTQx

Most of details saving expected at fast moving subjects. Also may add something good to old noised BetacamSP sources.

Also supplementary plugin MostDiffVal https://github.com/DTL2020/MostDiffVal/releases/tag/0.1 . It may be somehow created using Expr() but I do not know how. It used in function GetSharpest(clip1, clip2) and can be used to create sharpest version of a clip from 2 different processing ways each making sharpest only some parts of a frame and blurs others.

Update 2: With i5-9600K CPU it is not so slow - only about 6x times slower in compare with QTGMC(preset="slow") with x264 running with preset=slow for h.264 transcoding. 7.5 fps with M_QTGMC and 45 fps with QTGMC.

DonCanjas
4th May 2024, 11:20
First release of M_QTGMC() . https://github.com/DTL2020/QTGMC/releases/tag/m_0.1 (M is sort of Monster-QTGMC)

It opens Super and Ultra Slow processing. Release includes required new .dlls - release for test of mvtools2 2.8.0-a.00 and new created plugin MostDiffVal (used in M_QTGMC). Also some version of QTGMC2() based on Dogway version v3.384s .

With current settings (internal) it attempt to create sharpest possible - so most of noise also keeping in.

M_QTGMC is aggregator of 4 calls to QTGMC2 with blocksizes of 8x8 and 16x16 and PP on (for preset="slow") and off. Also each calls of QTGMC2() uses new AreaMode (with not very high AM params - only +4 additional points of search) of MVs internal refining in MAnalyse and new predictor modes for TrueMotion and for median predictor.

Total performance is expected about 0.1 of classic QTGMC(preset='slow') or maybe a bit higher. (Update: at Core2Duo E7500: 11 vs 0.17 fps = 64x times slower.)

Test on BetacamSP (into DV25) capture: https://imgsli.com/MjYxMTMx https://imgsli.com/MjYxMTQx

Most of details saving expected at fast moving subjects. Also may add something good to old noised BetacamSP sources.

Also supplementary plugin MostDiffVal https://github.com/DTL2020/MostDiffVal/releases/tag/0.1 . It may be somehow created using Expr() but I do not know how. It used in function GetSharpest(clip1, clip2) and can be used to create sharpest version of a clip from 2 different processing ways each making sharpest only some parts of a frame and blurs others.

Have you tried using globals to try speeding up the script?
https://raw.githack.com/Dogway/Avisynth-Scripts/master/MIX%20mods/QTGMC%20Docs%20(v3.33).html#ExternalLinkage

Support for progressive input would be much appreciated, by me at least

Note: Why the loading and imports in M_QTGMC? I find it odd since avs+ auto loads plugins/scripts

DTL
5th May 2024, 11:04
If you mean MVs reusage between different calls to QTGMC via globals - it is not possible because the total idea of M_QTGMC is gathering details from different QTGMC calls with different MVs search params (different block size and different pre-processing). The details keeping or blurring at different areas of QTGMC output depends on the generated by MAnalyse MVs field and it is different for different analysis params (block size and pre-processing and others).

M_QTGMC is a sort of additional layer of 'statistical wrapper' around QTGMC processing to gather max variance from a set of observations of 2D random values. It is 'anti-denoise' processing. So with details it also gathers max residual noise over all areas of a frame. It can be also used with QTGMC 'classic' (and mvtools-2.7.x) - simply make a copy and remove all params of mvtools-2.8.x (named mvt_*). It will be much faster and also gather some more details.

"Support for progressive input would be much appreciated, by me at least"

I am not good at script writing. So it means we simply need to pass all not-used params from the M_QTGMC wrapper to underlying QTGMC calls ? I will try to do it in the next version.

"Why the loading and imports in M_QTGMC? I find it odd since avs+ auto loads plugins/scripts"

I do not use auto-loads in AVS+ and different mvtools versions can not be mixed with a single AVS+ process. So I think the only way to use different versions of mvtools is to load all required .dlls from a given path from the script (current working dir or any other). I hope but I not sure if loading some .dll from script directly can prevent AVS from loading 'auto-load' same named .dll from some 'auto-load' path too ? Also users of Computers become more and more lazy and the number of AVS required .dlls become more and more so users typically complain that it is too hard to find all required .dlls (and in the required versions) to run complex scripts (like QTGMC). So I include all required .dlls in the release archive and script loads it from the current working dir. So users can simply unpack the archive to some dir and it is ready to use as a 'portable' version on any host with only AVS+ core .dll installed. And with the addition of source plugin by user's choice.

I think this reply may be moved to either some thread for QTGMC or may be a new thread if there is some discussion for this update.

Addition: The only idea about globals: M_QTGMC with mvtools 2.8.x can export MVs for example for next denoise stage gathered from all internal QTGMC calls and averaged via MAverage() filter added in 2.8.0 build. Because computing of good MVs is very expensive - the already computed MVs may be reused in some next processing. It is possible in next versions but only will be compatible with mvtools 2.8 and later. Also typical QTGMC only produces MVs for tr=6 max in current versions. Though we can ask pinterf to add MAverage and MTransform new filters to 2.7.x builds too - they are simple and separate from all others.

FranceBB
13th May 2024, 15:54
I'm posting it here 'cause I don't know where else to say this.
Besides, I'm also not really sure whether anyone needs it, but here's the thing: asd-g ported BWDIF to Avisynth here https://github.com/Asd-g/AviSynth-BWDIF/releases and he did an amazing job, however he didn't include XP compatible builds.
In case anyone needs them, I've included them here: https://github.com/FranceBB/BWDIF/releases/
All credits are on asd-g for all the hard work, I've just got his release, constrained the whole thing to SSE2, included /Zc:threadSafeInit and compiled with v141_xp targeting Windows XP x86 x64.
I've only really tested it on XP x86 'cause I don't have an x64 version lying around, but it should work on x64 too nonetheless.
I also added a tiny link in the wiki at the end of the page here: http://avisynth.nl/index.php/BWDIF pointing to the XP compatible builds too.
Please note that I've also included the standard Windows x64 x86 builds compiled with v143, however if you're on Windows 10/11, unless you wanna be constrained to SSE2 only, you should really use the official asd-g ones compiled by him with the Intel Compiler which include AVX2 and AVX512 as well.

tormento
4th June 2024, 18:54
Someone should update DGDecNV wiki page. It's way outdated, missing all the new internal filters.

Reel.Deel
10th June 2024, 21:54
AviSynthDeinterlaceSwitch: plugin for switching between two clips depending on if the scenes in the source clip are interlaced or not.
https://github.com/MvonSchantz/AviSynthDeinterlaceSwitch

AviSynthFilmGrain: filter for adding realistic film grain to videos using the algorithm described in "Realistic Film Grain Rendering".
https://github.com/MvonSchantz/AviSynthFilmGrain

Reel.Deel
8th August 2024, 15:35
JoshUpscale - Upscales and refines video (480x270 -> 1920x1080) using AI model. Made for upscaling GTA VCS streams.
https://github.com/itmo153277/JoshUpscale

v0lt
18th August 2024, 10:07
MPC Script Source 0.2.1.165 (https://github.com/v0lt/ScriptSourceFilter/releases/tag/0.2.1)
The filter allows to open AviSynth+ and VapourSynth script files in DirectShow video players.

tormento
1st November 2024, 11:46
https://github.com/Asd-g/bore

This approach to border deringing uses linear least squares (https://www.gnu.org/software/gsl/doc/html/lls.html) to find a proper adjustment.

rgr
17th March 2025, 11:58
https://github.com/radpopl/MergeClips/

# -------------------------------------------------------------------------------------------------------
# Concatenating clips of different resolutions by enlarging smaller ones and optionally adding black bars
# -------------------------------------------------------------------------------------------------------
#
# MergeClipsV (clip Clip1, clip Clip2, string resize="Lanczos")
# MergeClipsV (clip_array Clips, string resize="Lanczos")
# - Returns a clip that is a concatenation of proportionally enlarged clips whose height is equal to the height of the HIGHEST clip. Black bars are added to the sides of individual clips if necessary. The "resize" parameter defines the upscaling method.
#
# MergeClipsH (clip Clip1, clip Clip2, string resize="Lanczos")
# MergeClipsH (clip_array Clips, string resize="Lanczos")
# - Returns a clip that is a concatenation of proportionally enlarged clips whose width is equal to the width of the WIDEST clip. Black bars at the bottom and top are added to individual clips if necessary. The "resize" parameter defines the upscaling method.
#
# Notice:
# - the format of all clips must be the same except for width and height
# - I suggest converting to YUV444 or RGB before calling the function, and converting the final clip back to the target format (for better resize quality)
#
# (v1.0)
#

hello_hello
17th March 2025, 19:23
rgr,

I hadn't played with arrays much before, so after seeing your functions I used them as a bit of a learning exercise and created a new variation in the process. This one requires my CropResize function. The width, height and borders arguments are optional.

Usage:
MergeClips([A,B,C,D], W=960, H=540, Borders=true)

MergeClips.avsi (https://files.videohelp.com/u/210984/MergeClips.avsi)

rgr
21st March 2025, 17:13
rgr,

I hadn't played with arrays much before, so after seeing your functions I used them as a bit of a learning exercise and created a new variation in the process. This one requires my CropResize function. The width, height and borders arguments are optional.

Usage:
MergeClips([A,B,C,D], W=960, H=540, Borders=true)

MergeClips.avsi (https://files.videohelp.com/u/210984/MergeClips.avsi)

I understand, but the idea of ​​MergeClips is to enlarge to the size of the largest clip, not to a given resolution.

In the latter case, it is better to use CropResize.

The idea came when I had to combine several clips from a miniDV camera, each 720px wide and DAR 4:3, but different heights (quasipanorama with black bars). The 720x576 fragments get black bars on the sides, and the 720x436 fragments are enlarged to 952x576 (which width you don't have to calculate).

hello_hello
27th March 2025, 10:17
I had a bit of time to kill so here's an improved version.
The clips can have different sample aspect ratios as long as they have a SAR in frame properties.
There's a description of the arguments at the top of the script.

Link for an updated version of the function in post #355 (https://forum.doom9.org/showthread.php?p=2019958#post2019958).

Creating three source clips from a 720p video.

Trim(5479,5479)
A = CropResize(720,576, OutSAR=16.0/15.0)
B = CropResize(720,436, OutSAR=16.0/15.0)
C = CropResize(720,576, OutSAR=64.0/45.0)

https://i.ibb.co/JRj5c5gV/0A.jpg
https://i.ibb.co/v4DXSZjj/0B.jpg
https://i.ibb.co/rf7NKPW7/0C.jpg

CombineClips([A,B,C])

https://i.ibb.co/DfxwhZrv/1A.jpg
https://i.ibb.co/zhjpBj6p/1B.jpg
https://i.ibb.co/4ndC8R8S/1C.jpg

CombineClips([A,B,C], Max=false)

https://i.ibb.co/JRj5c5gV/0A.jpg
https://i.ibb.co/b51HKzg1/2B.jpg
https://i.ibb.co/ynHvffXS/2C.jpg

Resizing for NTSC complaint video.
CombineClips([A,B,C], 720,480, OutSAR=10.0/11.0)

https://i.ibb.co/Y4yQVVZL/3A.jpg
https://i.ibb.co/XZ6jM51t/3B.jpg
https://i.ibb.co/NdCZH3Vx/3C.jpg

v0lt
3rd April 2025, 07:30
MPC Script Source 0.2.7.192 (https://github.com/v0lt/ScriptSourceFilter/releases/tag/0.2.7)
The filter allows to open AviSynth+ and VapourSynth script files in DirectShow video players.

Changes:
Fixed registration of a filter from a folder with Unicode characters.

wonkey_monkey
26th April 2025, 23:42
RemapVK (https://forum.doom9.org/showthread.php?t=186301)

A GPU-based image remapper.

DTL
25th May 2025, 10:03
Reduced version of M_QTGMC() script to work with old versions of mvtools2 (up to 2.7.46 release by pinterf) - https://github.com/DTL2020/QTGMC/releases/tag/m_0.2old_mvt

It still works somehow better in comparison with QTGMC(preset="slow"). Test/compare script example included in the release archive. Currently highest complexity preset M_QTGMC_high() looks also working and make some better result (but even much more slower).

Also expected to be much faster without new complex motion estimation modes for MAnalyse.

Some comparison with same QTGMC version at running animal capture (VHS-like)
https://imgsli.com/MzgyNjA0

Also there is an idea to make QTGMC with RIFE interpolation engine for comparison instead of mvtools. Though it also fails on low quality blurry content like VHS captures.

hello_hello
22nd June 2025, 15:10
I had a bit of time to kill so here's an improved version.
The clips can have different sample aspect ratios as long as they have a SAR in frame properties.
There's a description of the arguments at the top of the script.

New version of CombineClips .
Simplified the syntax for determining the correct dimensions and storage aspect ratio.
Added additional arguments to the function.

Edit: 2025-07-08
Fixed the function only taking the width height and aspect ratio of the first and last clips into account when looking for the maximums.

Edit: 2025-10-10
Added a VapourSynth version of CombineClips.

Edit: 2025-12-20
I've made some changes/improvements to CombineClips and it's now included with the CropResize function.
https://forum.doom9.org/showthread.php?t=176667
Example usage:
https://forum.doom9.org/showthread.php?p=2026204#post2026204

wonkey_monkey
27th July 2025, 13:59
OnDemandFilter v0.2 (https://forum.doom9.org/showthread.php?t=186440)

Filter deferring wrapper, reduces memory usage and script loading times.

pbone
29th November 2025, 22:19
I search a script to correct tbc on avi file (from vhs). Correction line by line on frame
Script for vapoursynth

StainlessS
29th November 2025, 23:59
I search a script to correct tbc on avi file (from vhs). Correction line by line on frame
Script for vapoursynth
Well then you will want to look elsewhere, this thread is not for that purpose.

pbone
30th November 2025, 00:18
Very interesting response.

DTL
18th February 2026, 13:15
Pre-release of RIFE 1.2.5 for better denoise frame interpolation with small temporal radius https://github.com/DTL2020/AviSynthPlus-RIFE/releases/tag/pre-1.2.5

The quality of the interpolation for fast and complex motion quickly degrades with increasing symmetrical temporal radius around the current frame. So new frames setup for interpolation mode were added - direct input of back and forward frames from current count. Now for total tr=2 it is possible to request up to +2 more interpolated frames for next processing (by some averaging or other engine).

Example for total (max) tr=2: (with RIFE 1.3.0 release - denoise_bf offset must be positive too).

ConvertToPlanarRGB(bits=32)
# Old symmetrical frames
#tr=1
den_tr1=RIFE(denoise=true, denoise_bf=-1, denoise_ff=1)
#tr=2
den_tr2=RIFE(denoise=true, denoise_bf=-2, denoise_ff=2)
#2 new asymmetrical frames with better quality in comparison with tr=2
den_m1p2=RIFE(denoise=true, denoise_bf=-1, denoise_ff=2)
den_m2p1=RIFE(denoise=true, denoise_bf=-2, denoise_ff=1)

#process with some temporal-median engine
# all interpolated frames + source - max denoise, less details
Interleave(den_tr1, den_tr2, last, den_m1p2, den_m1p2)
ConvertToYUV444()
vsTTempSmooth(pmode=1, maxr=2, ythresh=255, uthresh=255, vthresh=255)
SelectEvery(5,2)

#no tr=2 worst frame, low denoise, more details
Interleave(den_tr1, den_tr1, last, den_m1p2, den_m1p2) # more weight to best tr=1 frame
ConvertToYUV444()
vsTTempSmooth(pmode=1, maxr=2, ythresh=255, , uthresh=255, vthresh=255)
SelectEvery(5,2)

# even less denoise, more source details
Interleave(den_tr1, last, last, den_m1p2, den_m1p2) # more weight to input frame
ConvertToYUV444()
vsTTempSmooth(pmode=1, maxr=2, ythresh=255, , uthresh=255, vthresh=255)
SelectEvery(5,2)

#no input frame - only 3 interpolated
# average denoise, average details
Interleave(den_tr1, den_m1p2, den_m1p2) # equal weight to all interpolated frames
ConvertToYUV444()
vsTTempSmooth(pmode=1, maxr=1, ythresh=255, , uthresh=255, vthresh=255)
SelectEvery(3,1)


Note: The old method denoise_tr=X may be broken (denosie_tr=2 returns same frame as denoise_tr=1) - waiting for Asd-g to make checked/fixed release. I can not make debugging with Vulkan acceletator at my current development config.

tormento
22nd February 2026, 20:15
Descale avs11

Video/Image filter to undo upscaling. Includes a VapourSynth and AviSynth+ plugin

https://github.com/Asd-g/vapoursynth-descale

DTL
25th February 2026, 19:46
RIFE 1.3.0 - https://github.com/Asd-g/AviSynthPlus-RIFE/releases/tag/1.3.0
Added denoise_bf/ff offsets (both positive) and internal (at accelerator ?) dematrix of input YUV. Though ConvertBits are still external (called internally if input is not float32 ?). Also loaded model reusage between different filters in the current filtergraph. May helps with many filter calls from the same script in denoise scripts.

StvG
26th February 2026, 05:20
... Though ConvertBits are still external (called internally if input is not float32 ?)...

This is only for scene change determination (get_sad_c).

The input color format -> RGBPS is done on GPU preprocess step.

tormento
3rd March 2026, 12:13
BlindPP 1.0.0

https://github.com/Asd-g/avisynth-blindpp/releases/tag/1.0.0

Added:
Support for 10, 12, 14, 16-bit integer pixel formats.
Support for 32-bit floating point processing.
SIMD code for SSE2, SSE4.1, AVX2, and AVX-512 instruction sets.
Parameter opt.
Support for Y and YUV444 planar formats.
CMake building system.
Changed:
Increased the maximum quant limit from 31 to 63 to allow for finer control over filtering strength.
Replaced inline MMX assembly with C++ code and SIMD intrinsics.

tormento
12th March 2026, 23:25
libplacebo_Render 1.1.0

An AviSynth+ plugin interface to libplacebo - a reusable library for GPU-accelerated image/video processing primitives and shaders.

https://github.com/Asd-g/libplacebo_Render

real.finder
27th March 2026, 18:25
new New SRFComb filter for Rainbow & Dot Crawl Removal – More details:- https://forum.doom9.org/showthread.php?t=186908

shurik_pronkin
3rd April 2026, 19:34
DualDelogo.avsi — automatic switching between alternating logos for InpaintDelogo.

Some old TV recordings have two logos alternating in blocks (e.g. channel + production company). This function detects which logo is present per-frame using RT_LumaCorrelation and applies the matching InpaintDelogo — or passes through if no logo detected.

Thread: https://forum.doom9.org/showthread.php?t=186921

shurik_pronkin
3rd April 2026, 21:27
AviSynth Virtual Bridge - pipe external tools (Topaz, VapourSynth, ffmpeg) back into AviSynth without intermediate files. Uses WinFsp FUSE virtual filesystem with blocking reads. Python + fusepy, no compiler needed.

Thread: https://forum.doom9.org/showthread.php?t=186920
GitHub: https://github.com/schpuppa-art/avs-virtual-bridge

shurik_pronkin
4th April 2026, 06:32
SmartCrop.avsi — per-frame adaptive border removal for sources with variable black bars (film reel changes, analog broadcast recordings). Single-pass, runs inside ScriptClip using Resize src_ parameters. Separate scan depth for vertical/horizontal, per-side margins for gradient edges, stretch and fit modes. Requires RT_Stats.

Thread: https://forum.doom9.org/showthread.php?t=186924

real.finder
5th April 2026, 01:01
crt_tv_interlace() (https://forum.doom9.org/showpost.php?p=2029962&postcount=74)

can be used as a crt deinterlacer for 480i (like DVD) and a crt upscaler in the same time, CRT TV quality Deinterlace Scaler

geometer
6th April 2026, 05:31
Two fast implementations with Expr()

Predictive Ringing Removal https://forum.doom9.org/showthread.php?t=186925 - I think it's a game changer.
This code synthesizes a ringing artifact, and subtracts it from the input signal.
So, this helps with systemic artifacts, that are typical for recompressing and sharpening older DVD videos.
(Plz also see the test pics. Cleans up the mess and does not blur the main signal.)
(Thanks to Selur for the Vapoursynth port, that additionally supports deringing of horizontal lines.)

Convolution revisited https://forum.doom9.org/showthread.php?t=186926
This implements a fast 5x5 convolution to replace generalconvolution(), suitable for typical sharpening or corrective kernels.
You need not compute and specify the divisor, it is automated.
Optimization: Zero-coefficients (sparse matrix) are removed before computation.

shurik_pronkin
6th April 2026, 10:12
SCDetectEOD — histogram-based scene-change detector for AviSynth+.

Stateless, no motion estimation, no external dependencies. Designed for scanned animation and other material where MVTools MSCDetection struggles: shot/reverse-shot dialogues, hand-drawn cel animation with static backgrounds, sources with heavy film-grain flicker.


Y + UV 2D histogram distance with flicker guard and minimum-scene-length post-filter
Writes _scd_boundary frame property — works with any downstream filter that reads frame props
YV12 input, pixels pass through untouched
Forward-sweep cached, O(1) random seek


Source, binaries, README and integration examples (including a RIFE scene-signaling example):
https://github.com/schpuppa-art/SCDetectEOD-Avisynth-

MSVC build only. MIT license.

==========================

SCDetectEOD v2.0 — histogram-based scene-change detector for AviSynth+.

v2.0 adds three parameters for broader coverage:


downscale (0/2/4) — internal box-average downscale before histogramming. Drops compute cost ~4ื/16ื on HD/4K material. Detection thresholds are normalized per pixel so calibration carries over. Note: SD and 720p sources should not use downscale — the UV histogram becomes too sparse; see README for a resolution-minimum table.
ignore_borders — crops a border ROI before histogramming. For film scans with visible perforation, variable letterbox/pillarbox, or otherwise noisy edges that should not contribute to cut decisions.
mono — explicit monochrome mode. Disables the UV criterion entirely. Required for black-and-white material — without it, a B&W clip will never produce any cuts because dHistUV is always near zero on constant chroma.


Backward compatible — v1.0 calibration and usage work unchanged. New parameters all default to off.

https://github.com/schpuppa-art/SCDetectEOD-Avisynth-

MSVC build only. MIT license.

shurik_pronkin
6th April 2026, 10:13
AutoLevelsEOD — adaptive per-channel auto-levels for AviSynth+.

Port and extension of the VirtualDub AutoLevels filter v1.2 by EOD. Same per-channel histogram-stretch math, plus automatic correction strength per frame and scene-locked stabilization so the decision doesn't flicker across frames.


auto_bright rule set picks effective bar_bright per frame from full-histogram metrics — mild casts corrected, artistic color (sunsets, tinted titles, dark scenes with bright accents) left alone
Scene-lock via SCDetectEOD (https://github.com/schpuppa-art/SCDetectEOD-Avisynth-): eff computed freely on every frame of a scene, the minimum (most aggressive) locked for the whole scene — one stable decision per scene, no flicker
AutoLevelsEOD_Measure companion filter writes all metric frame props without touching pixels, for calibration
RGB32 input


Source, binaries, README and calibration examples:
https://github.com/schpuppa-art/AutoLevelsEOD-Avisynth-

MSVC build only. MIT license, credit to EOD for the original.

shurik_pronkin
10th April 2026, 13:41
SpliceRepair v1.0 — automatic removal of film splice mark artifacts (AviSynth+ script)

Automatically fixes horizontal artifacts left by cement/tape splices on scanned film. Uses SCDetectEOD (https://github.com/schpuppa-art/SCDetectEOD-Avisynth-) scene boundaries to identify first/last frames of each scene and replaces damaged top/bottom rows with clean rows from a nearby frame within the same scene.

No resampling, no blurring — just a surgical strip replacement.


sd = last.SCDetectEOD(mono=true, downscale=2)
last.SpliceRepair(sd, repair_top=48, repair_bottom=0, offset=2)


Thread: https://forum.doom9.org/showthread.php?t=186932

shurik_pronkin
14th April 2026, 15:07
DustPort 1.0.0 — a limit-clipping spatiotemporal denoiser for AviSynth+, in the philosophy of Steady's DustV5 (2003).

The guarantee: every output pixel is bounded within source ฑ limit. No drift, no hallucinated detail. Aimed at film restoration where modern denoisers can produce plausible-but-wrong output.

Features

Four classic names: FaeryDustPort / PixieDustPort / GoldDustPort / SpaceDustPort
Temporal radius 1..5, mean or median
External motion compensation via prev / next arrays (compose with MVTools)
Edge-aware per-pixel limit map (Sobel-based)
Planar YUV 8, 10, 12, 14, 16 bit
Per-plane processing
SSE2 / SSE4.1, x86-64 Windows, AviSynth+ 3.4+


Not bit-exact with the original DustV5 (source was never published) — independent implementation of the same philosophy, built from reverse-engineering of the 2003 binary plus the public ReadMe.

Links

GitHub: https://github.com/schpuppa-art/dustport-avisynth-
Releases (DLL download): https://github.com/schpuppa-art/dustport-avisynth-/releases/tag/v1.0
Full discussion thread: AviSynth Usage thread (https://forum.doom9.org/showthread.php?t=186939)


Released under MIT license.

Ikotas
19th April 2026, 19:38
generate_tfmovr v1.0

This tool was created to ensure accurate deinterlacing without errors or omissions.

Description
This tool processes and cleans up TFM output files. It analyzes telecine (interlace) cycles and corrects them into consistent, clean patterns. By eliminating incorrect match code (c/p) detections, it enables high-precision deinterlacing.

doom9 post
https://forum.doom9.org/showthread.php?t=186944

github
https://github.com/Ikotas/generate_tfmovr

wonkey_monkey
6th May 2026, 23:53
Info2 v0.2 (https://forum.doom9.org/showthread.php?t=186960)

Much faster alternatives (10x-100x) for built-in info filters:

* Info2 (updated with frame property pass-through)
* ShowFrameNumber2
* ShowTime2
* ShowSMPTE2