Quantcast Avisynth: Motion Adaptive Filtering Now Possible? - Page 15 - digitalFAQ.com Forums [Archives]
Go Back    digitalFAQ.com Forums [Archives] > Video Production Forums > Avisynth Scripting

Reply
 
LinkBack Thread Tools
  #281  
06-03-2003, 05:28 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
So far, so good
Reply With Quote
Someday, 12:01 PM
admin's Avatar
Site Staff / Ad Manager
 
Join Date: Dec 2002
Posts: 42
Thanks: ∞
Thanked 42 Times in 42 Posts
  #282  
06-03-2003, 07:33 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
I should have RTFM
I took a sample routine from AviSynth's manual, and added my scene change detection. Now it should be bullet proof But again, test it, test it, and test it again to be sure


Code:
## DLL Section ## 
# 
LoadPlugin("C:\Filters25\MPEG2Dec3.dll") 
LoadPlugin("C:\Filters25\STMedianFilter.dll") 
LoadPlugin("C:\Filters25\UnFilter.dll") 
# 
#
## Defined Variables and Constants ## 
# 
MaxTreshold = 1.58 
scd_trigger = 15 # Scene change trigger value. 
nf =  0 # Next frame. 
# 
#
## Main section and static filters ### 
# 
Mpeg2Source("Your_D2V_Source_Here") 
Limiter() 
UnFilter(50, 50) 
BicubicResize( Your_Resize_Values_Here ) 
STMedianFilter(8, 32, 0, 0 ) 
MergeChroma(blur(1.50)) 
# 
# 
## Dynamic Linear Adaptive filtering and Scene Change Detection ##
#
# (From AviSynth's Manual) - This will apply temporalsoften to very static # scenes, and apply a 
# _variable_ blur on moving scenes. Blur is now capped properly. We  
# also assign a variable - and this is why a line break is inserted:

ScriptClip("nf = YDifferenceToNext()"+chr(13)+ "nf > 2.5 ? Blur(fmin(nf/20,1.5)) : TemporalSoften(2,7,7,3,2)") 

#
# Scene change detection (kwag) - If a scene change is detected, we 
# double blur. This affects the scene before and the one after the 
# scene change, thus providing a softer transition for the encoder instead
# of a sharp "spike".
# If it's not a scene change, then we apply linear value from diff to next 
# frame, scaled to MergeLuma's range.

ScriptClip("nf > scd_trigger ? blur(MaxTreshold).blur(MaxTreshold) : MergeLuma(Blur(fmin(nf/20,1.5)))")

#
# 
# 
#LetterBox( Your_Values_Here ) # Depends on situation. Use MovieStacker! 
#AddBorders( Your_Values_Here ) # Depends on situation. Use MovieStacker! 
Limiter() 
#
#
### Function Calls #####
#
function fmin(float f1, float f2) {
  return (f1<f2) ? f1 : f2
}
# 
#
####
-kwag
Reply With Quote
  #283  
06-03-2003, 07:46 PM
DKruskie DKruskie is offline
Free Member
 
Join Date: May 2003
Location: Michigan
Posts: 147
Thanks: 0
Thanked 0 Times in 0 Posts
Kwag
This green bar shows up in tmpgenc in the video window along the right side with new script like I posted last night. I have never seen this before..I just tried it out again and I'm still getting the green bar


David
Reply With Quote
  #284  
06-03-2003, 07:51 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by DKruskie
Kwag
This green bar shows up in tmpgenc in the video window along the right side with new script like I posted last night. I have never seen this before..I just tried it out again and I'm still getting the green bar


David
I think you have some CODEC conflict with AviSynth 2.52. I haven't seen this problem, and apparently nobody else has experienced this problem
All my encodes are as clear as the samples I posted. Do you have installed the Nimo CODEC pack or something like that

-kwag
Reply With Quote
  #285  
06-03-2003, 07:54 PM
DKruskie DKruskie is offline
Free Member
 
Join Date: May 2003
Location: Michigan
Posts: 147
Thanks: 0
Thanked 0 Times in 0 Posts
I just tried your latest script and all is working great again ..I dont know what was going on, but I'm glad it's gone Nope no nimo.


David
Reply With Quote
  #286  
06-03-2003, 08:20 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by DKruskie
I just tried your latest script and all is working great again ..I dont know what was going on, but I'm glad it's gone Nope no nimo.


David
Weird behaviours

@All,
Change the line:
ScriptClip("nf > scd_trigger ? blur(MaxTreshold).blur(MaxTreshold) : MergeLuma(Blur(fmin(nf/20,1.5)))")

To read:
ScriptClip("nf > scd_trigger ? blur(MaxTreshold).blur(MaxTreshold) : Blur(0)")

That MergeLuma is screwing up!

-kwag
Reply With Quote
  #287  
06-03-2003, 10:04 PM
ovg64 ovg64 is offline
Free Member
 
Join Date: Jan 2003
Location: Puerto Rico
Posts: 423
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via MSN to ovg64
This Script works 4 me, But the last one you post, its a no no cause it blurs just about anything that move, and i mean BLUR at least thats what happen when i tried it twice.

Code:
## DLL Section ##
#
LoadPlugin("C:\Filters25\MPEG2Dec3.dll")
LoadPlugin("C:\Filters25\STMedianFilter.dll")
LoadPlugin("C:\Filters25\UnFilter.dll")
#
####

## Defined Variables and Constants ##
#
MaxTreshold = 1.58
scd_trigger = 15 # Scene change trigger value.
nf = 0 # Current frame.
lf = 0 # Last frame
val = 0 # Dynamic value applied to filters
#
####

## Main section and static filters ###
#
Mpeg2Source("Your_D2V_Source_Here")
Limiter()
UnFilter(50, 50)
BicubicResize( Your_Resize_Values_Here )
STMedianFilter(8, 32, 0, 0 )
TemporalSoften(2,7,7,3,2) # Experimental!
MergeChroma(blur(1.50))
#
####

## Dynamic Linear Adaptive filtering and Scene Change Detection ##
#
FrameEvaluate("lf = YDifferenceToNext()")
FrameEvaluate("nf = YDifferenceToNext()")
FrameEvaluate("val = (lf / 16) + 0.05")
ScriptClip("(abs(nf - lf) < scd_trigger) ? (val < MaxTreshold) ? \
mergeluma(blur(val)) : mergeluma(blur(MaxTreshold)) : \
( (sign(nf-lf)) != -1) && (val < MaxTreshold) ? mergeluma(blur(val)) : mergeluma(blur(MaxTreshold)).mergeluma(blur(MaxTre shold))")
#
####

#LetterBox( Your_Values_Here ) # Depends on situation. Use MovieStacker!
#AddBorders( Your_Values_Here ) # Depends on situation. Use MovieStacker!
Limiter()
#
####
Reply With Quote
  #288  
06-03-2003, 10:19 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
The excessive blur would be caused by this line:

ScriptClip("nf = YDifferenceToNext()"+chr(13)+ "nf > 2.5 ? Blur(fmin(nf/20,1.5)) : TemporalSoften(2,7,7,3,2)")

Increase the value 20 in: Blur(fmin(nf/20,1.5))
to something like: Blur(fmin(nf/35,1.5))

Now it should blurr less. Thanks for the info
I see that "blur" is heavier than the blur on the luma (mergeluma), so that default value of 20 that was on the script seems too low, and causes too high values for blur.

Tell me the result with 35

-kwag
Reply With Quote
  #289  
06-03-2003, 10:42 PM
ovg64 ovg64 is offline
Free Member
 
Join Date: Jan 2003
Location: Puerto Rico
Posts: 423
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via MSN to ovg64
No still the same as before way too much Blur this is my script you tell me if ok.

LoadPlugin("C:\Documents and Settings\Osvaldo\My Documents\Avi Synth 2.51\MPEG2Dec3.dll")
LoadPlugin("C:\Documents and Settings\Osvaldo\My Documents\Avi Synth 2.51\asharp.dll")
LoadPlugin("C:\Documents and Settings\Osvaldo\My Documents\Avi Synth 2.51\Deen.dll")
LoadPlugin("C:\Documents and Settings\Osvaldo\My Documents\Avi Synth 2.51\STmedianFilter.dll")

MaxTreshold = 1.58
scd_trigger = 15 # Scene change trigger value.
nf = 0 # Next frame.
Mpeg2Source("C:\Documents and Settings\Osvaldo\Desktop\DVD\THC.d2v")
Limiter()
asharp(2,2)
Tweak(bright=-25)
BicubicResize(480, 366, 0, 0.6, 6, 0, 708, 480)
deen("a2d",2,10,12)
TemporalSoften(2,7,7,3,2)
MergeChroma(blur(1.50))
MergeLuma(blur( 0.2))
ScriptClip("nf = YDifferenceToNext()"+chr(13)+ "nf > 2.5 ? Blur(fmin(nf/35,1.5)) : TemporalSoften(2,7,7,3,2)")
ScriptClip("nf > scd_trigger ? blur(MaxTreshold).blur(MaxTreshold) : Blur(0)")
AddBorders(0, 57, 0, 57)
LetterBox(0, 0, 16, 16)
function fmin(float f1, float f2) {
return (f1<f2) ? f1 : f2
}
Reply With Quote
  #290  
06-03-2003, 11:06 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Check your PM
Reply With Quote
  #291  
06-03-2003, 11:25 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
I got'cha now

Here's the problem with the adaptive filtering. The way the filters work'("ed" ) , was that for low moving tresholds, temporalsoften was applied, and then after a certain treshold (boundary), it would switch to another filter (Blur in this case).
And that's exactly where the problem was You can't switch filters in and out of an encode, because they're messing up the color space somehow
What I did is that now the filters switch, but I keep mergeluma ON with a very very low bleeding value (0.01).
This way, the filters is still on (when it's not supposed to), by generating a very low value, so there's no turn on/turn off "switching glitch", which is what was causing the "blinks" or "flashes" at sporadic points. I just finished a 10 minute encode, and with the previous script, there were CLEARLY visible blinking points. Not so now
Here's the updated script portion. Just change this section and paste it to the script I posted previously in this thread.:

Code:
## Dynamic Linear Adaptive filtering and Scene Change Detection ##
#
# This will apply temporalsoften to very static scenes, and apply a 
# _variable_ blur on moving scenes. Blur is now capped properly. We 
# also assign a variable - and this is why a line break is inserted:

ScriptClip("nf = YDifferenceToNext()"+chr(13)+ "nf > 2.5 ? mergeluma(Blur(fmin(nf/16,1.5))) : TemporalSoften(2,7,7,3,2).MergeLuma(Blur(0.01))") 

#
# Scene change detection (kwag) - If a scene change is detected, we 
# double blur. This affects the scene before and the one after the # 
# scene change, thus providing a softer transition for the encoder instead # of a sharp "spike".
# If it's not a scene change, then we apply linear value from diff to next 
# frame, scaled to MergeLuma's range.

ScriptClip("nf > scd_trigger ? MergeLuma(blur(MaxTreshold)).MergeLuma((blur(MaxTreshold)) : MergeLuma(blur(0.01))")

#
####
DAMN , I hope this is really the end of the nightmares

-kwag
Reply With Quote
  #292  
06-03-2003, 11:36 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Yesssss .
Another test encode where I had flashes. They're gone

@sh0dan,
Can someone make a note in the AviSynth manual, related to "switching" filters dynamically
If it's going to be done, like we're doing here, the mergeluma must be kept on, even in conditional fails (by generating a minimal value ) and avoiding the "overshoot/undershoot" (sort of) effect when the filters are turned on/off.

-kwag
Reply With Quote
  #293  
06-03-2003, 11:40 PM
DKruskie DKruskie is offline
Free Member
 
Join Date: May 2003
Location: Michigan
Posts: 147
Thanks: 0
Thanked 0 Times in 0 Posts
Is there a chance you could show a full script for this , I'm having problems editing my script.



David
Reply With Quote
  #294  
06-03-2003, 11:54 PM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by DKruskie
Is there a chance you could show a full script for this , I'm having problems editing my script.



David
Hi David,

Check the "Latest Script" here: http://www.kvcd.net/forum/viewtopic.php?t=3483
I just updated it

-kwag
Reply With Quote
  #295  
06-03-2003, 11:58 PM
DKruskie DKruskie is offline
Free Member
 
Join Date: May 2003
Location: Michigan
Posts: 147
Thanks: 0
Thanked 0 Times in 0 Posts
Thanks ..I'll go get it

David
Reply With Quote
  #296  
06-04-2003, 12:10 AM
DKruskie DKruskie is offline
Free Member
 
Join Date: May 2003
Location: Michigan
Posts: 147
Thanks: 0
Thanked 0 Times in 0 Posts
I see something at the top of the movie in tiny letters that says:
script error: there is no function named "fmin"
scripterror line 2..here is script from tok, Is there something wrong with mine? The movie did look great though.

## DLL Section ##
#
LoadPlugin("C:\Filters25\MPEG2Dec3.dll")
LoadPlugin("C:\Filters25\STMedianFilter.dll")
LoadPlugin("C:\Filters25\UnFilter.dll")
#
####

## Defined Variables and Constants ##
#
MaxTreshold = 1.58
scd_trigger = 15 # Scene change trigger value.
nf = 0 # Current frame.
lf = 0 # Last frame
val = 0 # Dynamic value applied to filters
#
####

## Main section and static filters ###
#
Mpeg2Source("C:\DVD\matrix.d2v")
Limiter()
UnFilter(50, 50)
BicubicResize( 352,240,0,0.6,8,0,704,480 )
STMedianFilter(8, 32, 0, 0 )
TemporalSoften(2,7,7,3,2) # Experimental!
MergeChroma(blur(1.50))
#
####

## Dynamic Linear Adaptive filtering and Scene Change Detection ##
#
FrameEvaluate("lf = YDifferenceToNext()")
FrameEvaluate("nf = YDifferenceToNext()")
FrameEvaluate("val = (lf / 16) + 0.2")
ScriptClip("nf = YDifferenceToNext()"+chr(13)+ "nf > 2.5 ? mergeluma(Blur(fmin(nf/16,1.5))) : TemporalSoften(2,7,7,3,2).MergeLuma(Blur(0.01))")
#
####

#LetterBox( 0,24,0,24) # Depends on situation. Use MovieStacker!
#AddBorders( 0,0,0,0 ) # Depends on situation. Use MovieStacker!
Limiter()
#
####
AssumeFPS(23.976)
LoadPlugin("C:\TOK\ToK_EXTRAS\Sampler\Sampler-2.5.dll")
oldfps = framerate
interval = round((FrameCount/24)/59.940)/10
nFrames = round(24)
SelectRangeEvery( (round(framecount/interval)),nFrames)


David
Reply With Quote
  #297  
06-04-2003, 12:15 AM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by DKruskie
I see something at the top of the movie in tiny letters that says:
script error: there is no function named "fmin"
sheit
Sorry, get the script again. I forgot to add that function. It's there now
Reply With Quote
  #298  
06-04-2003, 02:43 AM
BlueBeard BlueBeard is offline
Free Member
 
Join Date: Mar 2003
Location: Chesterfield, Michigan, USA
Posts: 14
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by kwag

We'll find a fix or a workaround in a few "centons"
That's alot better that a few "yaren"
Reply With Quote
  #299  
06-04-2003, 02:57 AM
sh0dan sh0dan is offline
Free Member
 
Join Date: Mar 2003
Posts: 89
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by kwag
@sh0dan,
Can someone make a note in the AviSynth manual, related to "switching" filters dynamically
If it's going to be done, like we're doing here, the mergeluma must be kept on, even in conditional fails (by generating a minimal value ) and avoiding the "overshoot/undershoot" (sort of) effect when the filters are turned on/off.

-kwag
I'm afraid I'm not quite following you there....
__________________
Regards, sh0dan // VoxPod
Reply With Quote
  #300  
06-04-2003, 04:00 AM
boeddha boeddha is offline
Free Member
 
Join Date: Mar 2003
Location: Netherlands
Posts: 30
Thanks: 0
Thanked 0 Times in 0 Posts
Yesterday I posted a message about colors being blue. But this had nothing to do whit the script. I was using an old version of divx.
Reply With Quote
Reply




Similar Threads
Thread Thread Starter Forum Replies Last Post
Avisynth: Dynamic Linear Adaptive Filtering and Scene Change Detection supermule Avisynth Scripting 3 09-15-2006 01:45 AM
Avisynth: Message from linear motion adaptive filtering? holgerschlegel Avisynth Scripting 7 08-27-2003 04:08 AM
Avisynth: Help with Linear Motion Adaptive Filtering pitoman Avisynth Scripting 2 08-05-2003 12:51 PM
Avisynth: Motion adaptive filtering good enough? bicho_visacoso Avisynth Scripting 6 06-15-2003 06:30 AM
Avisynth: AVS 2.5x Script, Motion Adaptive Filtering problems? Bchteam Avisynth Scripting 15 05-31-2003 12:38 PM




 
All times are GMT -5. The time now is 11:56 AM  —  vBulletin © Jelsoft Enterprises Ltd