Log in

View Full Version : MP_Pipeline 0.18 - run parts of avisynth script in external processes [2014-04-06]


Pages : 1 2 3 4 5 6 [7]

tormento
7th April 2020, 13:09
Sure, those will work.
Did you notice this (https://forum.doom9.org/showthread.php?p=1905669#post1905669)release of AddGrain?

Stereodude
7th April 2020, 21:57
Did you notice this (https://forum.doom9.org/showthread.php?p=1905669#post1905669)release of AddGrain?
I guess I saw it, but didn't connect it to MCTD in my head. Have you tried using it with MCTD? It seems there is some discussion if the output is correct or not.

tormento
8th April 2020, 09:42
I guess I saw it, but didn't connect it to MCTD in my head. Have you tried using it with MCTD? It seems there is some discussion if the output is correct or not.



Not yet. I have a long restoration process that will finish in a day or two.

Stereodude
22nd April 2020, 18:16
MP_Pipeline doesn't work with L-SMASH-Works until the .lwi file has already been successfully created. MPP .18 and .20 both do it.

This fails:
LoadPlugin("C:\HDTV Tools\MP_Pipeline\x64\MP_Pipeline.dll")
SetMemoryMax(1)
MP_Pipeline("""

### platform: win64
LoadPlugin("C:\HDTV Tools\L-SMASH-Works\x64\LSMASHSource.dll")

LWLibavVideoSource("source.mkv")

### prefetch: 16, 8
### ###
""")

VD2 returns this:
https://i.imgur.com/ss03pra.png

It also fails to load from AVSmeter and x264. The .lwi file appears to only be partially created. It's smaller than when the source fully loads and the .lwi doesn't have a proper "footer" in it.

This works:
LoadPlugin("C:\HDTV Tools\L-SMASH-Works\x64\LSMASHSource.dll")

LWLibavVideoSource("source.mkv")

After using the version of the script without MPP and it returns video (the full .lwi is created) then the MP_Pipeline version of the script will work fine. Is there some sort of timeout internal to MPP that is getting tripped?

Stereodude
22nd April 2020, 23:36
Also, MPP .20 is incompatible with the old x64 build of DGMPGDec from 2010 (I'm not aware of a newer x64 build). You basically just get a green screen as the output if used in a MPP segment. It works with MPP .18. The x64 build works outside of MPP .20.


FWIW, the 32bit version of DGMPGDec works with MPP .20.

real.finder
23rd April 2020, 00:02
Also, MPP .20 is incompatible with the old x64 build of DGMPGDec from 2010 (I'm not aware of a newer x64 build). You basically just get a green screen as the output if used in a MPP segment. It works with MPP .18. The x64 build works outside of MPP .20.


FWIW, the 32bit version of DGMPGDec works with MPP .20.

https://kuroko.fushizen.eu/bin/

Stereodude
23rd April 2020, 03:45
https://kuroko.fushizen.eu/bin/
I can't read Japanese, but it's a stripped down version isn't it? The cpu2 argument is ignored / not used right?

pinterf
23rd April 2020, 05:44
MP_Pipeline doesn't work with L-SMASH-Works until the .lwi file has already been successfully created. MPP .18 and .20 both do it.

This fails:
LoadPlugin("C:\HDTV Tools\MP_Pipeline\x64\MP_Pipeline.dll")
SetMemoryMax(1)
MP_Pipeline("""

### platform: win64
LoadPlugin("C:\HDTV Tools\L-SMASH-Works\x64\LSMASHSource.dll")

LWLibavVideoSource("source.mkv")

### prefetch: 16, 8
### ###
""")

VD2 returns this:
[lot of progress inditator messages]

It also fails to load from AVSmeter and x264. The .lwi file appears to only be partially created. It's smaller than when the source fully loads and the .lwi doesn't have a proper "footer" in it.

This works:
LoadPlugin("C:\HDTV Tools\L-SMASH-Works\x64\LSMASHSource.dll")

LWLibavVideoSource("source.mkv")

After using the version of the script without MPP and it returns video (the full .lwi is created) then the MP_Pipeline version of the script will work fine. Is there some sort of timeout internal to MPP that is getting tripped?
Could you somehow disable those message flow that appears on stdout during indexing? Seems like those "creating lwi" messages somehow confuse the internal pipe logic which is using stdout as well.

real.finder
23rd April 2020, 07:15
I can't read Japanese, but it's a stripped down version isn't it? The cpu2 argument is ignored / not used right?

it seems https://i.imgur.com/njIyNGu.png

Stereodude
23rd April 2020, 13:26
Could you somehow disable those message flow that appears on stdout during indexing? Seems like those "creating lwi" messages somehow confuse the internal pipe logic which is using stdout as well.
It doesn't look like there is an argument that can suppress them.

pinterf
23rd April 2020, 15:04
It doesn't look like there is an argument that can suppress them.
I see. During an initial handshake the host process can detect a "SLAVE_OK" message sent over stdout. If no "SLAVE_OK" is received then it assumes that something bad happened and starts collecting data sent over the stdout pipe and waits until the internal buffer size (1024 bytes) is full (or timeout). Then it exits and is showing us the text which is intended to be an Error text, but it is only the indexing log. This 1024 bytes is that you posted from VD log screen.

FranceBB
31st October 2020, 21:55
I'm probably doing something wrong, but why this doesn't work?


MP_Pipeline("""
video1=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
### export clip: video1
### ###
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
### export clip: video2
### pass clip: video1
### ###

video1++video2
### ###
""")


https://i.imgur.com/epJffbV.png


nor does this:


MP_Pipeline("""
video1=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
### export clip: video1
### ###
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
### export clip: video1, video2
### ###

video1++video2
### ###
""")


https://i.imgur.com/epJffbV.png

nor does this


MP_Pipeline("""
FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
### ###
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
myvideo=last++video2
return myvideo
### ###
""")


https://i.imgur.com/Nz03xaB.png

while this clearly does:


FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
myvideo=last++video2
return myvideo

gispos
1st November 2020, 14:55
I think it's because you don't pass the variable 'last'.
That's how it works for me.

MP_Pipeline("""
### inherit start ###
SourceFile = String(ScriptDir()) + "IMG_2563.MOV_x64.avs.mkv"
SourceFile = Exist(SourceFile) ? SourceFile : "E:\Ablage\IMG_2563.MOV_x64.avs.mkv"
### inherit end ###
LWLibavVideoSource(SourceFile, cache=False)
### ###

v2=LWLibavVideoSource(SourceFile, cache=False)

### export clip: v2
### ###
v3=Tweak(v2, hue=0.0, sat=1.5, bright=0, cont=1.0, coring=True, sse=False, startHue=0, endHue=360, maxSat=150, minSat=0, interp=16)
last+v3

### ###
return last
""")


or

MP_Pipeline("""
### inherit start ###
SourceFile = String(ScriptDir()) + "IMG_2563.MOV_x64.avs.mkv"
SourceFile = Exist(SourceFile) ? SourceFile : "E:\Ablage\IMG_2563.MOV_x64.avs.mkv"
### inherit end ###
LWLibavVideoSource(SourceFile, cache=False)
### ###
video2=LWLibavVideoSource(SourceFile, cache=False)
last++video2
### ###
return last
""")

StainlessS
1st November 2020, 15:20
Think there were several posts about that requirement for "return last", fairly recently, maybe within last 6 months. [not sure which thread]

EDIT: Here:- https://forum.doom9.org/showthread.php?p=1914707#post1914707
See several posts ahead of it too.

FranceBB
1st November 2020, 17:20
Right... right...
I forgot about return last, but it didn't help as this failed:


MP_Pipeline("""
video1=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
### export clip: video1
### ###
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
### export clip: video1, video2
### ###

video1++video2++video3

return last

""")


So I tried with Gispos's method and indeed it worked:


MP_Pipeline("""
### inherit start ###
SourceFile = String(ScriptDir()) + "20190806_1220_001.MP4"
SourceFile = Exist(SourceFile) ? SourceFile : "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
### inherit end ###
FFVideoSource(SourceFile, cache=False)
### ###
video2=FFVideoSource(SourceFile, cache=False)
last++video2
### ###
return last
""")



but here is the thing, as I tried adding more and more SourceFile, it broke.
This code is still working:


MP_Pipeline("""
### inherit start ###
SourceFile = String(ScriptDir()) + "20190806_1220_001.MP4"
SourceFile = Exist(SourceFile) ? SourceFile : "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
SourceFile2 = String(ScriptDir()) + "20190806_1226_001.MP4"
SourceFile2 = Exist(SourceFile2) ? SourceFile2 : "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
SourceFile3 = String(ScriptDir()) + "20190807_2005_001.MP4"
SourceFile3 = Exist(SourceFile3) ? SourceFile3 : "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
### inherit end ###
FFVideoSource(SourceFile, cache=False)
### ###
video2=FFVideoSource(SourceFile2, cache=False)
last++video2
### ###
video3=FFVideoSource(SourceFile3, cache=False)
last++video3
### ###

return last
""")


but this one is not:


MP_Pipeline("""
### inherit start ###
SourceFile = String(ScriptDir()) + "20190806_1220_001.MP4"
SourceFile = Exist(SourceFile) ? SourceFile : "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
SourceFile2 = String(ScriptDir()) + "20190806_1226_001.MP4"
SourceFile2 = Exist(SourceFile2) ? SourceFile2 : "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
SourceFile3 = String(ScriptDir()) + "20190807_2005_001.MP4"
SourceFile3 = Exist(SourceFile3) ? SourceFile3 : "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
SourceFile4 = String(ScriptDir()) + "20190807_2011_001.MP4"
SourceFile4 = Exist(SourceFile4) ? SourceFile4 : "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
### inherit end ###
FFVideoSource(SourceFile, cache=False)
### ###
video2=FFVideoSource(SourceFile2, cache=False)
last++video2
### ###
video3=FFVideoSource(SourceFile3, cache=False)
last++video3
### ###
video4=FFVideoSource(SourceFile4, cache=False)
last++video4
### ###

return last
""")


however this one is:


MP_Pipeline("""
### inherit start ###
SourceFile = String(ScriptDir()) + "20190806_1220_001.MP4"
SourceFile = Exist(SourceFile) ? SourceFile : "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
SourceFile4 = String(ScriptDir()) + "20190807_2011_001.MP4"
SourceFile4 = Exist(SourceFile4) ? SourceFile4 : "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
### inherit end ###
FFVideoSource(SourceFile, cache=False)
### ###
### ###
video4=FFVideoSource(SourceFile4, cache=False)
last++video4
### ###

return last
""")


Why?

I also tried with:


MP_Pipeline("""
### inherit start ###
video1 = "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
v2=FFVideoSource(video2, cache=False)
last=last++v2
return last
### ###
v3=FFVideoSource(video3, cache=False)
last=last++v3

return last
""")


https://i.imgur.com/4zJsCTZ.png

same goes for this one:


MP_Pipeline("""
### inherit start ###
video1 = "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
mysource2=FFVideoSource(video2, cache=False)
last++mysource2
### ###
mysource3=FFVideoSource(video3, cache=False)
last++mysource3

return last
""")


https://i.imgur.com/4zJsCTZ.png

I know that the compiler is always right, but... what is it trying to tell me this time? :confused:

and... by the way, I'm not mad, files are there and are not corrupted and have been indexed correctly, so... why?

https://i.imgur.com/eRjtAza.png

StainlessS
1st November 2020, 17:49
Unhandled C++ execption is a dll error, not your fault.

No idea bout the rest of it, tis a mystery to me [mp_pipeline thingy].

pinterf
1st November 2020, 18:08
@FranceBB: which Avisynth version are you using?

gispos
1st November 2020, 18:34
MP_Pipeline("""
### inherit start ###
video1 = "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
mysource2=FFVideoSource(video2, cache=False)
last++mysource2
### ###
mysource3=FFVideoSource(video3, cache=False)
last++mysource3

### ###
return last
""")



It is not due to 'inherit start' and 'inherit end', this is just one method I like to use.

You make a mistake at the end of MP_Pipeline. Please compare.

MP_Pipeline("""
### inherit start ###
video1 = "E:\Ablage\IMG_2563.MOV_x64.avs.mkv"
### inherit end ###
LWLibavVideoSource(video1, cache=False)
### ###
mysource2=LWLibavVideoSource(video1, cache=False)
last++mysource2

### ###
mysource3=LWLibavVideoSource(video1, cache=False)
last++mysource3
### ### (note this line)
return last
""")


After the last ### ### the process is in the main thread and MP_Pipeline no longer has access to the clip variables.
And MP_Pipeline can only access what is written in 'inherit start'.
For me it usually looks like this.

### ###
audio=LWLibavAudioSource(SourceFile, cache=False)
audioDub(last, audio)
return last
""")


Edit: I added the missing one to your code. Try it.

FranceBB
1st November 2020, 20:29
After the last ### ### the process is in the main thread and MP_Pipeline no longer has access to the clip variables.
And MP_Pipeline can only access what is written in 'inherit
Edit: I added the missing one to your code. Try it.

Same.

This returns unhandled C++ exception:


MP_Pipeline("""
### inherit start ###
video1 = "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
mysource2=FFVideoSource(video2, cache=False)
last++mysource2
### ###
mysource3=FFVideoSource(video3, cache=False)
last++mysource3


return last
""")


Same goes for this:


MP_Pipeline("""
### inherit start ###
video1 = "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
mysource2=FFVideoSource(video2, cache=False)
last++mysource2
### ###
mysource3=FFVideoSource(video3, cache=False)
last++mysource3

### ###
return last
""")


So putting the ### ### at the end didn't really help and removing them didn't help either.

Unhandled C++ execption is a dll error, not your fault.

No idea bout the rest of it, tis a mystery to me [mp_pipeline thingy].

I see...

@FranceBB: which Avisynth version are you using?

Ah, Ferenc is here. :D
I'm running Avisynth+ 3.6.1 r3300 on x86 under Windows XP with PAE turned on and 32 GB of RAM.

Output from AVSMeter:

Operating system: Windows XP (x86) Service Pack 3.0 (Build 2600)

CPU: Intel(R) Xeon(R) CPU X5482 @ 3.20GHz / Xeon (Harpertown)
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1
4 physical cores / 4 logical cores
[Avisynth info]
VersionString: AviSynth+ 3.6.1 (r3300, 3.6, i386)
VersionNumber: 2.60
File / Product version: 3.6.1.0 / 3.6.1.0
Interface Version: 8
Multi-threading support: Yes
Avisynth.dll location: C:\WINDOWS\system32\avisynth.dll
Avisynth.dll time stamp: 2020-06-19, 20:44:24 (UTC)
PluginDir2_5 (HKLM, x86): C:\Programmi\AviSynth\plugins
PluginDir+ (HKLM, x86): C:\Programmi\AviSynth+\plugins+


So it's the last stable release.
The output of AVSMeter doesn't really show anything either:

https://i.imgur.com/Mhrvrif.png

gispos
1st November 2020, 21:06
Same.
So putting the ### ### at the end didn't really help and removing them didn't help either.

You're right, the ### ### doesn't do anything.
The filename comes from 'inherit' and the last clip variable (mysource3) is created in the main thread.

gispos
3rd November 2020, 23:35
Same.

This returns unhandled C++ exception:

Ah, Ferenc is here. :D
I'm running Avisynth+ 3.6.1 r3300 on x86 under Windows XP with PAE turned on and 32 GB of RAM.

Does that work for you now with MP_Pipeline?
If not then my posting was a bump ;)

FranceBB
4th November 2020, 08:05
Not really...
I'm still stuck... :(

EDIT: For the sake of avoid a potential Windows-related thing, I tried the very same script on Windows 10 x64 Enterprise with the very same version of MPP and AVS+; same result, unhandled C++ exception...
Let's see if great master Ferenc is gonna jump on this one and come to rescue...

pinterf
4th November 2020, 11:15
Not really...
I'm still stuck... :(

EDIT: For the sake of avoid a potential Windows-related thing, I tried the very same script on Windows 10 x64 Enterprise with the very same version of MPP and AVS+; same result, unhandled C++ exception...
Let's see if great master Ferenc is gonna jump on this one and come to rescue...
You know well if a problem is unexplainable than after hesitating a bit, sooner or later I can't resist and dig into the mistery. :)

So I have put some debugging into MP_Pipeline.
The error comes from parsing the inherit block (my new error message, much better than unknown exception).
"Error in regex library while copying 'inherit block':
regex_error(error_stack): There was insufficient memory to determine whether the regular expression could match the specified character sequence"

Parsing is done with the standard std::regex C++ library.

Pattern is
^\s*### inherit start ###\s*$(?:.|\s)*?^\s*### inherit end ###\s*$

Probably this pattern is too complex for the engine to analyze against the source. Right now I have not any clue about the workaround.

This is what I have found about the topic.
https://stackoverflow.com/questions/27331047/c-std-regex-crashes-in-msvc-during-long-multiline-match

edit: of course one can do it w/o involving the regex library, though this present method is more elegant (but fails)

gispos
4th November 2020, 18:18
Parsing is done with the standard std::regex C++ library.

Pattern is
^\s*### inherit start ###\s*$(?:.|\s)*?^\s*### inherit end ###\s*$

Probably this pattern is too complex for the engine to analyze against the source.

Could that have something to do with the fact that I get strange errors when I pass an Ansi String with 'Eval'.
I think I didn't have any problems with older Avisynth versions without 'Plus', but I can also be wrong.

pinterf
11th November 2020, 19:29
No, those long inherit sections are not affecting Eval. Nevertheless I have already fixed this error (release later, patience please)

gispos
13th November 2020, 22:58
No, those long inherit sections are not affecting Eval. Nevertheless I have already fixed this error (release later, patience please)
Too bad. :)
I am sure that I opened Avisynth scripts with 'Eval' back then. After an update to a newer version (I think it was one of the first MT versions at that time),
I could only open scripts with AviSource, depending on the content. The current Avisynth versions are at war with Ansi Strings. :(

Edit:
...Nevertheless I have already fixed this error (release later, patience please)
I don't know if I got it right. Have you already fixed something in this regard?

FranceBB
13th November 2020, 23:31
Just for the sake of testing, I tested the very same script with the new Avisynth Test 4 version and it still behaves the same.

By the way and totally unrelated, ConvertBits() no longer throws an error for 8-16 when the input = output bit depth correctly! :)

pinterf
14th November 2020, 07:21
Yes, fixed the crash by not using regex. It is not avisynth related. (On my machine at the moment, I have to cleanup the source before commiting it and release)

pinterf
16th November 2020, 09:29
New version, download v0.22 (https://github.com/pinterf/MP_Pipeline/releases/tag/0.22)
Fix crash when there were too many characters (over some hundred) in script between
inherit start and inherit end markers (regex library limitation)

FranceBB
16th November 2020, 18:24
Thanks! :D
Now I no longer have an unhandled C++ exception and I get an error message from all the scripts.


MP_Pipeline("""
video1=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
### export clip: video1
### ###
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
### export clip: video2
### pass clip: video1
### ###
video3=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2005_001.MP4")
### export clip: video3
### pass clip: video1, video2
### ###
video4=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2008_001.MP4")
### export clip: video4
### pass clip: video1, video2, video3
### ###
video5=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2010_001.MP4")
### export clip: video5
### pass clip: video1, video2, video3, video4
### ###
video6=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2011_001.MP4")
### export clip: video6
### pass clip: video1, video2, video3, video4, video5
### ###
video7=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2013_001.MP4")
### export clip: video7
### pass clip: video1, video2, video3, video4, video5, video6
### ###
video8=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1014_001.MP4")
### export clip: video8
### pass clip: video1, video2, video3, video4, video5, video6, video7
### ###
video9=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1015_001.MP4")
### export clip: video9
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8
### ###
video10=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1016_001.MP4")
### export clip: video10
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9
### ###
video11=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1531_002.MP4")
### export clip: video11
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10
### ###
video12=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1619_001.MP4")
### export clip: video12
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11
### ###
video13=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1620_001.MP4")
### export clip: video13
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12
### ###
video14=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1621_001.MP4")
### export clip: video14
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13
### ###
video15=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_1400_001.MP4")
### export clip: video15
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14
### ###
video16=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_1947_001.MP4")
### export clip: video16
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15
### ###
video17=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_1948_001.MP4")
### export clip: video17
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15, video16
### ###
video18=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_2006_001.MP4")
### export clip: video18
### pass clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15, video16, video17
### ###

video1++video2++video3++video4++video5++video6++video7++video8++video9++video10++video11++video12++video13++video14++video15++video16++video17++video18

return last

""")


https://i.imgur.com/stNMfcp.png


MP_Pipeline("""
video1=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1220_001.MP4")
### export clip: video1
### ###
video2=FFVideoSource("I:\temp\Raw Canon EOS R\20190806_1226_001.MP4")
### export clip: video1, video2
### ###
video3=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2005_001.MP4")
### export clip: video1, video2, video3
### ###
video4=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2008_001.MP4")
### export clip: video1, video2, video3, video4
### ###
video5=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2010_001.MP4")
### export clip: video1, video2, video3, video4, video5
### ###
video6=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2011_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6
### ###
video7=FFVideoSource("I:\temp\Raw Canon EOS R\20190807_2013_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7
### ###
video8=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1014_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8
### ###
video9=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1015_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9
### ###
video10=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1016_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10
### ###
video11=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1531_002.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11
### ###
video12=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1619_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12
### ###
video13=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1620_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13
### ###
video14=FFVideoSource("I:\temp\Raw Canon EOS R\20190808_1621_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14
### ###
video15=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_1400_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15
### ###
video16=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_1947_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15, video16
### ###
video17=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_1948_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15, video16, video17
### ###
video18=FFVideoSource("I:\temp\Raw Canon EOS R\20190812_2006_001.MP4")
### export clip: video1, video2, video3, video4, video5, video6, video7, video8, video9, video10, video11, video12, video13, video14, video15, video16, video17, video18
### ###

video1++video2++video3++video4++video5++video6++video7++video8++video9++video10++video11++video12++video13++video14++video15++video16++video17++video18

return last

""")


https://i.imgur.com/srfzOTO.png


MP_Pipeline("""
### inherit start ###
video1 = String(ScriptDir()) + "20190806_1220_001.MP4"
video1 = Exist(video1) ? video1 : "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = String(ScriptDir()) + "20190806_1226_001.MP4"
video2 = Exist(video2) ? video2 : "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = String(ScriptDir()) + "20190807_2005_001.MP4"
video3 = Exist(video3) ? video3 : "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = String(ScriptDir()) + "20190807_2008_001.MP4"
video4 = Exist(video4) ? video4 : "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = String(ScriptDir()) + "20190807_2010_001.MP4"
video5 = Exist(video5) ? video5 : "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = String(ScriptDir()) + "20190807_2011_001.MP4"
video6 = Exist(video6) ? video6 : "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = String(ScriptDir()) + "20190807_2013_001.MP4"
video7 = Exist(video7) ? video7 : "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = String(ScriptDir()) + "20190808_1014_001.MP4"
video8 = Exist(video8) ? video8 : "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = String(ScriptDir()) + "20190808_1015_001.MP4"
video9 = Exist(video9) ? video9 : "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = String(ScriptDir()) + "20190808_1016_001.MP4"
video10 = Exist(video10) ? video10 : "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = String(ScriptDir()) + "20190808_1531_002.MP4"
video11 = Exist(video11) ? video11 : "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = String(ScriptDir()) + "20190808_1619_001.MP4"
video12 = Exist(video12) ? video12 : "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = String(ScriptDir()) + "20190808_1620_001.MP4"
video13 = Exist(video13) ? video13 : "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = String(ScriptDir()) + "20190808_1621_001.MP4"
video14 = Exist(video14) ? video14 : "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = String(ScriptDir()) + "20190812_1400_001.MP4"
video15 = Exist(video15) ? video15 : "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = String(ScriptDir()) + "20190812_1947_001.MP4"
video16 = Exist(video16) ? video16 : "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = String(ScriptDir()) + "20190812_1948_001.MP4"
video17 = Exist(video17) ? video17 : "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = String(ScriptDir()) + "20190812_2006_001.MP4"
video18 = Exist(video18) ? video18 : "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
v2=FFVideoSource(video2, cache=False)
last=last++v2
return last
### ###
v3=FFVideoSource(video3, cache=False)
last=last++v3

return last
""")


https://i.imgur.com/iYTn8lT.png


Perhaps these messages will make something pop in your mind, 'cause as things stands, I'm glad that I don't get "unhandled C++ expression" anymore, but I still have no idea about what's wrong...

pinterf
16th November 2020, 19:43
Thanks! :D
Now I no longer have an unhandled C++ exception and I get an error message from all the scripts.

Thanks! v0.22 Removed until I check what had happened.
Edit: release re-enabled (w/o modification)

pinterf
16th November 2020, 20:23
Thanks! v0.22 Removed until I check what had happened.
Your new errors fortunately are not related to any new bugs.

Your first sample does not work because there must be at least one "last" in the first section. When I insert a dummy "BlankClip" there, it will work* (*: see later)

It even fails if I skelenonize it to a single video1:
MP_Pipeline("""
video1=FFVideoSource("V01.m2v")
### export clip: video1
### ###

video1

last

""")


But this one is O.K.

MP_Pipeline("""
BlankClip() ## providing a "last" clip variable
video1=FFVideoSource("V01.m2v")
### export clip: video1
### ###

video1

last

""")


*... until clip count reached 8.
Then we have another error message.
"MP_Pipeline: Unable to create slave process. Message: Script error: SharedMemoryServer: Each process can only export no more than 8 clips."

pinterf
16th November 2020, 20:35
The 3rd example is probably wrong as well.

I think you mustn't use "return last" there. MP_Pipeline inserts some "hidden" lines before and after the script blocks, when you put there a return last, this "epilog" will not be reached.

### inherit end ###
FFVideoSource(video1, cache=False)
### ###
v2=FFVideoSource(video2, cache=False)
last=last++v2
return last
### ###
v3=FFVideoSource(video3, cache=False)
last=last++v3

return last
""")

Works:
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
v2=FFVideoSource(video2, cache=False)
last=last++v2
### ###
v3=FFVideoSource(video3, cache=False)
last=last++v3

return last
""")

FranceBB
17th November 2020, 12:28
I tested again with your suggestion and this indeed works! :D


MP_Pipeline("""
### inherit start ###
video1 = String(ScriptDir()) + "20190806_1220_001.MP4"
video1 = Exist(video1) ? video1 : "I:\temp\Raw Canon EOS R\20190806_1220_001.MP4"
video2 = String(ScriptDir()) + "20190806_1226_001.MP4"
video2 = Exist(video2) ? video2 : "I:\temp\Raw Canon EOS R\20190806_1226_001.MP4"
video3 = String(ScriptDir()) + "20190807_2005_001.MP4"
video3 = Exist(video3) ? video3 : "I:\temp\Raw Canon EOS R\20190807_2005_001.MP4"
video4 = String(ScriptDir()) + "20190807_2008_001.MP4"
video4 = Exist(video4) ? video4 : "I:\temp\Raw Canon EOS R\20190807_2008_001.MP4"
video5 = String(ScriptDir()) + "20190807_2010_001.MP4"
video5 = Exist(video5) ? video5 : "I:\temp\Raw Canon EOS R\20190807_2010_001.MP4"
video6 = String(ScriptDir()) + "20190807_2011_001.MP4"
video6 = Exist(video6) ? video6 : "I:\temp\Raw Canon EOS R\20190807_2011_001.MP4"
video7 = String(ScriptDir()) + "20190807_2013_001.MP4"
video7 = Exist(video7) ? video7 : "I:\temp\Raw Canon EOS R\20190807_2013_001.MP4"
video8 = String(ScriptDir()) + "20190808_1014_001.MP4"
video8 = Exist(video8) ? video8 : "I:\temp\Raw Canon EOS R\20190808_1014_001.MP4"
video9 = String(ScriptDir()) + "20190808_1015_001.MP4"
video9 = Exist(video9) ? video9 : "I:\temp\Raw Canon EOS R\20190808_1015_001.MP4"
video10 = String(ScriptDir()) + "20190808_1016_001.MP4"
video10 = Exist(video10) ? video10 : "I:\temp\Raw Canon EOS R\20190808_1016_001.MP4"
video11 = String(ScriptDir()) + "20190808_1531_002.MP4"
video11 = Exist(video11) ? video11 : "I:\temp\Raw Canon EOS R\20190808_1531_002.MP4"
video12 = String(ScriptDir()) + "20190808_1619_001.MP4"
video12 = Exist(video12) ? video12 : "I:\temp\Raw Canon EOS R\20190808_1619_001.MP4"
video13 = String(ScriptDir()) + "20190808_1620_001.MP4"
video13 = Exist(video13) ? video13 : "I:\temp\Raw Canon EOS R\20190808_1620_001.MP4"
video14 = String(ScriptDir()) + "20190808_1621_001.MP4"
video14 = Exist(video14) ? video14 : "I:\temp\Raw Canon EOS R\20190808_1621_001.MP4"
video15 = String(ScriptDir()) + "20190812_1400_001.MP4"
video15 = Exist(video15) ? video15 : "I:\temp\Raw Canon EOS R\20190812_1400_001.MP4"
video16 = String(ScriptDir()) + "20190812_1947_001.MP4"
video16 = Exist(video16) ? video16 : "I:\temp\Raw Canon EOS R\20190812_1947_001.MP4"
video17 = String(ScriptDir()) + "20190812_1948_001.MP4"
video17 = Exist(video17) ? video17 : "I:\temp\Raw Canon EOS R\20190812_1948_001.MP4"
video18 = String(ScriptDir()) + "20190812_2006_001.MP4"
video18 = Exist(video18) ? video18 : "I:\temp\Raw Canon EOS R\20190812_2006_001.MP4"
### inherit end ###
FFVideoSource(video1, cache=False)
### ###
v2=FFVideoSource(video2, cache=False)
last=last++v2
### ###
v3=FFVideoSource(video3, cache=False)
last=last++v3
### ###
v4=FFVideoSource(video4, cache=False)
last=last++v4
### ###
v5=FFVideoSource(video5, cache=False)
last=last++v5
### ###
v6=FFVideoSource(video6, cache=False)
last=last++v6
### ###
v7=FFVideoSource(video7, cache=False)
last=last++v7
### ###
v8=FFVideoSource(video8, cache=False)
last=last++v8
### ###
v9=FFVideoSource(video9, cache=False)
last=last++v9
### ###
v10=FFVideoSource(video10, cache=False)
last=last++v10
### ###
v11=FFVideoSource(video11, cache=False)
last=last++v11
### ###
v12=FFVideoSource(video12, cache=False)
last=last++v12
### ###
v13=FFVideoSource(video13, cache=False)
last=last++v13
### ###
v14=FFVideoSource(video14, cache=False)
last=last++v14
### ###
v15=FFVideoSource(video15, cache=False)
last=last++v15
### ###
v16=FFVideoSource(video16, cache=False)
last=last++v16
### ###
v17=FFVideoSource(video17, cache=False)
last=last++v17
### ###
v18=FFVideoSource(video18, cache=False)
last=last++v18

return last
""")


Thank you!! ;)

Music Fan
6th June 2022, 17:34
Hi,

I didn't use Avisynth for 1 or 2 years and would like to re-install it. As I'm quite confused with 32/64 bit mixed plugins, I have some questions.
If I understand correctly, Avisynth+ 64 bit is not supposed to work with 32 bit plugins but it can be achieved with MP_Pipeline.
I use Windows 10 pro 64 and would like to install Avisynth+ 64 bit.

1) Is it enough to make work in a single script 32 and 64 bit plugins (thanks to MP_Pipeline) or Avisynth+ 32 bit has to be installed anyway to make work 32 bit plugins, even when used in a script using Avisynth+ 64 bit ?

2) Do I have to put only the 4 MP_Pipeline files of the x64 folder (dll, dll.slave.exe, ...) in Avisynth+ 64 bit's plugin folder to make the whole stuff work with 32 and 64 bit plugins ?

3) In which folder should I place the 32 bit plugins ?

Thanks ;)

mastrboy
2nd November 2022, 19:02
Is there a known bug with using Internal String functions with MP_Pipeline?

As soon as I include a Internal Avisynth function like "findstr" or "leftstr" I get a "Unable to create slave process" exception.

Example script not working:
MP_Pipeline("""
### inherit start ###

script_folder = LeftStr(ScriptDir(),StrLen(ScriptDir()) - 1)
filename_no_ext = ReplaceStr(scriptfile(),".avs",".mkv")
src_file = script_folder + "\" + filename_no_ext

### inherit end ###
LWLibavVideoSource(src_file)

### ###

# crop borders
crop(240,0,-240,0)

""")

If I just set the script_folder and filename_no_ext manually it works as expected, but defeats the idea of loading a source file based on the Avisynth script name...

gispos
2nd November 2022, 21:15
For ScriptDir() you have to use string(ScriptDir()), the other things I haven't tested yet.

flossy_cake
2nd March 2023, 20:05
Hello, is there any possibility of audio support?

I want to do audio compression to make audio louder without clipping ("soft clipping") but there are only 32-bit plugins for that.

I would have used Soxfilter 64-bit compander but it's broken & linear access only.

FranceBB
2nd March 2023, 21:27
Hello, is there any possibility of audio support?


+1 for audio support.

I asked for it long time ago (I guess last time I begged was probably 2015) but the original author was gone.
Heck, MPPipelins would have also been broken with newer Avisynth+ colorspaces if it wasn't for the always available and irreplaceable C++ & ASM Supreme Grandmaster Ferenc Pinter who picked it up and updated it to version 0.22.
I mean, honestly, pinterf has been picking up almost every project the community has left behind and single handedly updated everything to modern standard. If it wasn't for him I don't know where we would have been...


I would have used Soxfilter 64-bit compander but it's broken & linear access only.

Sox you said, uh?
Indeed the last Avisynth compatible version was 2.6.1 from 2016, however I guess we're gonna be in for a 2023 miracle after it being broken since 2017, 'cause Grandmaster Ferenc has picked up the "challenge":

https://forum.doom9.org/showthread.php?t=181351&page=115

JamesJohnston
20th August 2024, 22:01
I'm working on getting MP_Pipeline functional with a simple "hello world" type of pipeline. The process has been frustrating because this filter does not really give helpful error messages.

For example:


LoadPlugin("C:\VideoProject\Software\AviSynth-plugin\downloaded\MP_Pipeline_v0.23\x64\MP_Pipeline.dll")

MP_Pipeline("""
### platform: win64
### dll: C:\VideoProject\Software\AviSynthPlus_3.7.3_20230715-filesonly\x64\Output\avisynth.dll

xxColorBars()

### ###
""")


will yield an error frame that reads this when I try to preview it in AvsPmod:


MP_Pipeline: Unable to create slave process. Message:
(New File (1), line 10)


If I change "xxColorBars" to "ColorBars" in the example, then it will work. Easy to spot here, but more complex scripts are more likely to have errors that are harder to spot - getting the exact error in the embedded script would be really helpful!

Any chance this plugin could show the actual errors from the embedded script?

My environment:


AvsPmod 2.7.7.8 64-bit
Avisynth+ 3.7.3_20230715 64-bit
MP_Pipeline release from https://github.com/pinterf/MP_Pipeline/releases/tag/0.23 --- 64-bit plugin
Windows 10 64-bit

spoRv
29th August 2024, 16:10
What I do is to create the script I'd like to use within MP_Pipeline, test it, and if there are no errors just put it inside the MP_Pipeline

OR

just comment MP_Pipeline and """) lines with a # in the front of them, to see actual error.