digitalFAQ.com Forum

digitalFAQ.com Forum (https://www.digitalfaq.com/forum/)
-   Restore, Filter, Improve Quality (https://www.digitalfaq.com/forum/video-restore/)
-   -   Copy of a copy of a copy VHS tape? (https://www.digitalfaq.com/forum/video-restore/8336-copy-copy-copy.html)

Padawan 12-01-2017 08:13 PM

Copy of a copy of a copy VHS tape?
 
Hello,

I have some old footage of a wedding.

http://cdn4.digitalFAQ.com/padawan/ParentsWedding.mpg

Originally this was copied to VHS from an unknown source then 10 years ago it was dubbed from VHS to DVD.

The groom copied over all but 2 minutes of the VHS with horse racing so what is left is very small (174Mb) which I have split into 2 RAR files.

Do you think this is even possible to improve? I wouldn't think so but I promised I would ask. If so could you please suggest what Virtualdub filters would be best to use?

Regards,
Paul

lordsmurf 12-01-2017 09:12 PM

You attached 2 files that don't unRAR. I'm getting an error. Bad archive. I vaguely remember WinRAR screwing around with files on newer versions, but I'm not upgrading mine (aka buying it again) just for that. I dislike it when companies break stuff in order to make you buy it again (see also Microsoft Office, which I ditched in favor of OpenOffice). Consider a 7zip multipart instead.
Fixed.

Padawan 12-01-2017 09:26 PM

Hi Lord Smurf, I just downloaded those files and managed to unrar them to a single MPEG2 file.
Ah I just got your email about the other DVD so I will do as you ask.
Regards, Paul

Fixed.

lordsmurf 12-02-2017 01:03 AM

Yes, that can be improved. I just need a little time to show you how. :)

sanlyn 12-02-2017 12:40 PM

The original source, before it was copied/recorded multiple times or whatever, doesn't look like taped video source. It looks like film source recorded off a projection screen with a video camera that was running at a faster frame rate than the filmed movie. There are blended imaghes between frames and shifting objects due tom the difference between playing and recording speeds. TFM().Tdecimate() (inverse telecine) isn't perfect at cleaning up the blends, but indicates the original was film at 20fps.

IMHO.

lordsmurf 12-04-2017 02:11 AM

It was obviously film transferred to VHS. And actually, better than most I see. It's fairly stable, and has good detail. I plan to look at it more in due time, but I have Avisynth scripts for film (mine, not VideoFred's/etc).

I'm thinking a basic TFM(), maybe. Sometimes other tricks work better (srestore, etc)
Non-template QTGMC().
Maybe my stabmod(), but Mercalli is probably called for here.

It can be better. That's the important part. He wanted some good news -- and he got it. :)

He doesn't know it yet, but he's going to be my guinea pig for the new Avisynth guide. He knows nothing, which is perfect. With his Q&A, it will be developed. The you and I and others can refine some advanced guides off it.

Padawan 12-04-2017 03:06 AM

Oh crap :)

lordsmurf 12-10-2017 11:08 AM

2 Attachment(s)
First converted video from MPEG to lossless in VirtualDub, I don't like loading MPEG direct from Avisynth.

Note that I use both Lagarith and Huffyuv, depending on other software in use. For example, Mercalli needs Huffyuv, while MainConcept x64 needs Lagarith. So I switch as needed.

This took 5 passes.

Fix chroma pass1
Code:

AVISource("c:\padawan ParentsWedding SRC.avi")
AssumeTFF()
ConvertToYUY2(interlaced=true)
ChromaShift(C=2, L=-2)

Remove dropouts script, pass2. Too long to post here, will post in reply.

VirtualDub crop bottom head-switching noise, pass 3.
You don't want that noise to be stabilized. Leave all other borders alone.

Deinterlace pass 4
Code:

AVISource("c:\padawan pass3 +crop.avi")
AssumeTFF()
ConvertToYV12(interlaced=true)
QTGMC(Preset="Slower", SourceMatch=3, Lossless=2, MatchEnhance=0.75, TR2=1, Sharpness=0.1)
SelectEven()

Mercalli v3 SAL for pass5.

The dropout script removed all film grain. Film grain gives a false notion of detail. When removed, it looks too smooth and too soft, even though it really is. (BTW, same issue with VCRs being accused of "softening" an image, when it's really just removing noise.) So pas5 puts back 5 pixels luma grain with MSU add grain filter.

And done.

Mercalli was skipped for non-stabilization version.

A stab() or stabmod() could be created in Avisynth, and the outcome would be less borders, but with less stabilization. Choices, choices. Since nothing important was really lost by the 50% image border, yet good stab was gained, that'd be my pick here.

lordsmurf 12-10-2017 11:34 AM

Code:

SetMemoryMax(2048)
SetMTMode(5,8)
AVISource("c:\.avi")
ConvertToYV12(interlaced=true)
SetMTMode(4,8) 
AssumeTFF()
SeparateFields()
a=last
clense(reduceflicker=false).merge(last,0.5).clense(reduceflicker=false)
mot=removegrain(11,0).removegrain(20,0).DepanEstimate(range=2)
take2=a.depaninterleave(mot,prev=2,next=2,subpixel=2)
clean1=take2.TMedian2().selectevery(5,2)
sup1 = clean1.minblur(1).removegrain(11,0).removegrain(11,0)
 \          .mt_lutxy(clean1,"x 1 + y < x 2 + x 1 - y > x 2 - y ? ?",U=2,V=2)
 \          .msuper(pel=2,sharp=0)
sup2 = a.msuper(pel=2,levels=1,sharp=2)
bv22=sup1.manalyse(isb=true, truemotion=false,global=true,delta=2,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
bv21=sup1.manalyse(isb=true, truemotion=false,global=true,delta=1,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
fv21=sup1.manalyse(isb=false,truemotion=false,global=true,delta=1,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
fv22=sup1.manalyse(isb=false,truemotion=false,global=true,delta=2,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
interleave(a.mcompensate(sup2,fv22),a.mcompensate(sup2,fv21),a,a.mcompensate(sup2,bv21),a.mcompensate(sup2,bv22))
TMedian2().selectevery(5,2)
sup3 = last.msuper(pel=2,sharp=2)
bv33=sup3.manalyse(isb=true, truemotion=false,global=true,delta=3,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
bv32=sup3.manalyse(isb=true, truemotion=false,global=true,delta=2,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
bv31=sup3.manalyse(isb=true, truemotion=false,global=true,delta=1,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
fv31=sup3.manalyse(isb=false,truemotion=false,global=true,delta=1,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
fv32=sup3.manalyse(isb=false,truemotion=false,global=true,delta=2,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
fv33=sup3.manalyse(isb=false,truemotion=false,global=true,delta=3,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
last.mdegrain3(sup3,bv31,fv31,bv32,fv32,bv33,fv33,thSAD=499)
Interleave()
Weave()
function MinBlur(clip clp, int r, int "uv")
{
uv  = default(uv,3)
uv2  = (uv==2) ? 1 : uv
rg4  = (uv==3) ? 4 : -1
rg11 = (uv==3) ? 11 : -1
rg20 = (uv==3) ? 20 : -1
medf = (uv==3) ? 1 : -200
RG11D = (r==0) ? mt_makediff(clp,clp.sbr(),U=uv2,V=uv2)
 \    : (r==1) ? mt_makediff(clp,clp.removegrain(11,rg11),U=uv2,V=uv2)
 \    : (r==2) ? mt_makediff(clp,clp.removegrain(11,rg11).removegrain(20,rg20),U=uv2,V=uv2)
 \    :          mt_makediff(clp,clp.removegrain(11,rg11).removegrain(20,rg20).removegrain(20,rg20),U=uv2,V=uv2)
RG4D  = (r<=1) ? mt_makediff(clp,clp.removegrain(4,rg4),U=uv2,V=uv2)
 \    : (r==2) ? mt_makediff(clp,clp.medianblur(2,2*medf,2*medf),U=uv2,V=uv2)
 \    :          mt_makediff(clp,clp.medianblur(3,3*medf,3*medf),U=uv2,V=uv2)
DD    = mt_lutxy(RG11D,RG4D,"x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?",U=uv2,V=uv2)
clp.mt_makediff(DD,U=uv,V=uv)
return(last)
}
function Median2(clip "input_1", clip "input_2", clip "input_3", clip "input_4", clip "input_5", string "chroma")
{
chroma = default(chroma,"process") #default is "process". Alternates: "copy first" or "copy second"
Interleave(input_1,input_3,input_5)
chroma == "process" ? Clense(reduceflicker=false) : Clense(reduceflicker=false,grey=true)
m1 = selectevery(3,1)
m2  = input_1.MT_Logic(input_3,"min",chroma=chroma).MT_Logic(input_5,"min",chroma=chroma).MT_Logic(input_2,"max",chroma=chroma)
m3  = input_1.MT_Logic(input_3,"max",chroma=chroma).MT_Logic(input_5,"max",chroma=chroma).MT_Logic(input_4,"min",chroma=chroma)
Interleave(m1,m2,m3)
chroma == "process" ? Clense(reduceflicker=false) : Clense(reduceflicker=false,grey=true)
selectevery(3,1)
chroma == "copy first" ? last.MergeChroma(input_1) : chroma == "copy second" ? last.MergeChroma(input_2) : last
Return(last)
}
function TMedian2(clip c) {
Median2( c.selectevery(1,-2), c.selectevery(1,-1), c, c.selectevery(1,1), c.selectevery(1,2) ) }
Return(last) # MT stability



All times are GMT -5. The time now is 08:50 PM

Site design, images and content © 2002-2024 The Digital FAQ, www.digitalFAQ.com
Forum Software by vBulletin · Copyright © 2024 Jelsoft Enterprises Ltd.