Log in

View Full Version : AviSynth+ plugins and utilities for other OSes and CPUs


qyot27
7th November 2020, 05:26
I debated whether to put this in the Development area or not, but since this is mostly about making sure there's a list of what's available to use, it probably belongs here.

I've been working on this list for the last month, intending to actually do first-party tests of them on the target OSes and CPUs, but I've not had the time or motivation to do so after getting home from work. So it stalled quite a bit, and the intent here was eventually to get this on here so other users can report back any successes/failures in using the plugins or utilities on stuff other than Windows and/or x86, so here we are.

It's very possible that many of these utilities or plugins could build or run without any problem on other OSes or CPUs without much or any modification, so don't consider the list below definitive.

This could/should probably be used to create a chart on the AviSynth Wiki for this info. I'll try to make sure the first post is updated with information as others report stuff that I'd not gotten to yet. The basic format I'll be using is
Name: Name of project
URL: Main upstream URL of the source code
OSes: OSes that the plugin has been tested and runs on
CPUs: CPU architectures that the plugin has been tested and runs on; 32-bit and 64-bit architectures are separate

AviSynth+ itself added support for Linux, macOS, and BSD in version 3.5. Basic* support for ARM was added in 3.6. Haiku and PowerPC support was added in version 3.7.0. RISC-V and SPARC were added in 3.7.1 after testing in QEMU. MIPS was enabled in 3.7.3, but untested on my end.

*There are no SIMD/intrinsics to speed things up compared to the compiler optimizing the C/C++ version of the functions, although multi-threading seems to work on Linux and Mac.

Utilities:

Name: FFmpeg (4.3 or higher to use AviSynth+ on non-Windows; versions below 4.3 expect AvxSynth)
URL: https://ffmpeg.org/
OSes: Numerous
CPUs: Numerous

Name: avs2yuv
URL: https://github.com/DJATOM/avs2yuv.git
OSes: Windows, Linux, macOS, BSD, Haiku
CPUs: x86(-64), ARM, PowerPC, SPARC, RISC-V

Name: x264 (AviSynth+ replaced AvxSynth on non-Windows platforms as of 2022-Feb-21/22)
URL: https://code.videolan.org/videolan/x264.git
OSes: Numerous
CPUs: Numerous

Name: avsViewer
URL: https://github.com/Selur/avsViewer
OSes: Numerous?
CPUs: Numerous?
? Qt's OS and CPU support is really the determining factor here.


Plugins:

Name: FFMS2
URL: https://github.com/FFMS/ffms2.git
OSes: Windows, Linux, macOS, BSD, Haiku
CPUs: x86(-64), ARM32, ARM64, PowerPC32, PowerPC64, PowerPC64-LE
(i686, amd64, armv7, aarch64, ppc, ppc64, ppc64le)

Name: LSMASHSource
URL: https://github.com/HomeOfAviSynthPlusEvolution/L-SMASH-Works.git
OSes: Windows, Linux
CPUs: x86(-64)

Name: RawSource_2.6x
URL: https://github.com/Asd-g/RawSource_2.6x
OSes: Windows, Linux
CPUs: x86(-64)

Name: MPEG2DecPlus
URL: https://github.com/Asd-g/MPEG2DecPlus
OSes: Windows, Linux
CPUs: x86(-64)

Name: FluxSmooth
URL: https://github.com/pinterf/FluxSmooth.git
OSes: Windows, Linux
CPUs: x86(-64)

Name: avsresize
URL: https://forum.doom9.org/showthread.php?p=1925356#post1925356
OSes: WIndows, Linux
CPUs: x86(-64)

Name: DelogoHD
URL: https://github.com/HomeOfAviSynthPlusEvolution/DelogoHD.git
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_f3kdb
URL: https://github.com/HomeOfAviSynthPlusEvolution/neo_f3kdb.git
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_fft3dfilter
URL: https://github.com/HomeOfAviSynthPlusEvolution/neo_FFT3D
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_gradient_mask
URL: https://github.com/HomeOfAviSynthPlusEvolution/neo_Gradient_Mask
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_minideen
URL: https://github.com/HomeOfAviSynthPlusEvolution/minideen
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_dfttest
URL: https://github.com/HomeOfAviSynthPlusEvolution/neo_DFTTest
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_tmedian
URL: https://github.com/HomeOfAviSynthPlusEvolution/neo_TMedian.git
OSes: Windows, Linux
CPUs: x86(-64)

Name: neo_vague_denoiser
URL: https://github.com/HomeOfAviSynthPlusEvolution/neo_Vague_Denoiser.git
OSes: Windows, Linux
CPUs: x86(-64)

Name: rotate
URL: https://github.com/SuNNjek/rotate-plugin
OSes: Windows, Linux
CPUs: x86(-64)

Name: yadifmod2
URL: https://github.com/Asd-g/yadifmod2
OSes: Windows, Linux
CPUs: x86(-64)

Name: TurnsTile
URL: https://github.com/ItEndsWithTens/TurnsTile
Oses: Windows, Linux, macOS
CPUs: x86(-64)

Name: AddGrainC
URL: https://github.com/pinterf/AddGrainC
OSes: Windows, Linux
CPUs: x86(-64), ARM32, ARM64

Name: RgTools
URL: https://github.com/pinterf/RgTools
OSes: Windows, Linux
CPUs: x86(-64)

Name: mvtools
URL: https://github.com/pinterf/mvtools
OSes: Windows, Linux
CPUs: x86(-64)

Name: TIVTC and TDeint
URL: https://github.com/pinterf/TIVTC
OSes: Windows, Linux
CPUs: x86(-64)

Name: Masktools2
URL: https://github.com/pinterf/masktools
OSes: Windows, Linux
CPUs: x86(-64)

Name: RemoveDirt
URL: https://github.com/pinterf/RemoveDirt
OSes: Windows, Linux
CPUs: x86(-64)

Name: MedianBlur2
URL: https://github.com/pinterf/MedianBlur2
OSes: Windows, Linux
CPUs: x86(-64)

Name: AssRender
URL: https://github.com/pinterf/assrender
OSes: Windows, Linux
CPUs: x86(-64)

Name: TComb
URL: https://github.com/pinterf/TComb
OSes: Windows, Linux
CPUs: x86(-64)

Name: RemoveGrainHD
URL: https://github.com/pinterf/RemoveGrainHD
OSes: Windows, Linux
CPUs: x86(-64)

Name: Convolution3D
URL: https://github.com/pinterf/Convolution3D
OSes: Windows, Linux
CPUs: x86(-64)

Name: fft3dfilter
URL: https://github.com/pinterf/fft3dfilter
OSes: Windows, Linux
CPUs: x86(-64)

Name: TNLMeans
URL: https://github.com/pinterf/TNLMeans
OSes: Windows, Linux
CPUs: x86(-64)

Name: Average
URL: https://github.com/pinterf/Average
OSes: Windows, Linux
CPUs: x86(-64)

Name: AjkMedian
URL: https://github.com/pinterf/AjkMedian
OSes: Windows, Linux
CPUs: x86(-64)

Name: fmtconv
URL: https://github.com/EleonoreMizo/fmtconv
OSes: Windows, Linux
CPUs: x86(-64)

Name: KNLMeansCL
URL: https://github.com/qyot27/KNLMeansCL/commits/avs-linux (upstream pull request (https://github.com/Khanattila/KNLMeansCL/pull/54))
OSes: Windows, Linux
CPUs: x86(-64)

Name: DeDup
URL: https://github.com/qyot27/DeDup
OSes: Windows, Linux
CPUs: x86(-64)

Name: amDCT
URL: https://github.com/pinterf/amDCT
OSes: Windows, Linux
CPUs: x86(-64)


AvxSynth plugins that might be easily updated:

Name: avxsynth-decomb
URL: https://github.com/qyot27/avxsynth-decomb
OSes: Linux

real.finder
13th December 2020, 19:56
maybe adding this https://github.com/Asd-g/MPEG2DecPlus/pull/5 too

also adding this thread link to https://forum.doom9.org/showthread.php?t=180436 so people will know about it from there

qyot27
13th December 2020, 22:16
maybe adding this https://github.com/Asd-g/MPEG2DecPlus/pull/5 too
As it hasn't been merged yet, I'd initially go with the eblanca/MPEG2DecPlus repo, but if there's some hint it'll be merged soon, I'd rather hold off until that happens.

Or I could just create a 'pending' section for stuff where the changes have been made externally and a PR exists upstream. Once it's merged, it'll go into the regular list.

also adding this thread link to https://forum.doom9.org/showthread.php?t=180436 so people will know about it from there
Good idea.

Losko
14th December 2020, 12:48
Great idea qyot27!
This thread turns out to become a very useful resource for any non-Windows users out there!

Edit: PR for MPEG2DecPlus got merged hours ago - I'm user eblanca on github

qyot27
14th December 2020, 19:06
Done.

pinterf
15th December 2020, 14:55
Done.
Hi, as a practice I updated a relatively easy case: AddGrainC.
I'm not sure I have copy-pasted-merged properly.
Nevertheless it is working fine on my WSL. Can someone try it? Theoratically it handles the INTEL_INTRINSICS define as well through an option, just like Avisynth does.

pinterf
15th December 2020, 18:11
And a second one from me:
https://github.com/pinterf/RgTools
(Tested on my Ubuntu WSL, only intel at the moment but I'm glad that even this was achieved)

qyot27
16th December 2020, 06:36
Did some quick and dirty tests on Ubuntu 20.10/i5-9400, both AddGrainC and RgTools build and can run (although I noticed that RemoveGrain mode 19 seems to not like 10-bit 4:4:4). Added to the list.

I did not test AddGrainC on the RasPi 4, but given how the changes look I'd be surprised if it didn't work.

One way to quickly have a way of verifying this on other CPU arches would be qemu VMs that users could download and test-run. The problem is that even with 7z compression, that's still a pretty big download, multiplied several times if users don't want to bother with setting up the VMs themselves and just want something they can run out of the box and test the compile/run process on just the plugin (and/or AviSynth+ and corresponding FFmpeg/mpv).

pinterf
16th December 2020, 08:13
(although I noticed that RemoveGrain mode 19 seems to not like 10-bit 4:4:4).
Thanks, this mode had a bug in 16 bit, fixed on git.

Losko
16th December 2020, 14:08
One way to quickly have a way of verifying this on other CPU arches would be qemu VMs that users could download and test-run. The problem is that even with 7z compression, that's still a pretty big download, multiplied several times if users don't want to bother with setting up the VMs themselves and just want something they can run out of the box and test the compile/run process on just the plugin (and/or AviSynth+ and corresponding FFmpeg/mpv).

Some times ago I stumbled into this page (https://blog.aurel32.net/153) offering qemu images of debian 6/7 for different architectures. One nice thing I noticed is once you install debian without any DEs, the resulting image is very compact (I see there are some under 300 MB).
I think running new plugins into a VM can be useful for testing and bug hunting, also assuming avisynth+ is about number crunching (no visual output needed), those can be taken as a viable solution.


Edit: "those" I mean a current debian installation image, neither 6 nor 7.

kedautinh12
16th December 2020, 14:57
Thanks, this mode had a bug in 16 bit, fixed on git.

Can you compile new ver with fixed?

pinterf
20th December 2020, 19:48
Can you compile new ver with fixed?
Not finished yet

pinterf
20th December 2020, 19:56
MvTools2 Linux port (https://github.com/pinterf/mvtools) and other things. I'm happy with that, I never ever thought that I would be doing that. A running related injury helped a lot to have time for that :)
Tested on my Ubuntu 19.10 WSL.

- 2.7.45 (WIP)
- MSuper: rfilter=0 and 1
8 bit: drop old SSE code, port to SIMD intrinsics. Add SIMD to 16 bit case. Quicker, much quicker.
(rfilter: Hierarchical levels smoothing and reducing (halving) filter)
- MSuper: sharp=1 for pel=2 or 4
Bicubic resizer drop old SSE code, port to SIMD intrinsics, implement SIMD intrinsics to 16 bit case.
No need for Bilinear.asm and Bilinear-x64.asm any more.
- SATD: add 8 bit C versions (geee, there wasn't one) (as an alternative to the external asm)
- SAD: add internal SIMD for 8 bit SAD (SSE4.1) (as an alternative to the external asm)
- Overlaps: Add internal SIMD for 8 bit. (as an alternative to the external asm)
- In def.h any existing external assembler file can be disabled.
The primary reason for this was to quickly test the linux port, for me this was easier than bothering with asm compilation and linking.
For non-Windows cases all of these are disabled now.
- USE_COPYCODE_ASM (CopyCode-a.asm). Has internal alternative. Same speed.
- USE_OVERLAPS_ASM (Overlap-a.asm). asm implements 8 bit only. Has internal SIMD alternative. About the same speed.
- USE_SAD_ASM (sad-a.asm) asm implements 8 bit only. Note: Internal 8 bit SIMD SAD is a bit slower that these handcrafted ones.
- USE_SATD_ASM (Pixel-a.asm) asm implements 8 bit only. Note: SATD 8 bit has no SIMD replacement yet.
- USE_LUMA_ASM (Variance-a.asm) asm implements 8 bit only. Has internal alternative.
- USE_FDCT88INT_ASM (fdct_mmx.asm, fdct_mmx_x64.asm)
Only used for 8x8 block sizes. Quick integer version instead of fftw3.
No internal alternative, fftw3 is used instead.
- USE_AVSTP (do not search for avstp.dll on Windows)
- Minor and not so minor cosmetics, mainly for GCC.
- Add Cmake build system.
- Linux/GCC port (needs sse4.1), Dewindowsification.
fftw3: MAnalyze dct modes that require fftw3 library will search for libfftw3f_threads.so.3
Install either libfftw3-single3 (deb) or fftw-devel (rpm) package"
e.g. sudo apt-get update
sudo apt-get install libfftw3-dev
- Not done (will be done in a second phase):
Add back some external asms. For 8 bit SAD and SATD mainly.
Linux port is still Intel-only, though every part has C alternative by now.
Separate the 3 projects (mvtools2, depan, depan_estimate).
Depan and Depan_estimate Linux port

StainlessS
20th December 2020, 20:17
Fortunate running injury, lets hope you have many more :)

qyot27
21st December 2020, 00:55
So, was depan originally part of mvtools? Because if it was, then I guess there's no need to keep the btb/depan entry in that 'port from AvxSynth?' section.

pinterf
21st December 2020, 08:26
So, was depan originally part of mvtools? Because if it was, then I guess there's no need to keep the btb/depan entry in that 'port from AvxSynth?' section.
Right. No need. Depan filters are not part of mvtools2, but I treat them together; mvtools2 MDepan can generate vectors with additional rotation and probably zoom info for depan_stabilize. They had some common source parts as well.

pinterf
21st December 2020, 19:23
O.K. after mvtools2, DePan and DePanEstimate filters are ported as well. Not tested at all.
- Separate the 3 projects (mvtools2, depan, depan_estimate).
- DePan and DePanEstimate: Linux port
- DePanEstimate: add fft_threads variable (default 1) for fftw3 mode (experimental)
- DepanEstimate: add MT guard around sensible fft3w functions

pinterf
27th December 2020, 18:48
TIVTC and TDeint (x86/x64 Linux, built on Ubuntu 19.10 WSL)
https://github.com/pinterf/TIVTC

pinterf
29th December 2020, 23:45
Masktools2 (x86/x64 Linux, built on Ubuntu 19.10 WSL)
https://github.com/pinterf/masktools

real.finder
30th December 2020, 00:34
thanks pinterf, after your updates for Linux I think I will install Linux on virtualbox and try play with avs+ in Linux

FranceBB
30th December 2020, 03:04
Wow, now we have mask tools too? Great! :D
If someone was going to say to me: "you'll never have to shut down Fedora and boot Windows in the future, not even to encode with Avisynth" years ago I would have replied: "Shut the front door!" but surprisingly it's actually happening... (*__*) There are still many many plugins to be ported and between updating Avisynth, making plugins planar high bit depth compatible and porting them to Linux there's gonna be a lot to do in 2021, but I'm really grateful for what you're doing. :)

I mean, from an 8bit only, YV12/YUY2 x86 single thread Windows only frameserver Avisynth has come a long way and it's amazing if you think about where we are now: 32bit planar, x64, cross platform, parallelized... It might be the Christmas mood, but... There are tears coming out of my eyes... :')

real.finder
1st January 2021, 06:35
avspmod is not in the list, IIRC it was work with avxsynth

I did instal linux mint and avs+ work
https://i.postimg.cc/2qf53qvN/Screenshot-from-2021-01-01-09-08-11.png (https://postimg.cc/2qf53qvN)

qyot27
7th January 2021, 01:15
avspmod is not in the list, IIRC it was work with avxsynth
It may no longer work with even AvxSynth, based on some of the commentary about the current state of the project from back when it got updated to newer interface versions.

But despite that, it doesn't help AviSynth+ too much in that case. From a code perspective (if it has to communicate directly with the library) or from a function coverage perspective.

What does exist on non-Windows are a couple of plugins for Atom that allow for syntax highlighting (https://atom.io/packages/language-avisynth) and autocompletion (https://atom.io/packages/autocomplete-avisynth), but it only covers up to 2.6 (which still outclasses what AvxSynth was capable of).

pinterf
8th January 2021, 12:44
RemoveDirt (C-only supported as well)
https://github.com/pinterf/RemoveDirt

pinterf
31st January 2021, 20:58
MedianBlur2 (C-only supported as well)
https://github.com/pinterf/MedianBlur2

pinterf
16th February 2021, 17:46
assrender (untested)
https://github.com/pinterf/assrender

pinterf
23rd February 2021, 09:12
TComb. With non-Intel option as well. As usual, see README.md for build instructions.
https://github.com/pinterf/TComb/

pinterf
25th February 2021, 13:29
RemoveGrainHD. No intel asm inside. See README.md for build instructions.
https://github.com/pinterf/RemoveGrainHD/

pinterf
12th March 2021, 19:44
Convolution3D
https://github.com/pinterf/Convolution3D
also for non-intel

pinterf
24th March 2021, 17:30
fft3dfilter
https://github.com/pinterf/fft3dfilter
intel only at the moment

pinterf
12th April 2021, 07:04
TNLMeans. C only, no intel assember inside.
https://github.com/pinterf/TNLMeans

pinterf
8th October 2021, 11:49
Average. Non-Intel as well
https://github.com/pinterf/Average/releases/tag/0.95

pinterf
4th March 2022, 14:09
Median (AjkMedian)
https://github.com/pinterf/AjkMedian
No Intel inside

FranceBB
6th March 2022, 10:05
Thanks Ferenc, as always. :)

qyot27
28th August 2024, 21:05
I needed to do a test using DeDup, so I went ahead and added the requisite *nix stuff. Surprisingly, it doesn't seem to be hosted on Github already, so I reconstructed a history from the release .zips for the main branch and put all the new changes I had to make into a new 'additions' branch.

The ASM had to be disabled, but I'm not sure how much that matters in 2024, since it was MMX and ISSE; GCC and Clang can probably optimize way better for modern x86(-64) CPUs just by default, or at least when using tree vectorization (I'm not sure what the regular Windows DLL would get on this machine, but on Linux with GCC it was getting ~100fps for DupMC without optimization, up to a maximum of ~700-800fps *with* tree vectorization; the actual DeDup pass was getting several thousand fps, so yeah). It probably can be used just as effectively on other architectures, I just haven't tested it there yet.

StvG
29th August 2024, 09:29
I needed to do a test using DeDup, so I went ahead and added the requisite *nix stuff. Surprisingly, it doesn't seem to be hosted on Github already, so I reconstructed a history from the release .zips for the main branch and put all the new changes I had to make into a new 'additions' branch.

The ASM had to be disabled, but I'm not sure how much that matters in 2024, since it was MMX and ISSE; GCC and Clang can probably optimize way better for modern x86(-64) CPUs just by default, or at least when using tree vectorization (I'm not sure what the regular Windows DLL would get on this machine, but on Linux with GCC it was getting ~100fps for DupMC without optimization, up to a maximum of ~700-800fps *with* tree vectorization; the actual DeDup pass was getting several thousand fps, so yeah). It probably can be used just as effectively on other architectures, I just haven't tested it there yet.

For the sake of correctness this commit (https://github.com/qyot27/DeDup/commit/c66260ca53e853e21b8c71940f4f7b64a96c38bc) has wrong author. Source (http://avisynth.nl/index.php?title=AviSynth%2B_x64_plugins&diff=12249&oldid=12248).

qyot27
29th August 2024, 10:19
Ah, I wonder why that didn't seem to be listed anywhere else, but it explains the differences. Corrected.

pinterf
18th December 2024, 15:47
amDCT
https://github.com/pinterf/amDCT
With, or without Intel intrinsics, just like Avisynth.

Jamaika
18th December 2024, 16:27
How do you use it?
https://www.sendspace.com/file/252tv5
Avisynth function: LWLibavVideoSource [input_yuv420p.avi, 30000, 1001]
Avisynth function: amDCT [4, 31, 9, 8, 5, 1, 16, 6, 24, 7, 31, 64, 10, 205, 30]
Assertion failed: IsClip(), file interface.cpp, line 827
amDCT(quality=4, adapt=31, quant=9, matrix=8, shift=5, qtype=1, expand=16, sharpWPos=6, sharpWAmt=24, sharpTPos=7, sharpTAmt=31, darkStart=64, darkAmt=10, brightStart=205, brightAmt=30)

pinterf
18th December 2024, 16:59
How do you use it?
https://www.sendspace.com/file/252tv5
Avisynth function: LWLibavVideoSource [input_yuv420p.avi, 30000, 1001]
Avisynth function: amDCT [4, 31, 9, 8, 5, 1, 16, 6, 24, 7, 31, 64, 10, 205, 30]
Assertion failed: IsClip(), file interface.cpp, line 827
amDCT(quality=4, adapt=31, quant=9, matrix=8, shift=5, qtype=1, expand=16, sharpWPos=6, sharpWAmt=24, sharpTPos=7, sharpTAmt=31, darkStart=64, darkAmt=10, brightStart=205, brightAmt=30)
I suppose you got an exception which tells you the problem.

Jamaika
2nd January 2025, 12:55
New fix avisynth plus plugins
https://github.com/AviSynth/AviSynthPlus/commit/e3625c916f2cfe5c750a5aad770fb6e0a6d76dd0
https://github.com/HomeOfAviSynthPlusEvolution/L-SMASH-Works/commit/9a3b9e68350055759f0d8c98766e84a0c629252d
http://avisynth.nl/index.php/Waveform

I added what I could. The question has been around for years whether ffmpeg should be without add-ons?
Has AVS group video ceased to exist? No one is bragging.
https://limewire.com/?referrer=48k1433kko