Log in

View Full Version : Vapoursynth


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

Selur
19th December 2023, 23:00
Are there color constants that can be used with AddBorders?
'float[] color=<black>' seems to suggest they are, if there are, is there a list somewhere?

Myrsloik
20th December 2023, 09:16
Are there color constants that can be used with AddBorders?
'float[] color=<black>' seems to suggest they are, if there are, is there a list somewhere?

No, it's just a simpler way than trying to express black in all different formats and bitdepths.

I've chosen to directly pass through values in all functions unlike avisynth which usually takes 8 bit RGB values and converts.

Selur
20th December 2023, 09:17
Thanks for clearing that up. :)

Cu Selur

Adub
4th March 2024, 21:27
I had a few plugin development questions I wanted to pose to the community, and I figured I'd just post here instead of opening a new thread (although I'm happy to start one).

My questions:
1. When it comes to parameter handling based on bit-depth, what's the preferred behavior? For example, if a parameter normally ranges from 0-255 for 8-bit content, should plugins default to autoscaling parameters based on the input clip's bit depth, or should they not scale the parameter value and let the user handle it? A third option would be to make the scaling behavior configurable, with something like a boolean "scale_param" parameter that would let a user toggle autoscaling behavior if they want to be extra precise.
2. What open source licenses are preferred by this community? I see a broad mix with plugins, where some don't specify a license, some use MIT, and Vapoursynth itself uses LGPL (I believe). So I was wondering if there was a preferred standard license.
3. Are there any preferences for "skinny" vs "fat" plugins? In other words, creating a new plugin for every filter, or creating one plugin that houses a number of (at least semi-related) filters?

For reference, I'm experimenting with a new plugin that I'm writing in my free time, which currently consists of various smoothing/denoising related functions (things like averages, medians, etc). I'm kind of leaning towards making it "fat" by bundling a bunch of these filters into the same code base (think of having something like TemporalMedian, TemporalSoften2, and FluxSmooth all offered by the same code base).

Myrsloik
4th March 2024, 21:42
I had a few plugin development questions I wanted to pose to the community, and I figured I'd just post here instead of opening a new thread (although I'm happy to start one).

My questions:
1. When it comes to parameter handling based on bit-depth, what's the preferred behavior? For example, if a parameter normally ranges from 0-255 for 8-bit content, should plugins default to autoscaling parameters based on the input clip's bit depth, or should they not scale the parameter value and let the user handle it? A third option would be to make the scaling behavior configurable, with something like a boolean "scale_param" parameter that would let a user toggle autoscaling behavior if they want to be extra precise.
2. What open source licenses are preferred by this community? I see a broad mix with plugins, where some don't specify a license, some use MIT, and Vapoursynth itself uses LGPL (I believe). So I was wondering if there was a preferred standard license.
3. Are there any preferences for "skinny" vs "fat" plugins? In other words, creating a new plugin for every filter, or creating one plugin that houses a number of (at least semi-related) filters?

For reference, I'm experimenting with a new plugin that I'm writing in my free time, which currently consists of various smoothing/denoising related functions (things like averages, medians, etc). I'm kind of leaning towards making it "fat" by bundling a bunch of these filters into the same code base (think of having something like TemporalMedian, TemporalSoften2, and FluxSmooth all offered by the same code base).

1. Unscaled if there's actually some kind of direct relation to the pixel values.

2. MIT or GPL for plugins. If you use AGPL I will mock you for being special.

3. Not really.

efschu
6th March 2024, 15:36
Hello,

I'm modifying my jellyfin right now and replaced the ffmpeg binary with a script that calls vspipe together with ffmpeg. So I'm upscaling my content with realesr and interpolate it with RIFE in realtime on the server and watch the improved content on my clients.

This works fine for local files on server. But I also want to do this for live TV stream. But I did not figure out how to use a stream with vapoursynth. As I understood neither ffms2 nor l-smash nor bestsource support a stream as input.

Then I tried a workaround, to first save the stream in segments to disk, and then call vapoursynth script with a loop over all temporary stream files, but the loop didnt wait the files to finish one by one, instead the loop started to process all files at once (which resulted in out of gpu memory and forsure in not sequencial raw output frames) and crashed.

Sooo ladys and gents, do you have an idea how I could process live TV stream with vapoursynth? Or how I could process segmential files one by one with vapoursynth directly?

LigH
6th March 2024, 15:46
Hi.

I believe in your case, a custom build of ffmpeg or mpv with VPY filter support might be suitable, instead of frameserving.

efschu
7th March 2024, 12:10
Do you mean running it with ffmpeg -f vapoursynth - i script.vpy

But how would that help me with source dont have to be a "finished" file?

This is my script right now:
from vsrife import RIFE
from pathlib import Path
import vapoursynth as vs
import sys
import os

core = vs.core
core.num_threads = 14

core.std.LoadPlugin(path='/usr/lib/x86_64-linux-gnu/libffms2.so')
core.std.LoadPlugin(path="/mnt/hts/libs/libvstrt.so")

sys.path.append("/home/efeu/Downloads/VSGAN-tensorrt-docker/")
from src.rife_trt import rife_trt

clip = core.ffms2.Source(source='/tmp/tmpvideo', cache=False)

clip = core.resize.Bicubic(clip, width=640, height=480, format=vs.RGBS, matrix_in_s='709') # RGBS means fp32, RGBH means fp16

clip = core.trt.Model(clip, engine_path="/workspace/realesr-general-wdn-x4v3_opset16_640_480.engine", num_streams=4, device_id=0)

clip = core.resize.Bicubic(clip, width=1280, height=960, format=vs.RGBS, matrix_in_s='709') # RGBS means fp32, RGBH means fp16

clip = rife_trt(clip, multi = 2, scale = 1.0, device_id = 1, num_streams=4, engine_path="rife46_ensembleFalse_op18_clamp_1280x960_P40.engine")

clip = core.resize.Bicubic(clip, format=vs.YUV420P8, matrix_s='709')
clip.set_output()

Btw, do you have an idea why vspipe sometimes only runs on one core, then I abort command and try it again, then it runs fine over "all cores"? (it mostly only runs on one core)

https://private-user-images.githubusercontent.com/51944948/310850632-b796b5ee-121e-4809-a092-489a1d4bad0c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDk4MDk5MTgsIm5iZiI6MTcwOTgwOTYxOCwicGF0aCI6Ii81MTk0NDk0OC8zMTA4NTA2MzItYjc5NmI1ZWUtMTIxZS00ODA5LWEwOTItNDg5YTFkNGJhZDBjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzA3VDExMDY1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU4YzZlMWI3MjhhOTY5NWFlMGE3MTZmYTM1YTAwZjUzZmZmOGExZGUxYmViYzdhM2Y1YWE5ZDE0OWI2MmUzNGMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.VqtksnGAXUAEj5iS6lNNd-d1GVa4MPq5A5vYQ1WQpqM

https://private-user-images.githubusercontent.com/51944948/310850985-d90cbb46-3354-4ea5-90ba-9d5718607694.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDk4MDk5MTgsIm5iZiI6MTcwOTgwOTYxOCwicGF0aCI6Ii81MTk0NDk0OC8zMTA4NTA5ODUtZDkwY2JiNDYtMzM1NC00ZWE1LTkwYmEtOWQ1NzE4NjA3Njk0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzA3VDExMDY1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMxOTI2ODZhZjdiNzM5NDljOWIwYTA4M2UyNzMxNjgyODFhZWFjYjE3MmU3ZWViNWU4OTJhMjE2ZmQyZWU1MzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.DKGnVjGmzxnZkOA6LXZhHfvS7P2-Q9z_GEtCKg4AxCw

Myrsloik
8th March 2024, 23:03
R66 (https://github.com/vapoursynth/vapoursynth/releases/tag/R66) is finally out. REQUIRES PYTHON 3.12!

See this blog post for an easier to read summary (https://www.vapoursynth.com/2024/03/r66-r65-installation-scripts-and-many-small-improvements/).

Selur
9th March 2024, 09:00
Thanks!

Cu Selur
Ps.: Argh, there are no TensorRT Python bindings for 3.12 from the looks of it, so no R66 for me atm. (tensorrt-8.6.1-cp311-none-win_amd64.whl is the latest currently :()

PPs.: seems like R66 portable is broken: https://github.com/vapoursynth/vapoursynth/issues/1033 -> turns out the install instructions have changed und you need now to also install the right wheel file matching your Python version.

LigH
9th March 2024, 13:24
hydra3333 reported a few issues regarding the portability support and installation in M-AB-S (https://github.com/m-ab-s/media-autobuild_suite/issues/2583#issuecomment-1986585894), to be tested...

amayra
10th March 2024, 13:23
are you going to drop support for CPU without AVX2 like intel ivy bridge architecture (i have i7 3770)

i think there way to optimize VapourSynth for new CPU extensions when it detect without breaking support for old one right ?

LigH
10th March 2024, 13:33
AVX2 should not be a minimum requirement, but one of several optimization paths. VapourSynth, as a Python extension, could also run on non-intel CPUs, where a required SSE/AVX support would make no sense but comparable SIMD instruction sets are available instead...

Myrsloik
10th March 2024, 16:48
are you going to drop support for CPU without AVX2 like intel ivy bridge architecture (i have i7 3770)

i think there way to optimize VapourSynth for new CPU extensions when it detect without breaking support for old one right ?

Not planned. I do however think it's pointless to write optimized code paths for anything less than AVX2 for new code.

Things that definitely will be dropped at some point:

API3 compatibility - in a year or so, everything of value has been converted or will be soon
Windows 7 support - probably as a result of Python 3.8 becoming too old, not enough users actually testing it or MS relegating it to a separate compiler option with a long list of quirks much like windows XP support


Also a big part of the reason for requiring SSE2 was feature parity with x64 builds. Lots of instruction support checks that could be skipped and compiling with SSE2 instructions also produces a bit faster code.

amayra
10th March 2024, 19:27
i always hate it when developers forced minimum requirement by not optimized application instead they use compiler flags like ("-march=cpu-type", CFLAGS, CCFLAGS and CXXFLAGS )

i fully understand and agreed with dropping old OS that not even modern web browser support

any CPU that don't support SSE2 i don't think can do anything with VS or any other applications

Myrsloik
13th March 2024, 12:31
The portable install script and portable zip have now been sneakily updated to fix several annoying issues related to plugin and script paths. Windows 7 support also added, however you'll need to install powershell 5.0 or later to actually run it since the bundled version on win7 is ancient.

_Al_
13th March 2024, 19:59
issues related to plugin and script paths
Loading vapoursynth clip from any path to portable vapoursynth could be done via loading script text using importlib module, not using scripts path.
If python loading script utility is in portable directory (or as an app), current path is an utility directory (portable directory), so dlls are loaded from portable directory. VSPipeloads that script (from portable directory) ok.

Is it related to that?
But vapoursynth installed dll's are preferred if vapoursynth is installed, dll's from Program Files/VapourSynth or AppData/Roaming/VapourSynth directory (Selur brought it up couple of times).



import importlib
vs.clear_outputs()
spec = importlib.util.spec_from_loader('vs_script_text', loader=None)
my_script_module = importlib.util.module_from_spec(spec)
exec(script_text, my_script_module.__dict__)
clip = vs.get_output(index)[0]
#or: clip = my_script_module.clip

Selur
13th March 2024, 20:11
Selur brought it up couple of times
Yeah, still hoping that we will one day get a way to disable autoloading inside a script.

Selur
27th April 2024, 07:14
How can one validate the frame properties?
I want to check that '_Transfer', '_Matrix', 'Primaries', '_ColorRange', '_FieldBased' are set to valid values.
Are the enums of valid values for these properties accessible in a script, so I can compare against them?

Cu Selur

_Al_
28th April 2024, 23:31
besides manually provide dictionaries or lists (as in the other thread) , vapoursynths Enums could be used:
vs.MatrixCoefficients
vs.TransferCharacteristics
vs.ColorPrimaries
vs.ColorRange
vs.FieldBased

using MatrixCoefficients Enum for example getting names and values:
print(vs.MatrixCoefficients.__members__)
getting values only:
print(vs.MatrixCoefficients.__members__.values())

so for matrix, checking if value is valid might be:

clip = vs.core.std.BlankClip()
frame = clip.get_frame(0)
value = frame.props.get('_Matrix', None)
if value in [None, 2, 3] or value not in vs.MatrixCoefficients.__members__.values():
clip = clip.std.SetFrameProps(_Matrix=1) # defaulting
frame = clip.get_frame(0)
print(frame.props)

<vapoursynth.FrameProps {'_DurationNum': 1, '_DurationDen': 24, '_Matrix': 1}>
>>>

Selur
29th April 2024, 04:14
@_AI_: Thanks! That's what I was looking for. :)

Cu Selur

Selur
2nd May 2024, 15:31
Does anyone have an alternative TemporalDegrain2 for Vapoursynth?
(the one in G41Fun.py (https://github.com/Selur/VapoursynthScriptsInHybrid/blob/d6fe1c881046f2678f592129f02eb38f85a0c54b/G41Fun.py#L2143)) crashes with extraSharp=True and I can't figure out why)
Update:
=> fixed it; problem was in CTMF

Cu Selur

Adub
3rd May 2024, 19:17
There's also a version in VSDenoise: https://github.com/Jaded-Encoding-Thaumaturgy/vs-denoise/blob/master/vsdenoise/funcs.py#L193

Selur
3rd May 2024, 19:24
Nice! Thanks for the info! :)
(sadly: vs-denoise does not seem to work with Vapoursynth R65 portable, https://github.com/Jaded-Encoding-Thaumaturgy/vs-denoise/issues/121; works with R66)

Adub
3rd May 2024, 19:24
@Myrsloik - plugin development question for you

Is it possible for a plugin to deterministically calculate max memory usage in Vapoursynth? For example, if I have a plugin that I know is going to work on N number of frames (say 3, prev + current + next), then can I use some aspect of the VS API to calculate the upper bound of memory usage?

It might even as simple as saying a plugin needs to process N frames, where each frame requires Y amount of data per frame and multiply that by the Z cores returned from the VS API?

I ask, because I'm considering the potential of allocating all required memory in one fell swoop (say at plugin Create) and then passing that pointer in the plugin data to GetFrame, using that as a pool, and then freeing that memory in plugin Free. Basically, I'm trying to minimize as many calls to malloc as possible.

Myrsloik
3rd May 2024, 19:32
@Myrsloik - plugin development question for you

Is it possible for a plugin to deterministically calculate max memory usage in Vapoursynth? For example, if I have a plugin that I know is going to work on N number of frames (say 3, prev + current + next), then can I use some aspect of the VS API to calculate the upper bound of memory usage?

It might even as simple as saying a plugin needs to process N frames, where each frame requires Y amount of data per frame and multiply that by the Z cores returned from the VS API?

I ask, because I'm considering the potential of allocating all required memory in one fell swoop (say at plugin Create) and then passing that pointer in the plugin data to GetFrame, using that as a pool, and then freeing that memory in plugin Free. Basically, I'm trying to minimize as many calls to malloc as possible.

Technically the upper bound would be the number of threads times the buffer space you need. But usually you don't even get remotely close to that due to threads spending time in other places. If you do it, WHICH YOU ABSOLUTELY SHOULDN'T, you'd be better off simply making new allocations when your filter local pool doesn't have an available set of buffers.

What you should do:
For small allocations (up to a few kb) are handled very well by new/delete/malloc/free and the process heap is your pool.

For larger allocation (like frame sizes) you can simply create a new frame (gray format for single plane). The overhead is very low and it's fast. The memory is now in the frame buffer pool and can be shared between everything. Including other instances of your own plugin.

Work with the system, don't reimplement it.

Selur
4th May 2024, 15:09
@Mysrloik: I encountered that vsedits memory usage increases on each reload (when having biforst.dll in my scripts). Can you chime in whether this (https://github.com/YomikoR/VapourSynth-Editor/issues/55) is likely an issue of vedit, bifrost or Vapoursynth itself?
Thanks!

Myrsloik
4th May 2024, 18:51
R67 is out. A pure bugfix release that should make everyone snooze.

wubikens
13th May 2024, 15:52
Dumb question, but how do you load a clip? I'm trying to use BasicVSR++, and I followed the instructions here: https://github.com/HolyWu/vs-basicvsrpp?tab=readme-ov-file and got this running in a PyCharm project. All of the dependencies were correctly installed, but I'm having a hell of a time figuring out how to just load a clip with VapourSynth. I'm currently using R65 with Python 3.10. I see in the documentation that VapourSynth recommends using BestSource?

https://www.vapoursynth.com/doc/gettingstarted.html#example-script

It all starts with a .vpy script. Here’s a sample script to be inspired by, it assumes that BestSource is installed and auto-loaded.

from vapoursynth import core # Get an instance of the core
clip = core.bs.VideoSource(source='filename.mkv') # Load a video track in mkv file
clip = core.std.FlipHorizontal(clip) # Flip the video clip in the horizontal direction
clip.set_output() # Set the video clip to be accessible for output


But I can't seem to pip install it. If somebody could direct me at the very least to some instructions I could follow, I'd really appreciate it. Thanks!

Selur
19th May 2024, 16:29
@all:
R68 was released:
fixed portable base path detection, was broken in r67
fixed is_inspectable, was broken in r67
reverted widestring print changes in vspipe from r67
source: https://github.com/vapoursynth/vapoursynth/releases/tag/R68

------
@Myrsloik:
When using:
import vapoursynth as vs
core = vs.core
import site
clip = core.std.BlankClip()
clip = core.text.Text(clip, str(core))
audio = vs.core.std.BlankAudio()
clip = core.std.Trim(clip=clip, first=0, last=1)
clip.set_output(index=0)
audio.set_output(index=1)
and calling vspipe --info "path to script"
I only get just the video info.
R65 and R68 and both just return:
Width: 640
Height: 480
Frames: 2
FPS: 24/1 (24.000 fps)
Format Name: RGB24
Color Family: RGB
Alpha: No
Sample Type: Integer
Bits: 8
SubSampling W: 0
SubSampling H: 0
no mention of the audio.

I noticed, that when using:
clip.set_output(index=1)
audio.set_output(index=0)
(setting audio to be the first index)
or using:
VSPipe.exe --info "Path to script" -o 1
I get:
Samples: 441000
Sample Rate: 44100
Format Name: Audio16 (2 CH)
Sample Type: Integer
Bits: 16
Channels: 2
Layout: Front Left, Front Right

=>
Would be nice if VSPipes '--info' could be adjusted, when called without '-o X' to either:
a. output the first index and some additional info what other indexes exist
or
b. output the info for all indexes, like:

OutputIndex: 0
Width: 640
Height: 480
Frames: 2
FPS: 24/1 (24.000 fps)
Format Name: RGB24
Color Family: RGB
Alpha: No
Sample Type: Integer
Bits: 8
SubSampling W: 0
SubSampling H: 0

OutputIndex: 1
Samples: 441000
Sample Rate: 44100
Format Name: Audio16 (2 CH)
Sample Type: Integer
Bits: 16
Channels: 2
Layout: Front Left, Front Right


Thanks for thinking about this.

Cu Selur

Myrsloik
19th May 2024, 16:49
Makes sense but there are a few problems.
Some people parse the info output so changing it would break things.
There's also no actual api function to obtain the set output indices so that needs to be added as well.
Create an issue and I'll probably do it in a bit.

Selur
19th May 2024, 17:03
Some people parse the info output so changing it would break things.
I do :)

Create an issue and I'll probably do it in a bit.
will do, thanks!

NoX1911
7th June 2024, 22:46
List of all known plugins and scripts (http://www.vapoursynth.com/doc/pluginlist.html)
Link is dead. Any alternative script collections?

Selur
8th June 2024, 06:06
https://vsdb.top/ might be a good start (https://github.com/Selur/VapoursynthScriptsInHybrid has the scripts Hybrid uses)

Myrsloik
8th June 2024, 09:56
Link is dead. Any alternative script collections?

Fixed it so it points at vsdb.top, you can also simply use vsrepo.py available to get a fairly complete list.

NoX1911
8th June 2024, 10:10
Ok, just thought there would be another collection of turnkey-ready vpy files. Its functions then.

amayra
9th June 2024, 16:06
out of curiosity i tried to find a way to play VPY script in android phone but i don't find any results

is that even possible ?

LigH
10th June 2024, 07:49
VapourSynth is based on Python. Where Python runs, there is at least a chance.

I believe to remember that Selur's Hybrid works on several platforms (Windows and Linux at least) where OS independent operation is supported (Avisynth not so easily, but core and VapourSynth). Android may be a special Linux variant, yet it is distinct in several features, so porting Linux ready software may not be as trivial.

Selur
10th June 2024, 08:13
Can't really comment on Android, but especially on phones I see multiple problems:
a. what python version is installed (R68 only supports Python 3.8 and 3.12)
b. are all the libraries Vapoursynth uses are available on Android
c. are the plugins one wants to use be compiled for arm. (probably not)
d. does the mobile even have enough power to run this stuff.
=> I doubt running Vapoursynth (with some plugins) on ARM is feasible atm.

Myrsloik
10th June 2024, 08:19
Can't really comment on Android, but especially on phones I see multiple problems:
a. what python version is installed (R68 only supports Python 3.8 and 3.12)
b. are all the libraries Vapoursynth uses are available on Android
c. are the plugins one wants to use be compiled for arm. (probably not)
d. does the mobile even have enough power to run this stuff.
=> I doubt running Vapoursynth (with some plugins) on ARM is feasible atm.

To add to this:
a: Python 3.8 (possibly 3.6) or later is supported. It's only to keep down the number of configurations on windows I don't provide more.
b: Very few libraries are used so if you have python the answer is yes.
c: You always have to compile that for every platform. No worse than the average linux distro.
d: I talked to a guy a few years ago who made it work on ios. Don't think it was ever made public but you can definitely run simpler things. Keep in mind that modern phones are like super awesome gaming computers 10 years ago.

Selur
20th June 2024, 18:12
I want to delete line 0-4 keep 5-9, delete 10-14, keep 15-19,...
(using tons of Crop and StackVertical calls seems like a bad idea)
Something like SeparateFields, but not splitting even and odd lines, but packages of 5 ?
(no problem if not, just playing with some ideas,..)

Boulder
20th June 2024, 18:32
I want to delete line 0-4 keep 5-9, delete 10-14, keep 15-19,...
(using tons of Crop and StackVertical calls seems like a bad idea)
Something like SeparateFields, but not splitting even and odd lines, but packages of 5 ?
(no problem if not, just playing with some ideas,..)

I think you could use a Python for loop for that to keep it quite simple.

Myrsloik
20th June 2024, 20:17
I want to delete line 0-4 keep 5-9, delete 10-14, keep 15-19,...
(using tons of Crop and StackVertical calls seems like a bad idea)
Something like SeparateFields, but not splitting even and odd lines, but packages of 5 ?
(no problem if not, just playing with some ideas,..)

AddBorders to make the input a 2^n height
Call SeparateFields until every frame consists of only one field
StackVertical([SelectEvery(cycle=addborder_clip.height, offset=something), ...]) <= this bit you'll probably have to automatically generate somehow

Or jusr write a filter, that's so much easier.

Selur
20th July 2024, 06:36
Looking at https://forum.videohelp.com/threads/415197 I was wondering whether there is a HShear and VShear version for Vapoursynth?
I know I can use:
core.avs.LoadPlugin(r"F:\Hybrid\64bit\Avisynth\avisynthPlugins\Rotate_x64.dll")
clip = core.avs.HShear(clip, 63.45)
but I wondered if there is a native version I'm not aware of.

amayra
18th September 2024, 01:20
Looking at https://forum.videohelp.com/threads/415197 I was wondering whether there is a HShear and VShear version for Vapoursynth?
I know I can use:
core.avs.LoadPlugin(r"F:\Hybrid\64bit\Avisynth\avisynthPlugins\Rotate_x64.dll")
clip = core.avs.HShear(clip, 63.45)
but I wondered if there is a native version I'm not aware of.

are you looking for something like this :

http://avisynth.nl/users/vcmohan/vcm/rotate.html

Selur
18th September 2024, 04:26
@amayra: thanks, not totally sure :)

lewyturn
10th October 2024, 08:00
Seek help:
I installed 'vapoursynth 7.0' as a portable version, and there was a problem.
I added the path to 'vsscript.dll' to the 'vsedit' settings.
Opening the script with the 'vsedit 6.8' but still returns error: Failed to get VSScript API!

what should i do?

lewyturn
10th October 2024, 13:18
Seek help:
I installed 'vapoursynth 7.0' as a portable version, and there was a problem.
I added the path to 'vsscript.dll' to the 'vsedit' settings.
Opening the script with the 'vsedit 6.8' but still returns error: Failed to get VSScript API!

what should i do?


The reason was found: the 'vapoursynth.dll' file was missing from the compressed file.

asarian
11th November 2024, 14:15
Updated to R70 today. Suddenly VSpipe outputs all kinds of warning, like

Warning: Plugin C:\Program Files\VapourSynth\plugins\SubText.dll already loaded

Is there any way to suppress these warnings? I see nothing in its options. Thanks.

Myrsloik
11th November 2024, 16:24
Updated to R70 today. Suddenly VSpipe outputs all kinds of warning, like

Warning: Plugin C:\Program Files\VapourSynth\plugins\SubText.dll already loaded

Is there any way to suppress these warnings? I see nothing in its options. Thanks.

No, there's no way to silence them.