Hi there. I am attempting to restore these old DVDs of a UK Show but am running into some issues with my inexperience. I am attempting to only restore certain skits from this TV series that look like they were from a Film source rather than a true interlaced source since they don't look like they're interlaced when I play the file in AvsPmod, before any filters. From what I can tell there's a good amount of mosquito noise and ghosting going on in the segments I'm trying to extract. I tried to remove them with the following but the ghosting is still present.
The above gives the best result but I've also tried this as well which may be incorrect as it's not interlacedCode:mpeg2source("ULTIMATE_FAST_SHOW_COLLECTION_D2\VIDEO_TS\VTS_03_1.d2v", cpu=4, info=3) ConvertToYV12() TFM() LSFMod(Strength=75, Smode=5, Smethod=4, secure=True,preblur="FFT3Dfilter(sigma=4,plane=0)") GradFun3() LimitedSharpenFaster(ss_x=1.5, ss_y=1.5, dest_x=last.width, dest_y=last.height, Smode=4, strength=50, radius=2, Lmode=1, wide=false, overshoot=1, edgemode=0, special=true, exborder=0) ColorMatrix(mode="Rec.601->Rec.709") nnedi3_rpow2(rfactor=2,cshift="Spline36Resize",fwidth=1920,fheight=1536)
I saw that using QTGMC was recommended for its noise reduction which does give nice results but artifacts in some places whereas the first script gives a noisier but cleaner result.Code:mpeg2source("ULTIMATE_FAST_SHOW_COLLECTION_D2\VIDEO_TS\VTS_03_1.d2v", cpu=4, info=3) ConvertToYV12() QTGMC( Preset="Slower" ) SRestore(frate=25) LSFMod(Strength=75, Smode=5, Smethod=4, secure=True,preblur="FFT3Dfilter(sigma=4,plane=0)") GradFun3() LimitedSharpenFaster(ss_x=1.5, ss_y=1.5, dest_x=last.width, dest_y=last.height, Smode=4, strength=50, radius=2, Lmode=1, wide=false, overshoot=1, edgemode=0, special=true, exborder=0) ColorMatrix(mode="Rec.601->Rec.709") nnedi3_rpow2(rfactor=2,cshift="Spline36Resize",fwidth=1920,fheight=1536)
I've attached a sample below of a bit of the interlaced stuff (not for restoration, just there to show what's on the DVD, if useful) and then the next scene is what I'd like to clean up (film source?) which isn't interlaced as I can see.
What would you recommend for this scene? Does it need deinterlacing? I notice that the hair looks like it's being blended together when I run either filter above and that there's major ghosting on edges like the chair. Is it possible to make the edges sharp? I was able to get them to look much better with WarpSharp but that seems to make everything too cartoony (and isn't listed on the Avisynth External Filters page anymore). Also what would you recommend for the periodic white spots that appear throughout or the fuzzy edges with skewed washed out color? Is that odd that the edges are soft if it's a film source? I usually see that with VHS to DVD transfers, not film.
+ Reply to Thread
Results 1 to 15 of 15
Last edited by camjac251; 2nd Nov 2018 at 00:13.
I made a bit of progress with the restoration although I think I'm missing a step somewhere. I had a thread on Doom9 but since it's currently down, I'll copy it here.
This is the script I'm currently using
mpeg2source("ULTIMATE_FAST_SHOW_COLLECTION_D2\VIDEO_TS\VTS_03_1.d2v", cpu=0, info=3) ConvertToYV12(matrix="Rec601", interlaced=true) Deblock_QED(quant1=24, quant2=26, aOff1=1, aOff2=1, bOff1=2, bOff2=2, uv=3) QTGMC( Preset="Slow", FPSDivisor=2, TR2=3 ) TemporalDegrain2() FineDehalo(rx=2.0, ry=2.0, thmi=80, thma=128, thlimi=50, thlima=100, darkstr=1.0, brightstr=1.0, showmask=0, contra=0.0, excl=true) LimitedSharpenFaster(ss_x=1.6,ss_y=1.0,Smode=3,strength=100,soft=0,edgemode=2,wide=false) nnedi3_rpow2(rfactor=2, nsize=6, nns=4, cshift="Spline36Resize") GradFun3() ColorMatrix(mode="Rec.601->Rec.709") Trim(28261,30009)
If I try to use NoiseProcess=2 in my QTGMC settings, the footage will end up looking dark and washed out, like it's a different colorspace.
This is the script I'm using in this example below
mpeg2source("ULTIMATE_FAST_SHOW_COLLECTION_D2\VIDEO_TS\VTS_03_1.d2v", cpu=0, info=3) ConvertToYV12(matrix="Rec601", interlaced=true) QTGMC(Preset="Slower", FPSDivisor=2, ShowSettings=true) ColorMatrix(mode="Rec.601->Rec.709") Trim(28261,30009)
I've tried disabling the ColorMatrix filter, ConvertToYV12, tried RGB as well. I did a clean install of the filters required for QTGMC as well except redownloading QTGMC since it's not available with Doom9 being down right now.
Is there a step I'm missing that's causing this issue?
Last edited by camjac251; 5th Nov 2018 at 22:12.
It might be from using an older masktools2.dll or mvtools2.dll version . Try updating those
If you have something like mt_masktools-26.dll in the plugins directory , move that to another folder . The pinterf branch is "masktools2.dll"
Actually it's from a newer version of those plugins with avs x86 . avs x64 works ok . I just updated myself, and now I can replicate your "dark" problem with QTGMC NoiseProcess=2 , whereas before with slightly older .dll's it was ok . I'll try to figure out exactly which one locally, and eventually file a bug report
Which avisynth version are you using ?
It's not related to mvtools2 .
It looks like masktools2 2.2.14 is the last version for x86 that didn't exhibit the problem, at least for me. My avs x86 is "avisynth classic" , avs x64 is avs+mt
masktools2-v2.2.14 x86 => ok
masktools2-v2.2.16 x86 => dark
masktools2-v2.2.17 x86 => dark
masktools2-v2.2.18 x86 => dark
(For x86 I only tested the x86 versions, not the x86_xp versions)
Last edited by poisondeathray; 5th Nov 2018 at 23:04.
And did you try 2.2.14? did it "fix" the "dark" problem for you ?
I'm trying it now and get an error. Script error: mt_lut does not have a named argument "use_expr" SMDegrain.avsi line 737 QTGMC.avsi line 494.
It might be that I'm using the latest version of SMDegrain. I think that requires at least 2.2.15 of MaskTools with what it shows in the commented section of the script.
I might wait until doom9 comes back online since there may be a fix on the QTGMC thread already.
These are the ones that work ok for x64 for me . I don't know if there are newer ones.
It "feels" like some masktools2 bug or version incompatibility to me; since older x86 versions work with their matching older versions
https://pastebin.com/vm7S4PUS which is the latest QTGMC version.
I was on QTGMC 3.358 before updating. Using the latest versions of its dependencies as well and the color issue is now fixed. Also I think you may need masktools 2.2.17 or higher according to the readme at the top of the QTGMC script, older versions may not work.
I think I created something that looks as good as it can get.
I found out that the video isn't telecine'd or interlaced but just has some combing left over on a few frames and is sped up from 23.976 to 25fps. I'm using TemporalDegrain2 now which I like better than QTGMC's progressive input since it doesn't interpolate the motion which can cause an unnatural look.
This is what I'm currently using
video=mpeg2source("VTS_03_1.d2v", idct=5, iPP=false, cpu=0, info=3, i420=true) audio=FFAudioSource("VTS_03_1 T80 2_0ch 192Kbps DELAY 1000ms.ac3").DelayAudio(1).Normalize(0.98) AudioDub(video,audio) Trim(28261,30009) Unblock() assumefps(23.976, sync_audio=True) Crop(16,0,692,574) ConvertToYV12(matrix="Rec601", interlaced=false) ColorMatrix(mode="Rec.601->Rec.709") ConvertToYV12(matrix="Rec709", interlaced=false) vInverse() #ColorYUV(autogain=true,autowhite=true) autolevels() TemporalDegrain2(degrainTR=1,postFFT=3,postSigma=4) ConvertToRGB(matrix="Rec709", interlaced=false) #GamMac(LockChan=-2,GrnMul=.95,BluMul=.74,Show=false) # Not really sure it looks that good so its disabled atm ConvertToYV12(matrix="Rec709", interlaced=false) ContinuityFixer(top=2,bottom=1,left=1,right=2) # Does anything better exist? #Spline64Resize(764,574) # kept here just in case nnedi3_rpow2(fwidth=1528,cshift="Spline64ResizeMT", rfactor=2, nsize=4, nns=4, qual=1, etype=0, pscrn=2, threads=0, csresize=true, mpeg2=true, threads_rs=0, logicalCores_rs=true, MaxPhysCore_rs=true, SetAffinity_rs=false, opt=3) Sharpen(0.5) # Doesn't really add much
Here's a newer sample hosted on Mediafire this time and is longer as well http://www.mediafire.com/file/5iw9lnqg6b6cj07/VTS_03_1.demuxed.m2v
I think your TemporalDegrain2() settings are too strong. There's a lot of ghosting in moving areas. I'm not familiar with that filter so I used TemporalDegrain() with moderate settings instead.
I generally don't like using automatic levels adjustments. You can see that autolevels() is blowing out out brights in this scene. But I left it in.
In your PM you asked for help with sharpening and color correction...
For sharper upscaling you want to sharpen the image a bit before upscaling. And sharpening will exacerbate the existing VHS oversharpening halos so you want to remove those first. Halo removal can be very damaging so you may want reduce the settings a bit. The nnedi3_rpow2() I have didn't have some of the options in your script so I removed them. I don't know if those additional options help or not.
Color correction is difficult because there's no way to know exactly what this single scene should look like. It's intentionally very warm. Guessing that some of the highlights in the background are supposed to be white I decreased the gain on the red channel a bit, and increased the gain on the blue channel.
I think this looks a little better:
Mpeg2Source("VTS_03_1.demuxed.d2v", CPU2="ooooxx", Info=3) Unblock() assumefps(23.976, sync_audio=True) Crop(16,0,692,574) ColorMatrix(mode="Rec.601->Rec.709") vInverse() autolevels() FineDehalo(rx=3.0, ry=1.0, thmi=80, thma=128, thlimi=50, thlima=100, darkstr=1.0, brightstr=1.0, showmask=0, contra=0.0, excl=true) FineDehalo(rx=5.0, ry=1.0, thmi=80, thma=128, thlimi=50, thlima=100, darkstr=1.0, brightstr=1.0, showmask=0, contra=0.0, excl=true) TemporalDegrain(SAD1=200, SAD2=150, sigma=8) MergeChroma(aWarpSharp2(depth=5), aWarpSharp2(depth=15)) Sharpen(0.3, 0.0) ConvertToRGB(matrix="Rec709", interlaced=false) RGBAdjust(r=0.99, b=1.10) ConvertToYV12(matrix="Rec709", interlaced=false) nnedi3_rpow2(fwidth=1528,cshift="Spline64Resize", rfactor=2, nsize=4, nns=4, qual=1, etype=0, pscrn=2, threads=0, opt=2) aWarpSharp(depth=5) Sharpen(0.3)
Last edited by jagabo; 8th Jan 2019 at 18:00.
Wow, those halos vanished. My attempt with FineDehalo was not as good as this, this is great. Thank you.
TemporalDegrain2 is available over on the D9 forums and seems to remove more noise while keeping the detail. The script file has a little help menu too which is nice.
Do you have any recommendations for a chroma denoiser for the analog noise in the video. It almost looks like rainbows in the window, where it's bleeding color noise from yellow to pink. I wonder if I filtered that out first, all of the other filters would look better. I tried CCD in Vdub but it didn't really remove it.
Is it also possible to get rid of this bloom effect on the video after the dehalo, with the edges of highlights glowing almost?
I've made a comparison between 4 stills created from the script. Source, Old Script, New Script, and New Script with TemporalDegrain2(degrainTR=1) instead.
When I originally used your script with TemporalDegrain2 I had an old version (2.1.2) of the filter. It was generating ugly temporal blending artifacts, hence my original remark (for example, when they guy turned from profile to face the camera his face was very distorted). Thinking maybe an update would fix the problem I downloaded a more recent version 2.2.0. That was generating script errors so I updated the required plugins that were out of date. I never was able to get the 2.2.0 version of TD2 working. But when I went back to 2.1.2 the problem I had originally seen was gone. The older version of TemporalDegrain2 was working better than the even older TemporalDegrain so I'll probably switch to that in the future.
I'm not sure what you mean about rainbow noise in the window. You can try using a much stronger noise reduction filter on the chroma only.
Are you using 64-bit or 32-bit Avisynth? I am not sure about 64-bit, but 32-bit work for me on the latest TD2 version. I don't use any mod versions of the plugins for use in TD2.
If you look at a frame in the sample, do you see color noise in the highlights, or the white shirt? It's not really removed with TD2 since its chroma/color noise I think. I'm wondering if there could be a way to remove it without the detail loss.
Here's a sample frame from maybe the original scan (although on the DVD, so compression still applies) before the final that's in the sample. I can't use this because it's only offered in fragments and missing parts unlike the sample. Its more apparent here though of the type of noise that is still in the sample but not as strong.
This is the final script I'm ending up using if anyone would like to try it on their own DVD sources.
video=mpeg2source("VTS_02_2.d2v", idct=5, iPP=false, cpu=0, info=3, i420=true) audio=FFAudioSource("VTS_02_2 T80 2_0ch 192Kbps DELAY -120ms.ac3").DelayAudio(-0.120).Normalize(0.98) AudioDub(video,audio) Trim(1086,2915) AssumeTFF().TFM() LoadVirtualDubPlugin ("VirtualDub-1.10.4\plugins32\MSU_SmartDeblock_0.8.vdf", "MSU_Smart_Deblocking",0) ConvertToRGB32(interlaced=false) MSU_Smart_Deblocking(0, 1, 1, 1) ConvertToYV12(matrix="Rec601", interlaced=false) assumefps(23.976, sync_audio=True) #RoboCrop() Crop(16,2,692,570) vinverse() TemporalDegrain2(degrainTR=1,postFFT=3,postSigma=1) #ContinuityFixer_ContinuityFixer(top=0, left=1, right=1, bottom=0, radius=1) #MergeChroma(aWarpSharp2(depth=5), aWarpSharp2(depth=15)) Sharpen(0.3, 0.0) ColorMatrix(mode="Rec.601->Rec.709") #ConvertToRGB(matrix="Rec709", interlaced=false) #RGBAdjust(r=0.92, g=0.92, b=1.15) autolevels() #nnedi3_rpow2(fwidth=1524,cshift="Spline64Resize", rfactor=2, nsize=4, nns=4, qual=1, etype=0, pscrn=2, threads=0, opt=2) #aWarpSharp(depth=5) Sharpen(0.3)
There's still a dithering problem which I'm unable to fix.