12-01-2017, 08:13 PM
|
|
Free Member
|
|
Join Date: Jun 2017
Posts: 42
Thanked 1 Time in 1 Post
|
|
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
Last edited by lordsmurf; 12-02-2017 at 12:58 AM.
Reason: Removed attachment, added cdn4 link
|
Someday, 12:01 PM
|
|
Ads / Sponsors
|
|
Join Date: ∞
Posts: 42
Thanks: ∞
Thanked 42 Times in 42 Posts
|
|
|
12-01-2017, 09:12 PM
|
|
Site Staff | Video
|
|
Join Date: Dec 2002
Posts: 14,011
Thanked 2,544 Times in 2,163 Posts
|
|
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.
|
12-01-2017, 09:26 PM
|
|
Free Member
|
|
Join Date: Jun 2017
Posts: 42
Thanked 1 Time in 1 Post
|
|
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.
|
12-02-2017, 01:03 AM
|
|
Site Staff | Video
|
|
Join Date: Dec 2002
Posts: 14,011
Thanked 2,544 Times in 2,163 Posts
|
|
Yes, that can be improved. I just need a little time to show you how.
|
12-02-2017, 12:40 PM
|
|
Premium Member
|
|
Join Date: Aug 2009
Location: N. Carolina and NY, USA
Posts: 3,648
Thanked 1,319 Times in 989 Posts
|
|
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.
Last edited by sanlyn; 12-02-2017 at 12:51 PM.
|
12-04-2017, 02:11 AM
|
|
Site Staff | Video
|
|
Join Date: Dec 2002
Posts: 14,011
Thanked 2,544 Times in 2,163 Posts
|
|
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.
|
12-04-2017, 03:06 AM
|
|
Free Member
|
|
Join Date: Jun 2017
Posts: 42
Thanked 1 Time in 1 Post
|
|
Oh crap
|
12-10-2017, 11:08 AM
|
|
Site Staff | Video
|
|
Join Date: Dec 2002
Posts: 14,011
Thanked 2,544 Times in 2,163 Posts
|
|
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.
|
The following users thank lordsmurf for this useful post:
captainvic (06-20-2019),
wimvs (12-10-2017)
|
12-10-2017, 11:34 AM
|
|
Site Staff | Video
|
|
Join Date: Dec 2002
Posts: 14,011
Thanked 2,544 Times in 2,163 Posts
|
|
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
|
The following users thank lordsmurf for this useful post:
wimvs (12-10-2017)
|
All times are GMT -5. The time now is 04:02 PM
|