Hi all
I am new to this game, with much to learn, so I would be grateful is any responses to my queries are made in very simple terms J
I have been building a frame-by-frame capture telecine machine on and off for a couple of years and now have it working to my satisfaction. I have been aware of the Avisynth and the highly regarded scripts that various talented individuals have made available for download and have always planned to be using one of this to both clean up my footage and do frame rate conversion.
Here’s what I do:And herein lies my problem: the filters within this script all seem to be doing their stuff, with the exception of the one that I was really looking forward to seeing good results from, namely the RemoveDirt filter, which is invoked by RemoveDirtMC.avs This seems to have no effect at all.
- Capture my individual frames.
- Batch process them in Photoshop, colour adjust, rotate, contrast, noise and trim to 720 x 576
- Import into Sony Vegas to output as an avi at 16.667 fps - not educated myself well yet with an understanding of the various containers and codecs, but the file I create is Uncompressed and Progressive scan.
- I am then using a frame blending script by Freddie Van de Putee (forum.doom9.org/showthread.php?t=144271), of which there are some fine examples of what it can achieve on the net, within Virtualdubmod.
I can step through my footage frame by frame and see dust appear on a single frame and disappear on the next, so I don’t think it’s anything to do with any interlacing across multiple frames that has been introduced without my knowledge. Also, the script as downloaded has the cleaning parameter set to 20, (I think) with some narrative suggesting that this should be incremented for dirtier footage. No details of the magnitude to which this number can be extended, so I’ve tried numbers as large as 10,000, with absolutely no difference in output.
Does anyone know what I may be missing or can suggest what I could try?
Thanks in advance.
Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays! or rip iTunes movies!
+ Reply to Thread
Results 1 to 11 of 11
Thread
-
-
well something is definitely wrong if there is "absolutely no difference"
start with posting your script -
Thanks for the swift response poisondeathray
I am at work at the mo and the following link is a forbidden URL here. I am pretty sure it takes you to the script I am using. The last I tried was the blending option, but I am sure I have the same results (in terms of removedirt) from the interpolation script too. forum.doom9.org/showthread.php?t=144271
The only thing I would have changed is the line defineing the address and name of my avi.
Cheers -
ok I took a quick look - did you change the value in this section?:
dirt_strength=40 # set this lower for clean films.
Are you getting any error messages or just changing the value has no effect?
But maybe your problem is elsewhere?
Do you have duplicate frames? If so, removing dirt (or any related filters) won't work very well
You can also ask at doom9, videofred is around and made some recent posts -
Any reason that you're scanning these films at SD resolutions instead of going with something like 720p?
-
This is the value mentioned in my oroginal post that I have changed with numbers ranging from 20 - 10,000; no difference.
I have stepped through the footage frame-by-frame in Virtualdubmod and see no duplicate frames. Like I say, I can't get to the doom9 url from here (work), but I will mail them this evening if no one here as any other suggestions.
Cheers -
-
Well my plan to cross post onto the doom9 forum has failed, as even though I have registered, it seem one is not allowed to post until 5 days has elapsed.
I'm a bit stuck now. Can anyone suggest how I should go about debugging my problem, or things I should try?
Thank you -
-
The link to the online version of the script is earlier in the thread, but if it helps to see it here:
# film restoration script by videoFred.
# modified 30 august 2010
# version with frame blending
# added removedirtMC() as suggested by John Meyer
# cleaning, degraining, resizing, stabilizing, sharpening, auto-levels and auto-white balance.
#================================================= ============================================
film="D:\Pauls Files\Desktop\HomeMovie\NewCam\Processed\Untitled. avi" # source clip, please specify the full path here
#PARAMETERS
#----------------------------------------------------------------------------------------------------------------------------
result="resultS3" # specify the wanted output here
trim_begin=2 play_speed= 16.6666 #trim frames and play speed (PAL: 16.6666 or 18.75)
final_framerate = 25 # final frame rate
#COLOR AND LEVELS PARAMATERS
#----------------------------------------------------------------------------------------------------------------------------
saturation=1.4 #for all outputs
gamma= 1.0 # for all outputs
blue= -0 red= 0 #manual color adjustment, when returning result3 or result4. Values can be positive or negative
black_level=0 white_level=255 output_black=0 output_white=255 # manual levels, when returning result4
#SIZE, CROP AND BORDERS PARAMETERS
#----------------------------------------------------------------------------------------------------------------------------
CLeft=20 CTop=20 CRight=20 CBottom=20 #crop values after Depan and before final resizing
W=720 H=576 #final size after cropping
bord_left=0 bord_top=0 bord_right=0 bord_bot=0 #720p= borders 150
#STABILISING PARAMETERS
#----------------------------------------------------------------------------------------------------------------------------
maxstabH=20
maxstabV=20 #maximum values for the stabiliser (in pixels) 20 is a good start value
est_left=40 est_top=40 est_right=40 est_bottom=40 est_cont=1.4 #crop and contast values for special Estimate clip
#CLEANING PARAMETERS
#--------------------------------------------------------------------------------------------------------------
dirt_blur= 0.1 # some blur before cleaning to avoid pixel artifacts
dirt_strength=40 # set this lower for clean films.
#DENOISING PARAMETERS
#----------------------------------------------------------------------------------------------------------------------------
denoising_strength= 800 #denoising level of second denoiser: MVDegrainMulti()
denoising_frames= 4 #number of frames for averaging (forwards and backwards) 3 is a good start value
block_size= 16 #block size of MVDegrainMulti()
block_size_v= 16
block_over= 8 #block overlapping of MVDegrainMulti()
# FOUR STEP SHARPENING PARAMETERS
#--------------------------------------------------------------------------------------------------------------------------------
USM_sharp_ness1= 120 USM_radi_us1= 3 #first sharpening (UnsharpMask) after cleaning with removedirtMC()
USM_sharp_ness2= 80 USM_radi_us2=2 #second harpening (UnsharpMask) after cleaning with removedirtMC()
USM_sharp_ness3= 70 USM_radi_us3=1 #third sharpening (UnsharpMask) after degraining with MVDegrainMulti()
last_sharp= 0.4 #final sharpening step after interpolation
last_blur= 0.2 #this smooths out the heavy sharpening effects
#AUTO LEVELS PARAMETER
#--------------------------------------------------------------------------------------------------------------------------------
X=2 # X is a special parameter for reducing the autolevels effect on the whites
X2=2 # X2 is a special parameter for reducing the autolevels effect on the blacks
# END VARIABLES, BEGIN SCRIPT
#================================================= ================================================== ==============================
SetMemoryMax(800) #set this to 1/3 of the available memory
SetMTMode(5) #disable all MT calls if you are using a single core computer
LoadPlugin("Deflicker.dll")
Loadplugin("Depan.dll")
LoadPlugin("DepanEstimate.dll")
Loadplugin("removegrain.dll")
LoadPlugin("removedirt.dll")
LoadPlugin("MVTools.dll")
LoadPlugin("MVTools2.dll")
Loadplugin("mt_masktools.dll")
Loadplugin("warpsharp.dll")
LoadPlugin("MT.dll")
LoadPlugin("autolevels.dll")
Import("03_RemoveDirtMC.avs")
source1= AviSource(film).assumefps(play_speed).trim(trim_be gin,0).converttoYV12()
SetMTMode(1,0)
#STABILIZING/CROPPING
#................................................. .................................................. .......................................
stab_reference= source1.crop(est_left,est_top,-est_right,-est_bottom).tweak(cont=est_cont).MT_binarize(thres hold=80).greyscale().invert()
mdata=DePanEstimate(stab_reference,trust=1.0,dxmax =maxstabH,dymax=maxstabV)
stab=DePanStabilize(source1,data=mdata,cutoff=0.5, dxmax=maxstabH,dymax=maxstabV,method=0,mirror=15). deflicker()
stab2= stab.crop(CLeft,CTop,-CRight,-CBottom)
stab3=DePanStabilize(source1,data=mdata,cutoff=0.5 ,dxmax=maxstabH,dymax=maxstabV,method=0,info=true)
WS= width(stab)
HS= height(stab)
stab4= stab3.addborders(10,10,10,10,$B1B1B1).Lanczos4Resi ze(WS,HS)
stab5= Lanczos4Resize(stab2,W,H).sharpen(0.5)
#CLEANING/PRESHARPENING/RESIZING
#................................................. .................................................. ........................................
noise_baseclip= stab2.levels(0,gamma,255,0,255).tweak(sat=saturati on).blur(dirt_blur)
cleaned= RemoveDirtMC(noise_baseclip,dirt_strength).unsharp mask(USM_sharp_ness1,USM_radi_us1,0)\
.unsharpmask(USM_sharp_ness2,USM_radi_us2,0).Lancz os4Resize(W,H)
#DEGRAINING/SHARPENING
#................................................. .................................................. ..............................................
vectors= cleaned.MVAnalyseMulti(refframes=denoising_frames, pel=2, blksize=block_size, blksizev= block_size_v, overlap=block_over, idx=1)
denoised= cleaned.MVDegrainMulti(vectors, thSAD=denoising_strength, SadMode=1, idx=2).unsharpmask(USM_sharp_ness3,USM_radi_us3,0) \
.sharpen(last_sharp).sharpen(last_sharp)
#RESULT1: AUTOLEVELS,AUTOWHITE
#................................................. .................................................. ..............................................
result1= denoised.coloryuv(autowhite=true).addborders(X,0,0 ,0,$FFFFFF).addborders(0,0,X2,0,$000000).autolevel s().crop(X,0,-X2,-0)\
.converttoYUY2().ConvertFPS(final_framerate).blur( last_blur).converttoYV12().addborders(bord_left, bord_top, bord_right, bord_bot)
#RESULT2: MANUAL LEVELS, AUTOWHITE
#................................................. .................................................. ..............................................
result2= denoised.levels(black_level,1.0,white_level,0,255) .coloryuv(autowhite=true)\
.converttoYUY2().ConvertFPS(final_framerate).blur( last_blur).converttoYV12().addborders(bord_left, bord_top, bord_right, bord_bot)
#RESULT3: AUTOLEVELS, MANUAL COLOR CORRECTIONS
#................................................. .................................................. ..............................................
result3= denoised.coloryuv(off_U=blue,off_V=red).addborders (X,0,0,0,$FFFFFF).addborders(0,0,X2,0,$000000).aut olevels().crop(X,0,-X2,-0)\
.converttoYUY2().ConvertFPS(final_framerate).blur( last_blur).converttoYV12().addborders(bord_left, bord_top, bord_right, bord_bot)
#RESULT4: MANUAL LEVELS, MANUAL COLOR CORRECTIONS
#................................................. .................................................. ...............................................
result4= denoised.coloryuv(off_U=blue,off_V=red).levels(bla ck_level,1.0,white_level,0,255)\
.converttoYUY2().ConvertFPS(final_framerate).blur( last_blur).converttoYV12().addborders(bord_left, bord_top, bord_right, bord_bot)
#RESULT5: SPECIAL SERVICE CLIP FOR RESULT S5
#................................................. .................................................. ...............................................
result5= overlay(source1,stab_reference,x=est_left,y=est_to p).addborders(2,2,2,2,$FFFFFF).Lanczos4Resize(WS,H S)
#PARAMETERS FOR THE COMPARISONS
#................................................. .................................................. ...............................................
W2= W+bord_left+bord_right
H2= H+bord_top+bord_bot
source4=Lanczos4Resize(source1,W2,H2).changeFPS(fi nal_framerate)
#COMPARISONS: ORIGINAL VS RESULTS
#................................................. .................................................. .................................................. .................
resultS1= stackhorizontal(subtitle(source4,"original",size=2 8,align=2),subtitle(result1,"result1: autolevels, autowhite",size=28,align=2))
resultS2= stackhorizontal(subtitle(source4,"original",size=2 8,align=2),subtitle(result2,"resuls2: autowhite, manual levels correction",size=28,align=2))
resultS3= stackhorizontal(subtitle(source4,"original",size=2 8,align=2),subtitle(result3,"result3: autolevels, manual color correction",size=28,align=2))
resultS4= stackhorizontal(subtitle(source4,"original",size=2 8,align=2),subtitle(result4,"result4: manual colors and levels correction",size=28,align=2))
#SPECIAL COMPARISON CLIP FOR TESTING THE STABILIZER
#................................................. .................................................. .................................................. ....................
resultS5= stackhorizontal(subtitle(result5,"baseclip for stabiliser -only the B/W clip is used",size=32,align=2),subtitle(stab4,"test stabiliser: dx=horizontal, dy=vertical",size=32,align=5))
SetMTMode(5)
Eval(result)
AND:
#REMOVE DIRT FUNCTION
#................................................. .................................................. .................................................. .................
function RemoveDirt(clip input, int limit, bool _grey)
{
clensed=input.Clense(grey=_grey, cache=4)
alt=input.RemoveGrain(2)
return RestoreMotionBlocks(clensed,input,alternative=alt, pthreshold=6,cthreshold=8, gmthreshold=40,dist=3, dmode=2,debug=false,noise=limit,noisy=4, grey=_grey)
# Alternative settings
# return RestoreMotionBlocks(clensed,input,alternative=alt, pthreshold=4,cthreshold=6, gmthreshold=40,dist=1,dmode=2,debug=false,noise=li mit,noisy=12,grey=_grey,show=true)
# return RestoreMotionBlocks(clensed,input,alternative=alt, pthreshold=6,cthreshold=8, gmthreshold=40,dist=3,tolerance= 12,dmode=2,debug=false,noise=limit,noisy=12,grey=_ grey,show=false)
}
function RemoveDirtMC(clip,int limit, bool "_grey")
{
_grey=default(_grey, false)
limit = default(limit,6)
i=MSuper(clip,pel=2)
bvec = MAnalyse(i,isb=false, blksize=8, delta=1, truemotion=true)
fvec = MAnalyse(i,isb=true, blksize=8, delta=1, truemotion=true)
backw = MFlow(clip,i,bvec)
forw = MFlow(clip,i,fvec)
clp=interleave(backw,clip,forw)
clp=clp.RemoveDirt(limit,_grey)
clp=clp.SelectEvery(3,1)
return clp
}
Cheers -
Solved. It was my fault for having sharpened to footage before running it through the cleaning script. It seems the sharpened grain was confusing the logic.
The solution was actually figured out by RCBasher over at filmshooting.com
Thanks all.
Similar Threads
-
AviSynth and Filter Order
By sambat in forum EditingReplies: 3Last Post: 11th Jan 2012, 10:04 -
Lav filter and avisynth
By Creed in forum Newbie / General discussionsReplies: 7Last Post: 15th Dec 2011, 16:10 -
Scripts for RemoveDirt & Descratch
By Deter in forum RestorationReplies: 1Last Post: 9th Apr 2011, 09:10 -
Need Avisynth filter
By fubuki81 in forum RestorationReplies: 5Last Post: 30th Sep 2008, 13:04 -
Logoaway filter for AviSynth?
By DRP in forum Video ConversionReplies: 2Last Post: 8th Aug 2008, 04:30