VideoHelp Forum
+ Reply to Thread
Results 1 to 11 of 11
Thread
  1. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    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:
    • 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.
    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.
    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.
    Quote Quote  
  2. well something is definitely wrong if there is "absolutely no difference"

    start with posting your script
    Quote Quote  
  3. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    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
    Quote Quote  
  4. ok I took a quick look - did you change the value in this section?:

    dirt_strength=40 # set this lower for clean films.
    If you compare different scripts in multiple tabs (e.g. in avspmod) , changing the value definitely working


    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
    Quote Quote  
  5. Member Chef Goldblum's Avatar
    Join Date
    Feb 2012
    Location
    Planet Earth
    Search PM
    Any reason that you're scanning these films at SD resolutions instead of going with something like 720p?
    Quote Quote  
  6. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    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
    Quote Quote  
  7. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    Originally Posted by Chef Goldblum View Post
    Any reason that you're scanning these films at SD resolutions instead of going with something like 720p?
    I don't have an HD camera

    Not strictly true, I have an HD webcam, but get better results from a 960 * something-i-forget video camera module with a MUCH higher dynamic range.
    Quote Quote  
  8. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    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
    Quote Quote  
  9. Originally Posted by ThePhoenix
    I'm a bit stuck now. Can anyone suggest how I should go about debugging my problem, or things I should try?
    Originally Posted by poisondeathray View Post
    Start with posting your script
    Waiting on you.
    Quote Quote  
  10. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    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
    Quote Quote  
  11. Member
    Join Date
    Mar 2012
    Location
    England
    Search Comp PM
    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.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!