Posts: 10.618
Threads: 57
Joined: May 2017
Quote:...to make the program multilingual and it's not so difficult.
Yes, it is. Translating the buttons is not, but translating all the descriptions and only the parts that are not parameters is.
I initially had code for it but:
a. only one guy tried to translate something and I never heard back from him
b. I later had to remove translation support since it broken the application on different Linux distribution and Mac OS.
I still have it on my todo, but it's something that will take tons of time to add support for it back in not the translation itself.
So may be if I have a lot of free time. (at least 3 weeks where I don't have to work or do other stuff)
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Posts: 10.618
Threads: 57
Joined: May 2017
18.02.2022, 23:25
(This post was last modified: 19.02.2022, 00:40 by Selur.)
Had a chance to look at the 5 sample:
-> mClean with SAD threshold 900 and SpotLess or RemoveDirt seems to work well for those clips.
No clue so far regarding the last clip. I understand why SpotLess&Co are all struggling with it. (sudden only one frame changes that motion estimation wise do not really fit)
-> I would recommend to ask over at videohelp.com whether someone has a got idea regarding spot/dot removing for that clip. (I think it should be possible using some mask since the spots are mainly white)
---
side question: did you do anything with that source beforehand? (source has a strange resolution and iit has some artifacts that look like a some frame interpolation and/or upscaling artifacts)
-> MCTemporalDenoise + Setting "very high" is probably what I would recommend for that source. (one could probably cleanup even more, but it would probably require some manual scripting and lots of testing)
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Posts: 30
Threads: 6
Joined: Feb 2022
Thanks, I'll experiment with these filters and settings.
At SpotLess & Co, this is not a one-time case, even when processing 1 video, I noticed this.
---
I didn't do upscaling from the source. Perhaps the one who posted it did something with it. Perhaps I was trying to remove the noise of the video itself, I don't remember exactly which of the videos I took as an example. In any case, the noises of dots, spots, scratches (black and white) were present both there and there. In any case, I did not do interpolation and upscaling.
Thanks a lot for the program, I found it quite by accident just on videohelp.com. When searching for analogues, Avisynth does not find it like that, I think it would be more widespread with different languages. Very multifunctional, maybe not quite easy to learn, but there are a lot of possibilities with filters, while having an interface and a preview. Avisynth has not worked for me on windows 10, and even in your program the tab is not active, but there are enough other filters.
Posts: 10.618
Threads: 57
Joined: May 2017
To use Avisynth instead of Vapoursynth: Change "Filter->Support" from 'Vapoursynth' to 'Avisynth'.
Additionally you might want to change "Config->Internals->Avisynth->Avisynth" type to "64bit".
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Posts: 30
Threads: 6
Joined: Feb 2022
Thanks, I figured it out. Are they not compatible with Vapoursynth filters for use together?
Posts: 10.618
Threads: 57
Joined: May 2017
Nope.
In theory one could use the Avisynth filters in Vapoursynth, but since I didn't have good experiences with it (became slow and/or unstable and it's Windows only, I didn't incorporate it in Hybrid).
+ there are very few filters in Avisynth which are not available in Vapoursynth.
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Posts: 30
Threads: 6
Joined: Feb 2022
I found some filter changes that prevent unwanted losses for SpotLess:
https://forum.doom9.org/showthread.php?p...ost1959545
Is there anything we can do about it? Further in the topic there are also some settings, maybe something is suitable for the filter?
Posts: 10.618
Threads: 57
Joined: May 2017
19.02.2022, 20:15
(This post was last modified: 20.02.2022, 13:29 by Selur.)
Quote:Is there anything we can do about it?
Okay, the baiscally try to Mask the content.
To use it in Hybrid with Avisynth one could write the whole stuff in a custom section.
So if you want to test it. - set "Filtering->Support" to "Avisynth"
- enable a "Filtering->Avisynth->Custom" and enter:
LoadPlugin("I:\Hybrid\64bit\Avisynth\AVISYN~1\mvtools2.dll")
LoadPlugin("I:\Hybrid\64bit\Avisynth\AVISYN~1\masktools2.dll")
LoadPlugin("I:\Hybrid\64bit\Avisynth\AVISYN~1\MedianBlur2.dll")
LoadPlugin("I:\Hybrid\64bit\Avisynth\AVISYN~1\RgTools.dll")
Import("I:\Hybrid\64bit\Avisynth\avisynthPlugins\SpotLess.avs")
/*
SpotTest(),
Purpose:
Spotless produces frame global changes [most pixels are changed], here we want to try alter only real spots where there is significant change in spotless Y [by YTh8]
and also that are near grey in source [by CTh8], these targeted pixels are then overlayed from Spotless result onto original src.
Src, Pre-Spotless source
Filtered, Spotless result
YTh8, threshold for Y in 8 bit range.
CTh8, threshold for Chroma in 8 bit range.
YNoiseTh8, ?????
Show, Show Masks.Mask is the final mask made from MaskY and MaskC
*/
Function SpotTest(clip Src,clip Filtered,int "YTh8",int "Cth8",int "YNoiseTh8",Bool "Show") { # 8 -> 16 bit YUV444 only
YTh8 = Min(Max(Default(YTh8,12),0),255)
CTh8 = Min(Max(Default(CTh8,12),0),255)
YNoiseTh8 = Min(Max(Default(YNoiseTh8,8),0),255)
Show = Default(Show,False)
try {bpc = Src.BitsPerComponent} catch(msg) {bpc=8}
try {Y444=Src.IsYV24||Src.Is444} catch(msg) {Y444=false}
Assert(Y444,"SpotTest: Must be YV24/YUV444")
YTh = BitLShift(YTh8,bpc-8).String
CTh = BitLShift(CTh8,bpc-8).String
YNoiseTh = BitLShift(YNoiseTh8,bpc-8).String
SY = Src.ExtractY
FY = Filtered.ExtractY
PSY = SY.SelectEvery(1,-1)
NSY = SY.SelectEvery(1, 1)
MaskN = Mt_Lutxyz(PSY,SY,NSY,"x "+ YNoiseTh + " - y <= y z "+ YNoiseTh + " + <= & z "+ YNoiseTh + " - y <= y x "+ YNoiseTh + " + <= & | 0 range_max ?")
# ( ((x-YNoiseTh <= y) & (y <= z+YNoiseTh)) | ((z-YNoiseTh <= y) & (y <= x+YNoiseTh)) ) ? 0 : 255 ## Infix @ 8 bit
# ((YPrv-YNoiseTh <= YCur <= YNxt+YNoiseTh) || (YNxt-YNoiseTh <= YCur <= YPrv+YNoiseTh)) ? 0 : 255
MaskY = Mt_Lutxy(SY,FY,"x y - abs " + YTh + " > range_max 0 ?") # "(abs(x-y) > YTh) ? 255 : 0"
MU = Mt_Lut(Src.ExtractU,"x range_half - abs") # "abs(x - 128)"
MV = Mt_Lut(Src.ExtractV,"x range_half - abs") # "abs(x - 128)"
MaskC = Mt_Lutxy(MU,MV,"x 2 ^ y 2 ^ + .5 ^ round " + CTh + " <= range_max 0 ?") # "(round(((x^2)+(y^2))^0.5) <= CTh) ? 255 : 0" # 2D chroma distance from grey (by Pythagoras)
MaskN = MaskN.mt_Expand
MaskY = MaskY.mt_Expand
MaskC = MaskC.mt_Expand
MaskAnd = MaskC.Mt_Logic(MaskY,"and")
MaskAnd = MaskAnd.Mt_Logic(MaskN,"and")
MaskSelect = MaskAnd.mt_Expand.Blur(1.0)
Overlay(Src,Filtered,Mask=MaskSelect,Opacity=1.0)
CGREY = MaskSelect.Mt_lut("range_half")
SEP=$FF0000
HBAR=Src.BlankClip(length=1,Height=4,color=SEP)
LFT=StackVertical(Src.Subtitle("Src"),HBAR,Filtered.Subtitle("Filt"),HBAR,Last.Subtitle("Result"))
MID=StackVertical(YtoUV(CGrey,CGrey,MaskN).Subtitle("MaskN"),HBAR,YtoUV(CGrey,CGrey,MaskY).Subtitle("MaskY {abs(SrcY-FiltY) > YTh}"),HBAR,YtoUV(CGrey,CGrey,MaskSelect).Subtitle("MaskSelect=MaskAnd.mt_Expand.Blur(1.0) {Blk=Src used : Wht=Filt used}"))
RGT=StackVertical(YtoUV(CGrey,CGrey,MaskC).Subtitle("MaskC {Src Chroma distance from Grey <= Cth8"),HBAR,YtoUV(CGrey,CGrey,MaskAnd).Subtitle("MaskAnd {MaskN & MaskC & MaskY}"),HBAR,YtoUV(CGrey,CGrey,CGrey))
VBAR=LFT.BlankClip(length=1,width=4,color=SEP)
STK = StackHorizontal(LFT,VBAR,MID,VBAR,RGT)
(Show) ? STK : Last
}
ConvertToYV24()
Src=Last
Filtered=SpotLess(RadT=1)
YTH8 = 8
CTH8 = 12
YNOISETH8 = 2
SHOW = False
SpotTest(Src,Filtered,YTH8,CTH8,YNOISETH8,SHOW)
Return Last.ConvertToRGB32
ConvertToRGB32()
# colorformat RGB32
(fixed #colorspace RGB32 -> # colorformat RGB32)
in it. Make sure to adjust the paths in the Import- and the LoadPlugin-lines.
If you set "SHOW = True" also add
# width 4320
# height 3240
and expext the whole thing to get terrible instable unless you disable multithreading (Filtering->Avisynth->Misc->Script->Miscellaneous->Disable MT)
Side note at least with these values it doesn't really remove much, but also doesn't wreak the image totally, still ad least some problems are still there.
-> unless someone spends time on porting this to Vapoursynth I will at least not add direct support for this.
If someone can show me that this actually can do more it might reconsider and even try to port this myself.
Cu Selur
Ps.: Note that the SpotLess version also notes: "NOT FOR cartoon/anime, live video only, sorry." So it's kind of to be expected that both the mask and the normal SpotLess have problems with your content.
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Posts: 10.618
Threads: 57
Joined: May 2017
Found 'KillerSpots' ( https://github.com/FranceBB/KillerSpots/...Spots.avsi) which is a RemoveDirt for Cartoon&Co.
Ported it to Vapoursynth and added it to my current dev version.
Send you a link via pm. You just need to adjust the 'limit' value to remove a bit more and not screw the image.
I think that in combination with MCTemporalDegrain in 'heavy high' should work fine to cleanup the source.
Did a quick test here and it looked fine to me.
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Posts: 30
Threads: 6
Joined: Feb 2022
20.02.2022, 11:09
Thank you very much for your help! I will try to test these plugins, because for some reason it does not render with the settings that I threw off. Only the preview runs, with the example that you described above. Hope this closes these issues. Thanks!
|