Hello everyone. My brother filmed some 8mm film of our parents on a paper screen with his DSLR. This was shot at 1080p, 24fps or 30fps. I am now trying to filter these movies to surprise my parents with a semi-restored movie. I was really inspired by Freddy van der Putte's 'Power of Avisynth', and brought together filters in an Avisynth script to make the film a little bit better watchable.
Below are two examples of the original (left) and filtered outcome (right).
Please find attached the
Original Video
My avisynth script
Before-and-after-video
I do not expect magic, like Freddy did, but of course want to come somewhat close
I would like to stabilize these videos, enhance the contrast and colors, and get rid of some hairs and spots. I do not need to get super clean results, as I think some 8mm film effects has its charm.
I am not so happy with my result, as
1. there is some ghosting induced,
2. I still have lots of hairs and big spots visible,
3. and I loose more detail then I would love.
I have been tweaking the parameters quite a lot, but this is the best result I could get so far. I am wondering if people here could kindly advice me with their experience, to get an even better result? Many thanks!!
+ Reply to Thread
Results 1 to 11 of 11
-
Last edited by elbenno; 21st Oct 2014 at 14:43.
-
Fred's scripts require that the film transfer be "frame accurate." This means that each frame in your video contains exactly one frame of film. Unfortunately, when you point a video camera at a movie screen, and simply film what is being projected, many of your video frames will contain a blend of adjacent frames of film. Some will contain a duplicate of the previous frame. The proportion of blends, duplicates, and clean frames will depend entirely on the ratio of the speed of the projector (typically 16 or 18 fps for a silent projector, and 24 fps for a sound projector) and the speed of your filming which you say was either 24 or 30 fps, progressive.
So, you will not be able to use any of "VideoFred's" restoration scripts, or my modified versions of his work.
However, one of the gurus over at doom9.org, Didée, helped someone develop a way to recover something that approaches a frame-accurate transfer from what you get if you just film the movie screen. The person who he helped was so grateful, that he uploaded to doom9.org all the things needed to do this recovery. You'll find his thread here:
The power of Avisynth: salvaging "botched" transfers of old 8mm films to DVD
While I do my own film transfers, and they are all frame accurate, someone gave me a film transfer that had been done in the same manner as yours, and I had a reason to try out his script. It worked pretty well.
So, what you'll need to do is first run your transfer through this recovery script, and then take the results of that script and run that through VideoFred's restoration script.
If you want to read about how the recovery script was created, you can start at this point in VideoFred's long film restoration thread. I think you will find it useful to read 2-3 pages from this point forward, because it will help you understand the issues you will face:
Developing a Frame Accurate Recovery Script -
you could try this to sharpen it:
ConverttoRGB32(matrix="rec709",interlaced=false)
LoadVirtualDubPlugin("C:\Program Files (x86)\VirtualDub\plugins\msu_sharpen.vdf", "MSUSmartSharpen", 1)
MSUSmartSharpen(2) # from 0 to 5 (mad)
converttoyv12(matrix="Rec709",interlaced=false)
more here
Sharpen first then remove dirt dust etc..*** DIGITIZING VHS / ANALOG VIDEOS SINCE 2001**** GEAR: JVC HR-S7700MS, TOSHIBA V733EF AND MORE -
I was able to recover something pretty close to a real frame-accurate transfer. I then put that through my version of VideoFred's script. Here is a still shot of the result:
Here is the video:
https://dl.dropboxusercontent.com/u/1561578/Restored.avi
And here is the script I used:
Code:Loadplugin("C:\Program Files\AviSynth 2.5\plugins\MVTools\mvtools2.dll") import("C:\Program Files\AviSynth 2.5\plugins\Srestore\srestore.avs") loadPlugin("C:\Program Files\AviSynth 2.5\plugins\QTGMC\mt_masktools-26.dll") loadPlugin("C:\Program Files\AviSynth 2.5\plugins\QTGMC\mt_masktools-25.dll") avisource("e:\fs.avi").assumefps(30).ConvertToYV12(interlaced=true) o=last o.bob(-.2,.6) SRestore(frate=12,cache=10) requestlinear() rest=last calm = rest.temporalsoften(1,255,255,32,2).merge(rest,0.25)#.repair(rest,1).removegrain(11) calm = calm.temporalsoften(1,255,255,16,2).merge(calm,0.25) LOP = calm.bicubicresize(480,270).bicubicresize(1920,1080,1,0) HIP = rest.bicubicresize(480,270).bicubicresize(1920,1080,1,0) HIP = mt_makediff(rest,HIP) mix = LOP.mt_adddiff(HIP,U=2,V=2) sup1=rest.msuper(levels=1) sup2=mix.removegrain(11).msuper() bv2=sup2.manalyse(isb=true, delta=2,blksize=16,overlap=8,DCT=5) bv1=sup2.manalyse(isb=true, delta=1,blksize=16,overlap=8,DCT=5) fv1=sup2.manalyse(isb=false,delta=1,blksize=16,overlap=8,DCT=5) fv2=sup2.manalyse(isb=false,delta=2,blksize=16,overlap=8,DCT=5) rest.mdegrain2(sup1,bv1,fv1,bv2,fv2,thSAD=640) Crop(320,16,-320,-100) LanczosResize(720,480) assumefps(18)
-
Thanks, themaster1, I really like the MSU filters, that sharpens nicely. One question though:
1. why sharpen first, then remove the dirt? I always learned one should sharpen at the end only, as the dirt might be enforced?
Wow, John, that is quite an impressive step forward. I am playing with your script now to see what I can make of it myself. I will put if forward at Doom9. Before I go there, I have three questions:
2. How does one prevent the out of bounds error messages to appear on the exported video (as in your export it did not)? Like
3. Also, the script works here, accept for the denoising, my version of avisynth does not recognize the 'sup1' command (error "I don't know what sup1 means"). How can I fix this?
4. You loose me at the denosing part, what is happening there? Temporal softening, a type of resizing(?) and then the actual denoising?
calm = rest.temporalsoften(1,255,255,32,2).merge(rest,0.2 5)#.repair(rest,1).removegrain(11)
calm = calm.temporalsoften(1,255,255,16,2).merge(calm,0.2 5)
LOP = calm.bicubicresize(480,270).bicubicresize(1920,108 0,1,0)
HIP = rest.bicubicresize(480,270).bicubicresize(1920,108 0,1,0)
HIP = mt_makediff(rest,HIP)
mix = LOP.mt_adddiff(HIP,U=2,V=2)
sup1=rest.msuper(levels=1)
sup2=mix.removegrain(11).msuper()
bv2=sup2.manalyse(isb=true, delta=2,blksize=16,overlap=8,DCT=5)
bv1=sup2.manalyse(isb=true, delta=1,blksize=16,overlap=8,DCT=5)
fv1=sup2.manalyse(isb=false,delta=1,blksize=16,ove rlap=8,DCT=5)
fv2=sup2.manalyse(isb=false,delta=2,blksize=16,ove rlap=8,DCT=5)
rest.mdegrain2(sup1,bv1,fv1,bv2,fv2,thSAD=640) -
why sharpen first, then remove the dirt?
How does one prevent the out of bounds error messages to appear on the exported video (as in your export it did not)?
Also, the script works here, accept for the denoising, my version of avisynth does not recognize the 'sup1' command (error "I don't know what sup1 means"). How can I fix this?
You loose me at the denosing part, what is happening there? Temporal softening, a type of resizing(?) and then the actual denoising?
You can get a LOT more information about this script from that link I provided (the link that takes you to the thread started by the person who wanted to share the script Didee created). -
Thanks again John. I will create a topic to discuss this at Doom9. Thanks for the help!!
I will read the "Developing a Frame Accurate Recovery Script". -
-
Is everyone too polite to say what an awful transfer this is? Only the centre of the image is in focus. I'm sure the image on the actual film is far better than this, and the transfer has irrecoverably lost most of the details and quality.
Cheers,
David. -
I have come to the same conclusion David, I have to contact my brother about this, to check if it is the lens of the projector.