VideoHelp Forum
+ Reply to Thread
Results 1 to 18 of 18
Thread
  1. Member
    Join Date
    Sep 2020
    Location
    Australia
    Search PM
    So I finally managed to get everything working with a Diamond VC500 for converting VHS tapes. The TBC I have is a Panasonic EH-55. The problem is nothing is clear. People's faces are not clear. On the bookshelf image, there are dots on the books themselves, rather than showing the books as actual books. On the bottom image the dots outline even the cups and tables. I've read about rasterization and interlacing, but it seems it's neither of those. I tried deinterlacing in VLC and it makes things even worse and more blurry. What is the issue I am seeing?
    Image
    [Attachment 75073 - Click to enlarge]

    Image
    [Attachment 75074 - Click to enlarge]

    Image
    [Attachment 75075 - Click to enlarge]

    Image
    [Attachment 75076 - Click to enlarge]
    Quote Quote  
  2. Captures & Restoration lollo's Avatar
    Join Date
    Jul 2018
    Location
    Italy
    Search Comp PM
    Post a sample of the video
    Quote Quote  
  3. Banned
    Join Date
    Nov 2022
    Search PM
    Your frame grabs are combed. As for the speckles, I've seen them on the footage from old 1980s camcorders in low light.
    Quote Quote  
  4. Member
    Join Date
    May 2005
    Location
    Australia-PAL Land
    Search Comp PM
    @Bigbadben, you can snip out a short sample (10 seconds) of your video using Virtual Dub in Direct Stream Copy mode (on the Video menu) and choose a short range using the buttons on the timeline, then export. We need it in the capture format (I assume one of the lossless AVIs).

    If you're not using VDub, install AVIDemux and open your file, then choose a short range by starting it with the A button, end it with the B button, then set the output format onto AVI Muxer and then save it.

    Then you can attach it here (500mb max size).

    Try to include a scene with some motion so we can observe the interlacing.
    Quote Quote  
  5. Member
    Join Date
    Sep 2020
    Location
    Australia
    Search PM
    Here is a video sample
    Image Attached Files
    Quote Quote  
  6. One field of the interlaced capture is ok, the other field is very noisy.
    Options to fix it are for example:
    a) Single rate deinterlacing based on the good field -> loosing temporal resolution
    b) Bob deinterlace and denoise
    c) Denoise the separated fields individually using different strenghts
    d) Keep the good field only and synthesize the bad field from the good field

    a) and b) are easy
    c) and d) are more difficult

    Example for a) attached:
    Image Attached Files
    Last edited by Sharc; 27th Nov 2023 at 02:44.
    Quote Quote  
  7. Member
    Join Date
    May 2005
    Location
    Australia-PAL Land
    Search Comp PM
    I'd be recapturing that.

    Sharc, we're never going to learn if you don't give us your code. It looks to me like you've also done some denoising.
    Quote Quote  
  8. Originally Posted by Alwyn View Post
    I'd be recapturing that.

    Sharc, we're never going to learn if you don't give us your code. It looks to me like you've also done some denoising.
    Important is to analyze the root cause of the problem and think about ways how to solve it. For interlaced stuff the first step should ALWAYS be field inspection. The code is secondary. In my example for case a) it was as simple as
    Code:
    AVISource("Sample Video.avi")
    BWDIF(field=1)    # ignoring field 2
    McDegrainSharp()  # or some other denoiser to taste here
    Quote Quote  
  9. Capturing Memories dellsam34's Avatar
    Join Date
    Jan 2016
    Location
    Member Since 2005, Re-joined in 2016
    Search PM
    The heads could use a little bit of clean but as far as the video quality, that's about what you can get from a consumer camcorder in indoor conditions back in that era, Use a slight denoise but don't go too crazy because it will wipe out any details left in those low light scenes.
    Quote Quote  
  10. don't go too crazy
    After reading that, I had to see what happens if I threw QTGMC+Codeformer+Spotless+MCTemporalDegrain(veryHi gh)+SCUNet at it.
    (script used: https://pastebin.com/19Fkk049, sample attached; not really usable since encoding speed is rather slow <2fps;~75%CPU, 20GB RAM, 75%GPU, 9GB VRAM on a Ryzen 9 9850x + Geforce RTX 4080)
    Also attached a conventional crazy version (script: https://pastebin.com/pexni3k3; no tweaking, 40fps; 99%CPU, 2GB RAM, 50%GPU, 4.5GB VRAM)
    => the conventional crazy is probably still usable, but I would agree with Alwyn, if recapturing is an option, it should be used.

    Cu Selur
    Image Attached Files
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  11. Captures & Restoration lollo's Avatar
    Join Date
    Jul 2018
    Location
    Italy
    Search Comp PM
    The fields can be checked with a simple script like this, loaded in VirtualDub:
    Code:
    FFmpegSource2("Sample Video.avi", atrack=-1)
    
    assumeTFF()
    
    separateFields()
    Click image for larger version

Name:	a.gif
Views:	70
Size:	2.50 MB
ID:	75100

    Once the problem has been identified, the solutions proposed by Sharc are pertinent, being the odd fields all bad.

    Frame 175 is bad also in even field:
    Click image for larger version

Name:	fields.png
Views:	64
Size:	1.77 MB
ID:	75101

    To OP, try to recapture this tape. Does this field problem only happen with this tape?
    Last edited by lollo; 28th Nov 2023 at 04:50.
    Quote Quote  
  12. Member
    Join Date
    May 2005
    Location
    Australia-PAL Land
    Search Comp PM
    You guys have missed my point. I don't see the point of fixed video without showing how you achieved it. Most of the posters here are newbys, looking for guidance on how to do/achieve things. Unless you show them the code being used, or the steps being taken to achieve something, they are left in bewilderment: "wow, that looks great, but how?".

    Celur's post is great; explains what they used and the code. I think my lights dimmed a bit when you ran that script, Celur.

    @Bigbadben, you can easily see the issue in Virtual Dub: apply the Deinterlace filter with "Double frame rate, top field first", then step through the video frame by frame.

    If you then choose "Keep Top" or "Keep Bottom" you'll remove the dodgy fields (but only get 25 frames/s, not as smooth as 50fps when you export).

    Also, could you post a short video snip of the bookcase? The experts might have some suggestions for that too.
    Quote Quote  
  13. Member
    Join Date
    May 2005
    Location
    Australia-PAL Land
    Search Comp PM
    Sharc, I tried your script but failed at MCDegrainsharp. Where'd you get it? It's not "mainstream" AVISynth. Did you make up your own DLL/AVSI from the code on Doom9?
    Quote Quote  
  14. There are some mods out there (for example: https://forum.doom9.org/showthread.php?p=1926403#post1926403)out there, but the McDegrainSharp I usually use is:
    Code:
    function McDegrainSharp(clip c, int "frames", float "bblur", float "csharp", bool "bsrch", int "thsad")
    { # Based on MCDegrain By Didee, http://forum.doom9.org/showthread.php?t=161594
      # Also based on DiDee observations in this thread: http://forum.doom9.org/showthread.php?t=161580 
      # "Denoise with MDegrainX, do slight sharpening where motionmatch is good, do slight blurring where motionmatch is bad"
      # In areas where MAnalyse cannot find good matches, the blur() will be dominant.
      # In areas where good matches are found, the sharpen()'ed pixels will overweight the blur()'ed pixels
      # when the pixel averaging is performed. 
    	frames = default(frames, 2)
    	bblur  = default(bblur, 0.6)
    	csharp = default(csharp, 0.6)
    	bsrch  = default(bsrch, true)
    	thsad  = default(thsad, 400)
    	bs = (c.width>960) ? 16 : 8
    	
    	c2 = c.blur(bblur)
    	super = bsrch ? c2.MSuper(pel=2, sharp=1) : c.MSuper(pel=2, sharp=1)
    	super_rend 	= c.sharpen(csharp).MSuper(pel=2, sharp=1,levels=1)
    	backward_vec3 = MAnalyse(super, isb = true, delta = 3, blksize=bs, overlap=bs/2)
    	backward_vec2 = MAnalyse(super, isb = true, delta = 2, blksize=bs, overlap=bs/2)
    	backward_vec1 = MAnalyse(super, isb = true, delta = 1, blksize=bs, overlap=bs/2)
    	forward_vec1 = MAnalyse(super, isb = false, delta = 1, blksize=bs, overlap=bs/2)
    	forward_vec2 = MAnalyse(super, isb = false, delta = 2, blksize=bs, overlap=bs/2)
    	forward_vec3 = MAnalyse(super, isb = false, delta = 3, blksize=bs, overlap=bs/2)	
    	(frames<=0) ? c :\
    	(frames==1) ? c2.MDegrain1(super_rend, backward_vec1,forward_vec1,thSAD=thsad) :\
    	(frames==2) ? c2.MDegrain2(super_rend, backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=thsad) :\
    		      c2.MDegrain3(super_rend, backward_vec1,forward_vec1,backward_vec2,forward_vec2,backward_vec3,forward_vec3,thSAD=thsad)
    	return(last)
    }
    which should work fine with just mvtools2 (https://github.com/pinterf/mvtools/releases) as dependency.

    Cu Selur
    users currently on my ignore list: deadrats, Stears555
    Quote Quote  
  15. Originally Posted by Alwyn View Post
    Sharc, I tried your script but failed at MCDegrainsharp. Where'd you get it? It's not "mainstream" AVISynth. Did you make up your own DLL/AVSI from the code on Doom9?
    I am using a copy of the last function which is included in the scipt found here over at doom9:
    https://forum.doom9.org/showpost.php?p=1926403&postcount=6

    Here the excerpt:
    Code:
    Function McDegrainSharp(clip c, int "frames", float "bblur", float "csharp", bool "bsrch",bool "Precise",Float "Limit",Float "LimitC",
        \ int "Pel",bool "Chroma", Int "BlkSz",Int "OLap",Int "Plane",bool "Tm",Bool "glob", Int "ThSAD",Int "ThSAD2") {
        Function __McDegrainSharp_bpc(clip c) {try {bpc=c.BitsPerComponent} catch(mes) {bpc=8} return bpc}
        myName = "McDegrainSharp: "
        frames = Default(frames, 2)
        bblur  = Default(bblur, (c.width>1920) ? 0.75 : (c.width>1280) ? 0.7 : (c.width>960 ) ? 0.65 : 0.6)
        csharp = Default(csharp, 0.6)
        bsrch  = Default(bsrch, true)
        Precise= Default(Precise,False)  # Use MRecalculate
        Limit  = Default(Limit,255)      # Max allowed Y change, Arg to MDegrainN. Default Limit/LimitC is 255 (int)
        LimitC = Default(LimitC,Limit)   # Max allowed U,V change
                 Limit =(c.__McDegrainSharp_bpc==8)?Limit.Int :Limit    # Force Limit/LimitC to type int if Colorspace is 8 bit
                 LimitC=(c.__McDegrainSharp_bpc==8)?LimitC.Int:LimitC
        pel    = Default(pel,2)
        chroma = Default(chroma,true)    # Use chroma in MAnalyse for vectors
        BlkSz  = Default(BlkSz,(c.width>1920) ? 32 : (c.width>1280) ? 24 : (c.width>960 ) ? 16 : 8)
        OLap   = Default(OLap,BlkSz/2)
        Plane  = Default(Plane,4)
        tm     = Default(tm,true)        # TrueMotion
        Glob   = Default(glob,Tm)        # Default Tm, Allow set MAnalyse(global) independently of TrueMotion.
        ThSAD  = Default(ThSAD,400)
        ThSAD2 = Default(ThSAD2,ThSAD)
        Assert(0.0 <= bblur <= 1.58, myName + "0.0 <= bblur <= 1.58")
        Assert(0.0 <= csharp <= 1.0, myName + "0.0 <= csharp <= 1.0")
        Assert(pel==1 || pel==2 || pel==4, myName + "pel==1 || pel==2 || pel==4")
        Assert(0 <= Plane <= 4, myName + "0 <= Plane <= 4")
        c2          = c.blur(bblur)
        super       = bsrch ? c2.MSuper(pel=pel, sharp=1) : c.MSuper(pel=pel, sharp=1)
        super_rend  = c.sharpen(csharp).MSuper(pel=pel, sharp=1,levels=1)   # Only 1 Level required for sharpened Super (not MAnalyse-ing)
        MultiVec    = super.MAnalyse(multi=true,delta=frames,blksize=BlkSz,overlap=OLap,chroma=Chroma,truemotion=Tm,global=Glob)
        # If Precise, then recalculate on Prefiltered (blurred) Super (NOT the sharpened render super)
        MultiVec = (Precise)
            \ ? super.MRecalculate(MultiVec,blksize=BlkSz/2,overlap=OLap/2,thSAD=100,chroma=chroma,truemotion=tm,global=Glob, tr=frames)
            \ : MultiVec
        (frames<=0)
            \ ? c
            \ : c2.MDegrainN(super_rend, MultiVec, Frames, thSAD=ThSAD, plane=Plane, Limit=Limit, LimitC=LimitC, thsad2=ThSAD2)
        return Last
    }
    Anyway, the denoising and the noise filter is not the essential part of the fix a). You can try any other. Main idea for the demo a) was to skip the damaged field using BWDIF(field=1).
    I have seen similar damaged fields before. The reason was a defect of the videocam. Maybe here it is just a bad capture. I don't know.

    Added:
    FWIW here the clip '25fps.mp4' of post#6 interpolated to 50fps in order to bring the motion fluidity back.
    (Discover the interpolation artifacts )
    Code:
    ffms2("25fps.mp4")  #clip of post#6
    RGB=z_ConvertFormat(pixel_type="RGBPS")   # RIFE wants RGB floating point
    RIFE=RGB.RIFE(gpu_thread=1, model=25, fps_num=50000, fps_den=1000, sc=true, sc_threshold=0.3)   # motion interpolation 25fps -> 50fps
    YV12=RIFE.z_ConvertFormat(pixel_type="YUV420P8")    # converting RGB back to YV12
    return YV12
    Instead of RIFE you may also try FrameRateConverter()
    Image Attached Files
    Last edited by Sharc; 28th Nov 2023 at 04:05.
    Quote Quote  
  16. It's me, bigbadben. Just chose a different username. I opened my VCR and cleaned the video and audio head with a microfiber cloth with 70% isopropyl alcohol on it, and video is worse now. There is more noise and colour seems to be lost. It's now stuttering and inserting frames in certain areas. I added the part on the end to show the stuttering. It seems I damaged my video head. Just to note the screenshots above are of different VHS tapes, not the same tape. The sample video and this sample video is of the same tape.
    Image Attached Files
    Quote Quote  
  17. Member
    Join Date
    May 2005
    Location
    Australia-PAL Land
    Search Comp PM
    When you say "head", there are multiple video heads. They're on the very bottom edge of the big spinning drum: tiny indentations you can hardly see. On those, never use any "clothy" type stuff. The current idea is to use plain printer paper soaked in 99% isopropyl alcohol (can get it at Bunnings).

    Can you post a pic of the things you cleaned? The techsperts might be able you some ideas re unclogging them.
    Quote Quote  
  18. @ferrari:
    No, your new sample 2 is not worse. You didn't damage anything. The new picture is slightly brighter (no worry though) and that's why you may spot the deficiencies easier. Actually you have less glitches in the new capture, but the basic problem is the same as before: 1 field is very noisy (spoiled). Maybe it is baked into the tape by the camera. As the VCR is outputting field by field by field ... it's unlikely that the alternating quality of the fields is caused by dirty heads of the VCR, in my opinion.
    The stutter at the end are dropped/repeated frames in order to keep audio and video in sync, possibly caused by temporary computer overload. Stop any other applications running in the background on the PC, even virusscanners. Don't touch the mouse etc. during capturing.
    Last edited by Sharc; 29th Nov 2023 at 03:59.
    Quote Quote  



Similar Threads

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