VideoHelp Forum
+ Reply to Thread
Results 1 to 8 of 8
Thread
  1. Member
    Join Date
    Sep 2012
    Location
    Australia
    Search Comp PM
    Rollbots.

    RestoreFPS(24.000/1.001, 0.0) works rather well on it, unfortunately someone must have invented a filter that prevents the blending from occurring on frames separated by a scene change...

    Should I bother asking or should I just stay silent and forever hold my peace?
    Quote Quote  
  2. There's no way to unblend without getting the blending at scene changes. You would have to go through and fix them all manually. I do.

    Actually, there is a way that Didee came up with years ago, but it often freezes other frames that aren't at real scene changes. If the setting is low enough not to create duplicates where you don't want them, it doesn't undo all the blending. Too high and you'll get clean scene changes (mostly) but a ton of duplicate frames elsewhere. It creates FreezeFrames on both sides of the scene change at all scene changes, whether blended or not. It needs RemoveDirt.dll and you apply it after the unblending. Experiment with dfactor numbers between 2.0 and 5.0:

    A=Last
    prev = A.selectevery(1,-1)
    next = A.selectevery(1,1)
    SCclean = A.SCSelect(next,prev,A,dfactor=2.0) # 2.0 ~ 5.0

    return(SCclean) # return(restore) for NO scenechange cleanup


    Do you have the same problem to the same degree when using a bobber followed by SRestore to unblend?
    Quote Quote  
  3. Member
    Join Date
    Sep 2012
    Location
    Australia
    Search Comp PM
    It's true progressive (and flagged/encoded as such), true 24p (ie. NO 12p etc. sections). I don't see how SRestore would help.

    Like scene-by-scene cropping, I wouldn't mind doing it manually, it's just it's a painful process and I haven't found a tool that would actually help make the process easier (ie intelligent scenecut seeking, "copy frame number" shortcut), rather than harder.
    Quote Quote  
  4. Sorry, I forgot RestoreFPS was meant for progressive and blended sources and not interlaced and field-blended sources. How about a sample then?

    I still think, though, you'll either need that script (I gave up on using it as it freezeframes both sides of the scene change, blended or not) or fix all the blends manually.
    Quote Quote  
  5. Member
    Join Date
    Sep 2012
    Location
    Australia
    Search Comp PM
    I tried cropping videos scene by scene but constructing scripts line by line while fighting VirtualDub for framenumbers wore me down.

    A nice GUI that would let me apply Avisynth filters on a hierarchical scene by scene basis would be nice. I don't know if one exist, but I'm pretty sure anyone capable of writing one either has better things to do or would want to get paid for it.

    Sample:
    Image Attached Files
    Quote Quote  
  6. You got that unblended except for scene changes? I'm impressed! I never could figure out how to make RestoreFPS work properly.

    I don't know if this will be of any help to you or not. I call it FreezeFrameMC. It serves two purposes; the first is to cut down on all the typing when using FreezeFrame, the second to lessen the 'stutter' when using FreezeFrame by interpolating a frame. jagabo and I are responsible for it and it uses Gavino's FixBadFrames as the interpolator.

    It needs MVTools2.dll, RemapFrames.dll, and this FreezeFramesMC.avs.

    #FreezeFrame(clip clip, int first-frame, int last-frame, int source-frame)

    ### This function FreezeFrames 2 or 3 frames either before or after a scene change
    ### Then one appropriate frame will be interpolated to get rid of the slight 'stutter'
    ### duplicate frames might create. The interpolater is Gavino's 'FixBadFRames' filter,
    ### included here. Required are MVTools2.dll, RemapFrames.dll, and the FreezeFrameMC.avs.
    ### Much thanks go out to jagabo at videohelp.com who pointed me in the right direction
    ### when I immediately got stuck (having never written a function before).



    function FixBadFrames(clip c, string frames) {
    # Replace each frame from a list of 'bad' frames by using MFlowInter to interpolate
    # between the nearest pair of 'good' frames
    c
    sup = MSuper()
    bv = MAnalyse(sup, isb=true, delta=2)
    fv = MAnalyse(sup, isb=false, delta=2)
    candidates = MFlowInter(sup, bv, fv, time=50.0, ml=100).DuplicateFrame(0)
    ReplaceFramesSimple(candidates, mappings=frames)
    }

    #Usage FixBadFrames("34 64 96")

    ###Freezes the two frames before a scene change and then interpolates the first of the two
    function FFB1(clip Source, int N)
    {
    FreezeFrame(Source, N-1,N,N-1)
    FixBadFrames(String(N-1))
    }

    ###Freezes the two frames after a scene change and then interpolates the second of the two
    function FFA1(clip Source, int N)
    {
    FreezeFrame(Source, N,N+1,N+1)
    FixBadFrames(String(N+1))
    }

    ###Freezes the three frames before a scene change and then interpolates the first of the three
    function FFB2(clip Source, int N)
    {
    FreezeFrame(Source, N-2,N,N-2)
    FixBadFrames(String(N-2))
    }

    ###Freezes the three frames after a scene change and then interpolates the third of the three
    function FFA2(clip Source, int N)
    {
    FreezeFrame(Source, N,N+2,N+2)
    FixBadFrames(String(N+2))
    }

    ###Freezes the four frames before a scene change and then interpolates the fourth of the four
    function FFB3(clip Source, int N)
    {
    FreezeFrame(Source, N-3,N,N-3)
    FixBadFrames(String(N-3))
    }

    ###Freezes the four frames after a scene change and then interpolates the fourth of the four
    function FFA3(clip Source, int N)
    {
    FreezeFrame(Source, N,N+3,N+3)
    FixBadFrames(String(N+3))
    }


    You use it like so:

    FFB1(364)

    This freezeframes frame number 364 which is just Before the scene change

    FFA1(364)

    This freezeframes frame number 364 which is just After the scene change.

    You'll probably use it just once for the blended frame before or after the scene change but you can also use it for up to three frames before and after the scene change (FFB1/FFA1/FFB2/FFA2/FFB3/FFA3).

    When doing my 'restoration' work I use template scripts and when planning on using FreezeFrameMC I have a whole bunch of:

    #FF()
    #FF()
    #FF()
    #FF()
    .
    .
    .


    in the script to make it easier. I uncomment them as I need them and fill in what's needed. After doing a few there's more copy and pasting going on with only the frame numbers needing to be added.
    Quote Quote  
  7. Member
    Join Date
    Sep 2012
    Location
    Australia
    Search Comp PM
    It helped that it worked at default settings.

    http://avisynth.nl/index.php/RestoreFPS

    I'm pretty sure the { Trim(0,-1).Loop(0,1000) } part of the help script isn't supposed to be there, but it turned out to be useless anyway. I wrote my own script to find the correct phase, but the best turned out to be the default anyway.

    It wasn't perfect, but other than scene changes it was a hell of a lot better than the way it is on the DVD. I have to take the effect of MPEG2 compression artefacts and whatever other filters they applied into consideration so I'm not expecting miracles.

    RestoreFPS does screw up several frames to either side of a scene change, it subtracts the interpolated frames from the original frames so if you screw up one interpolation it effects several to either side.

    I'll see what I can do.
    Quote Quote  
  8. There might be some macros in avspmod that might help e.g. import bookmarks from file (run your scenechange detection eg. scxvid) , import trims from bookmarks . At least in avspmod, you can quickly navigate by bookmarks and verify if the auto scenechange detection was correct (and fix if necessary) . There might be a way to do it with rfs ( the newer remapframes), IIRC there are some rfs macros
    Quote Quote  



Similar Threads

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