I have a very small section of an interlaced source that has been resized. In the past I've had success dealing with this issue by running vInverse on each field, but this workaround is only effective when the combing artefacts are 2 px high, which is not the case here. I'm not really sure this clip can be repaired, thoughts? https://mega.nz/file/L4xiGArR#aehp68-Ba5CXdVl-W0neDm-uezEV5dB51GSZDcOVXKk
Thank you.
Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays! or rip iTunes movies!
+ Reply to Thread
Results 1 to 23 of 23
Thread
-
-
No I know it's interlaced. But there are extra artefacts after the deinterlacing process.
-
Oops-yes I see it. As well as the resize while interlaced, it's also encoded to progressive AVC - Another blow
to the quality.
I think jagabo and possibly johnmeyer were talking about this recently.
might have to do a forum search
You could try blend deinterlace followed by vertical resize by half and then back,
but this source is so poor.
cant you find a better source? -
Yes, this is virtually identical to the wrongly-resized interlaced concert footage that I was able to significantly improve. Here is the link to the doom9.org thread. You'll see that it took several days, and lots of help from other people, but we ended up making the video look a heck of a lot better:
repair bad deinterlacing
I re-imported all of the pictures for my posts, but the Photobucket debacle has killed quite a few of the photos in other people's posts. I think you'll still be able to figure out what to do. -
I'll try to get it to work on this clip. I understand the basic idea so hopefully I can manage. Thankfully the broken section is very short (the clip is actually the whole thing) so it should be fast enough.
-
Alas, I am stuck
Code:source = DGSource("D:\Ripping\VOB\V02-P01-00.dgi").AssumeTFF().QTGMC(preset="fast", fpsdivisor=2).selectEven() prev = selectEvery(source, 1, -1) super = MSuper(prev, pel=2) vfe=manalyse(super,truemotion=true,isb=false,delta=1) vbe=manalyse(super,truemotion=true,isb=true,delta=1) prev_est = mflowinter(prev, super,vbe,vfe,time=50) source = source.convertToRGB() prev_est = prev_est.convertToRGB() c1 = crop(source,0,5,576,2) c2 = crop(prev_est,0,7,576,3) c3 = crop(source,0,10,576,2) c4 = crop(prev_est,0,12,576,3) c5 = crop(source,0,15,576,2) c6 = crop(prev_est,0,17,576,3) c7 = crop(source,0,20,576,2) c8 = crop(prev_est,0,22,576,3) c9 = crop(source,0,25,576,2) c10 = crop(prev_est,0,27,576,3) c11 = crop(source,0,30,576,2) c12 = crop(prev_est,0,32,576,3) c13 = crop(source,0,35,576,2) c14 = crop(prev_est,0,37,576,3) c15 = crop(source,0,40,576,2) c16 = crop(prev_est,0,42,576,3) c17 = crop(source,0,45,576,2) c18 = crop(prev_est,0,47,576,3) c19 = crop(source,0,50,576,2) c20 = crop(prev_est,0,52,576,3) c21 = crop(source,0,55,576,2) c22 = crop(prev_est,0,57,576,3) c23 = crop(source,0,60,576,2) c24 = crop(prev_est,0,62,576,3) c25 = crop(source,0,65,576,2) t = blankClip(length=FrameCount(source), width=720, height=576, fps=25, color=$000000) t1 = overlay(t ,c1,0,5) t1 = overlay(t1,c2,0,7) t1 = overlay(t1,c3,0,10) t1 = overlay(t1,c4,0,12) t1 = overlay(t1,c5,0,15) t1 = overlay(t1,c6,0,17) t1 = overlay(t1,c7,0,20) t1 = overlay(t1,c8,0,22) t1 = overlay(t1,c9,0,25) t1 = overlay(t1,c10,0,27) t1 = overlay(t1,c11,0,30) t1 = overlay(t1,c12,0,32) t1 = overlay(t1,c13,0,35) t1 = overlay(t1,c14,0,37) t1 = overlay(t1,c15,0,40) t1 = overlay(t1,c16,0,42) t1 = overlay(t1,c17,0,45) t1 = overlay(t1,c18,0,47) t1 = overlay(t1,c19,0,50) t1 = overlay(t1,c20,0,52) t1 = overlay(t1,c21,0,55) t1 = overlay(t1,c22,0,57) t1 = overlay(t1,c23,0,60) t1 = overlay(t1,c24,0,62) t1 = overlay(t1,c25,0,65) return t1.converttoyuy2()
-
You have to get rid of pure duplicates before you can do anything else. It's probably a film source, so TFM/TDecimate should work (i.e., inverse telecine).
Last edited by johnmeyer; 21st Aug 2020 at 10:30. Reason: typo
-
It's not a film source however. That's the problem, I believe. They may all be orphaned fields. The source is 25i, however frames are interlaced on themselves (I don't know if that makes sense) so that in reality it's only 25p. If you deinterlace the clip you can clearly see that it must be done with qtgmc(fpsdivisor=2) but after *that* you are still left with one dupe per deinterlaced frame. It's some sort of VFX and it's a hell of a mess...
-
Maybe I'm doing something wrong, but it appears to me to be 12.5 fps with every other frame missing.
-
What do you mean by "every other frame missing"? If I decimate to 12.5 (with qtgmc(fpsdivisor=2).selectEven()) I'm left with no duplicates and no apparent missing frames in the motion.
-
Examine the fields with SeparateFields(). You have groups of 4 consecutive fields that belong the the same moment in time. So the content is 12.5 fps. If there was 2 in a row, it would be 25p . If was different every field, it would be real interlaced 25i (50 different fields/s)
-
See, that's what I don't understand. I'm saying it's 12.5 from the start. Or are you saying that it cannot be fixed because of those missing frames from the original 25i?
-
-
I don't even know what you mean by "fixed." You are missing a huge amount of temporal information. If it really was interlaced video to start with, then at one point you had 50 events per second (25 frames, but 50 interlaced fields). You now have only two moments in time for every four fields, so you have lost 50% of the temporal information.
You have to fix the temporal problems before you can do anything about any resizing problems. The simple thing is to decimate the duplicate frame, leaving you with a 12.5 fps interlaced video. You could then fix the resizing mess and, after doing that, use motion estimation to bring the video speed back up to 25 fps progressive or 50 fps interlaced.
It won't look very good, even after all that work. -
I notice with some amusement that the clip i commented on above is not the same clip
associated with this thread. Somehow I downloaded this file but then analyzed a shoot up and explosion video.
I would also ask what would be an acceptable result?
Here's an example of using TFM to match the fields, vertical BilinearResize down and up, 25 FPS -
Isn't this exactly what I'm doing? QTGMC deinterlaces the clip to 50p, brought down to 25p by fpsdivisor, brought down to 12.5 by selectEven. There's something I'm missing from what you are all saying. I understand it's a misunderstanding or misconception from my part, but I just can't see it.
Originally Posted by davexnet -
You can add blur; it's still visible, reduced a little
Code:mpeg2source("C:\Users\davex\Desktop\guitar.d2v") tfm() blur(0,1.5) BilinearResize(width,height/2) BilinearResize(width,height*2)
-
-
Now that's quite good actually! Why do you downscale to a quarter exactly? It woud make sense to me if the artifacts were 4 px high.
Originally Posted by davexnet -
I tried height/2, and height/3. Both still had obvious banding. At height/4 the banding was nearly gone. You could try other heights but a quick test shows visible banding over 144 lines, not much improvement below 144 lines (and the picture gets blurrier).
Code:function DownUp(clip v, int height) { v.Spline36Resize(v.width, height) Spline36Resize(v.width, v.height) Subtitle(string(height)) } Mpeg2Source("2020-08-20.demuxed.d2v", CPU2="ooooxx", Info=3) Trim(34,0) # pick one frame Loop(576,0,0) #repeat it 576 times ConvertToYV24() # YV24 so odd heights are ok Animate(0,560, "DownUp", last,576, last,16) # show them
This looks pretty good:
Code:SelectEven() Spline36Resize(width, height/4) # instead of Spline36Resize(width, height*4): aWarpSharp2(depth=5) Sharpen(0.0, 0.3) nnedi3_rpow2(4, cshift="Spline36Resize", fwidth=width, fheight=height*4) aWarpSharp2(depth=5) Sharpen(0.0, 0.5)
Last edited by jagabo; 21st Aug 2020 at 18:38.
-
I spent a little time with this and realized that the decimation may not be just 2:1 but may actually be 4:1. If you play the original clip, posted in #1 above, isn't it already playing at twice normal speed? If so, given that it only has 12.5 actual frames per second, to get it to play at 25 fps at normal speed will require inserting three new frames between each existing frame. This will give you a 4x increase in the number of frames which, when starting from 12.5 fps, is going to introduce some pretty spectacular motion-estimation artifacts.
So, I punted on slowing it down.
Here is the code I used to get it be 25 fps, but at the speed of the original clip. Note that I threw away the bad field and then did a simple Bob to create the other field from the existing field (I may not have the Bob parameters set correctly. It was a quick and dirty way to get rid of 80% of the horizontal line problem.
I have attached the result of the script below:
Code:loadplugin("C:\Program Files\AviSynth 2.5\plugins\MVTools\mvtools2.dll") loadPlugin("E:\Documents\My Videos\AVISynth\AVISynth Plugins\plugins\TIVTC.dll") loadPlugin("E:\Documents\My Videos\AVISynth\AVISynth Plugins\plugins\Film Restoration\Script_and_Plugins\RemoveGrain.dll") AVISource("e:\fs.avi").killaudio().converttoYV12() AssumeTFF() #Remove all the duplicate fields tfm(display=false) #consider adding cthresh=255 tdecimate(display=false,mode=0,cycleR=2,cycle=4) #18 fps # 3:3:4 field count #Create full frames from each field bob(0.0,1.0) #Select the better of the two frames source = selecteven() #Create a new frame between each existing frame in order to go from 12.5 fps to 25.0 fps. prefiltered = RemoveGrain(source,22) super = MSuper(source,hpad=16, vpad=16, levels=1) # one level is enough for MRecalculate superfilt = MSuper(prefiltered, hpad=16, vpad=16) # all levels for MAnalyse backward = MAnalyse(superfilt, isb = true, blksize=16,overlap=4,search=3,dct=0) forward = MAnalyse(superfilt, isb = false, blksize=16,overlap=4,search=3,dct=0) forward_re = MRecalculate(super, forward, blksize=8, overlap=2, thSAD=100) backward_re = MRecalculate(super, backward, blksize=8, overlap=2, thSAD=100) output=MFlowFps(source,super, backward_re, forward_re, num=25, den=1,ml=200,mask=2) #Take the motion-estimated frame and interleave it with the original frames (probably not needed but it 100% ensures that you only get 50% motion #estimate frames, and the other 50% are the frames from the Bob(). output=output.selectodd() interleave(source,output)
Last edited by johnmeyer; 21st Aug 2020 at 19:36. Reason: added comments to the code
-
Thank you all for your hard work. In the end I prefer jagabo's solution. Considering the length of the section compared to that of the whole 90 min. footage, the loss in details is pretty much cannot be noticed. And it has the advantage of getting rid of the artefacts.
Similar Threads
-
How to keep interlaced footage interlaced converting from AVI to MP4?
By kodec in forum Video ConversionReplies: 23Last Post: 1st Jul 2019, 10:36 -
Potplayer + MadVR, GPU usage is halved when resized or fullscreen?
By Rumba47 in forum Software PlayingReplies: 0Last Post: 10th Jun 2018, 15:58 -
Restoring resized interlaced videos
By Lirk in forum RestorationReplies: 10Last Post: 8th Jan 2018, 13:16 -
512 X 384 resized to 640 X 480...any loss in quality?
By 90sTV in forum Newbie / General discussionsReplies: 3Last Post: 3rd Sep 2017, 10:26 -
Easiest free way to convert 25fps interlaced to 50fps de-interlaced?
By Gibson's Squares in forum MacReplies: 2Last Post: 25th Jul 2017, 09:06