VideoHelp Forum




+ Reply to Thread
Results 1 to 7 of 7
  1. What would be the best way to bob deinterlace this DVD that has 8bit pixelated game footage mixed with live action footage? I've been using QTGMC with the setting below but the game footage loses a lot of it's crisp pixelation.

    HTML Code:
    QTGMC(TR0=2, TR1=2, TR2=1, Rep0=1, Rep1=0, Rep2=4, DCT=5, ThSCD1=300, ThSCD2=110, SourceMatch=3, Lossless=2, Sharpness=0.1, Sbb=0, MatchPreset="slow", NoiseProcess=2, GrainRestore=0.0, NoiseRestore=0.4, NoisePreset="slow", StabilizeNoise=false, NoiseTR=0, NoiseDeint="bob")
    Image Attached Files
    Quote Quote  
  2. Try is to lowering "ThSCD1=300, ThSCD2=110," to maybe ThSCD1=200 (or lower).
    (side note: I would also add some deflickering)

    1.: QTGMC(Input=clip, Preset="Fast", InputType=0, TFF=False, TR2=0, SourceMatch=0, Lossless=0, TR0=2, TR1=2, Rep0=1, Rep1=0, Rep2=4, DCT=5, ThSCD1=200, ThSCD2=120, Sbb=0, NoiseProcess=2, GrainRestore=0.0, NoiseDeint="bob") + deflickering
    2.: QTGMC(as 1.) but with EdiExt using DDD (Vapoursynth only https://github.com/pifroggi/vs_deepdeinterlace)

    Cu Selur

    Ps.: Maybe also try bwdif instead of QTGMC.
    PPs.: Applying CAS + SSIQ (for the rainbows) might also help with perceived 'crispyness' .
    Image Attached Files
    Last edited by Selur; 11th Aug 2025 at 08:26.
    users currently on my ignore list: deadrats, Stears555, marcorocchini
    Quote Quote  
  3. Originally Posted by Selur View Post
    Try is to lowering "ThSCD1=300, ThSCD2=110," to maybe ThSCD1=200 (or lower).
    (side note: I would also add some deflickering)

    1.: QTGMC(Input=clip, Preset="Fast", InputType=0, TFF=False, TR2=0, SourceMatch=0, Lossless=0, TR0=2, TR1=2, Rep0=1, Rep1=0, Rep2=4, DCT=5, ThSCD1=200, ThSCD2=120, Sbb=0, NoiseProcess=2, GrainRestore=0.0, NoiseDeint="bob") + deflickering
    2.: QTGMC(as 1.) but with EdiExt using DDD (Vapoursynth only https://github.com/pifroggi/vs_deepdeinterlace)

    Cu Selur

    Ps.: Maybe also try bwdif instead of QTGMC.
    PPs.: Applying CAS + SSIQ (for the rainbows) might also help with perceived 'crispyness' .
    The quality of DDD is amazing. I'm trying to set it up with VS. I'm only familiar with Avisynth. I'm having a difficult time finding information on DDD. Could you please let me know the VS script you used for test_2.mp4 so I can attempt to better understand the script and syntax?
    Last edited by LaserBones; 13th Aug 2025 at 04:52.
    Quote Quote  
  4. Using DDD requires an NVIDIA card and a broadly expanded Vapoursynth setup.
    I doubt you will have much fun/success trying to set this up, but I'll post a script later.
    users currently on my ignore list: deadrats, Stears555, marcorocchini
    Quote Quote  
  5. Originally Posted by Selur View Post
    Using DDD requires an NVIDIA card and a broadly expanded Vapoursynth setup.
    I doubt you will have much fun/success trying to set this up, but I'll post a script later.
    I appreciate it! I have a GTX3080. I'd like to attempt the challenge as the results are quite amazing. An additional question for when you can reply, are you using a pretrained model?
    Quote Quote  
  6. Here's the script I used with DDD:
    Code:
    # Imports
    import vapoursynth as vs
    # getting Vapoursynth core
    import ctypes
    import sys
    import os
    core = vs.core
    # Limit frame cache to 48473MB
    core.max_cache_size = 48473
    # Import scripts folder
    scriptPath = 'F:/Hybrid/64bit/vsscripts'
    sys.path.insert(0, os.path.abspath(scriptPath))
    # Loading Support Files
    Dllref = ctypes.windll.LoadLibrary("F:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
    # loading plugins
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/CTMF/CTMF.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libmvtools_sf_em64t.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/TCanny.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/FrameFilter/ReduceFlicker/ReduceFlicker.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/ZSmooth/zsmooth.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/NEO_FFT3DFilter/neo-fft3d.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/EEDI3m_opencl.dll")# vsQTGMC
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/NNEDI3CL.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DeinterlaceFilter/Bwdif/Bwdif.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/akarin.dll")
    core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SourceFilter/DGDecNV/DGDecodeNV_AVX2.dll")
    # Import scripts
    import degrain
    import vs_deepdeinterlace
    import qtgmc
    import validate
    # Source: 'C:\Users\Selur\Desktop\8bitliveaction.mkv'
    # Current color space: YUV420P8, bit depth: 8, resolution: 720x480, frame rate: 29.97fps, scanorder: bottom field first, yuv luminance scale: limited, matrix: 470bg, transfer: bt.601, primaries: bt.601 ntsc, format: mpeg-2
    # Loading C:\Users\Selur\Desktop\8bitliveaction.mkv using DGSource
    clip = core.dgdecodenv.DGSource("J:/tmp/mkv_eef611459e181df982d88854ac42200d_853323747.dgi",fieldop=0)# 29.97 fps, scanorder: bottom field first
    frame = clip.get_frame(0)
    # setting color matrix to 470bg.
    clip = core.std.SetFrameProps(clip, _Matrix=vs.MATRIX_BT470_BG)
    # setting color transfer (vs.TRANSFER_BT601), if it is not set.
    if validate.transferIsInvalid(clip):
      clip = core.std.SetFrameProps(clip=clip, _Transfer=vs.TRANSFER_BT601)
    # setting color primaries info (to vs.PRIMARIES_BT470_BG), if it is not set.
    if validate.primariesIsInvalid(clip):
      clip = core.std.SetFrameProps(clip=clip, _Primaries=vs.PRIMARIES_BT470_BG)
    # setting color range to TV (limited) range.
    clip = core.std.SetFrameProps(clip=clip, _ColorRange=vs.RANGE_LIMITED)
    # making sure frame rate is set to 29.97fps
    clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
    # making sure the detected scan type is set (detected: bottom field first)
    clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_BOTTOM) # bff
    # Deinterlacing using QTGMC
    
    clipEdiExt = clip
    # adjusting color space from YUV420P8 to RGBS for vsDDD
    clipEdiExt = core.resize.Bicubic(clip=clipEdiExt, format=vs.RGBS, matrix_in_s="470bg", range_s="limited")
    clipEdiExt = vs_deepdeinterlace.DDD(clip=clipEdiExt, tff=False, fp16=True, device="cuda")
    # Making sure content is preceived as frame based
    clipEdiExt = core.std.SetFrameProps(clip=clipEdiExt, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive
    # set frame rate to 59.94fps (progressive)
    clipEdiExt = core.std.AssumeFPS(clip=clipEdiExt, fpsnum=60000, fpsden=1001)
    clipEdiExt = core.resize.Bicubic(clip=clipEdiExt, format=vs.YUV420P8, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
    clip = qtgmc.QTGMC(Input=clip, Preset="Slower", InputType=0, TFF=False, TR2=1, SourceMatch=0, Lossless=0, opencl=True, EdiExt=clipEdiExt, TR0=2, TR1=2, Rep0=1, Rep1=0, Rep2=4, DCT=5, ThSCD1=200, ThSCD2=120, Sbb=0, NoiseProcess=2, GrainRestore=0.0, NoiseDeint="bob") # new fps: 59.94
    # Making sure content is preceived as frame based
    clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive
    # removing flickering using ReduceFlicker
    clip = core.rdfl.ReduceFlicker(clip=clip, strength=3, aggressive=1)
    # adjusting output color from: YUV420P8 to YUV420P10 for NVEncModel
    clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, range_s="limited")
    # set output frame rate to 59.94fps (progressive)
    clip = core.std.AssumeFPS(clip=clip, fpsnum=60000, fpsden=1001)
    # output
    clip.set_output()
    I use the default that comes with https://github.com/pifroggi/vs_deepdeinterlace through Hybrid (with torch addon).

    Cu Selur
    users currently on my ignore list: deadrats, Stears555, marcorocchini
    Quote Quote  



Similar Threads

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