+ Reply to Thread
Results 31 to 60 of 61
-
I said order doesn' t matter in that specific case of that avs script, where it's still progressive.
Order does matter when you convert to RGB and use wrong chroma up sampling (interlaced vs. progressive) , or improper handling of chroma channels when scaling (e.g. using progressive method to scale when chroma is interlaced). This was already discussed too. Do you remember the ffmpeg thread, with the soccer player interl=1 ? Remember TMPGEnc doing it incorrectly ? = chroma ghostLast edited by poisondeathray; 4th Oct 2014 at 13:31.
-
I remember but I'm a cat . so to summarize, considering the progressive source what should a correct script?
FFVideoSource("GOPR1262.MP4")
ConvertToYUY2(interlaced=false)
ColorMatrix(mode="Rec.709->Rec.601")
Spline36Resize(720,576)
Assumetff().SeparateFields().SelectEvery(4, 0, 3).Weave()
should be correct?
but to legalize leves what it can be used?Last edited by marcorocchini; 4th Oct 2014 at 13:39.
-
You need to fix levels on go pro files if you use FFMS2 , remember full range flag ?
Spline36 is probably too sharp, and/or you need to lowpass as well
Colormatrix should have clamp=0 or clamp=false (depending on version), otherwise you CLIP data (it's mislabelled as "clamp"), especially if you didn't legalize levels beforehand -
FFVideoSource("c:\gopro\GOPR1262.MP4")
ConvertToYUY2(interlaced=false)
ColorYUV(levels="TV->PC")
Colormatrix(mode="rec.709->rec.601",clamp=false)
nnedi3_rpow2(2, cshift="Lanczos4Resize", fwidth=720, fheight=576)
Assumetff().SeparateFields().SelectEvery(4, 0, 3).Weave() -
FFVideoSource("c:\gopro\GOPR1263.MP4")
ConvertToYUY2(interlaced=false)
ColorYUV(levels="PC->TV")
Colormatrix(mode="rec.709->rec.601",clamp=false)
nnedi3_rpow2(2, cshift="Lanczos4Resize", fwidth=720, fheight=576)
Assumetff().SeparateFields().SelectEvery(4, 0, 3).Weave() -
that fatigue to be a cat!
mmm think is too sharp, too details aliasing
I need to smooth but I don't know how to use the nnedi3 -
nnedi3_rpow2 is for upscaling ; it's not a low pass filter.
Try softer resize algorithm. Here is a visualization of different resizing kernals
http://svn.int64.org/viewvc/int64/resamplehq/doc/kernels.html
Try vertical blur then sharpen. Have a look in your other threads, there were many suggestions -
FFVideoSource("c:\gopro\GOPR1263.MP4")
ConvertToYUY2(interlaced=false)
ColorYUV(levels="PC->TV")
Colormatrix(mode="rec.709->rec.601",clamp=false)
spline36resize(720,576)
blur(0.0,1.0)
sharpen(0.0,0.5)
ASSUMEFPS(50)
Assumetff().SeparateFields().SelectEvery(4, 0, 3).Weave()
ASSUMEFPS(25)
mmmm -
poison my cat have a question, can it do a script that insert lowpass filter on moving parts and no lowpass on static parts?
-
Difficult to do automatically and perfectly because of different types of scenes, clips, noise
But one way to do it is with ConditionalFilter() using YDifferenceFromPrevious() .
http://avisynth.nl/index.php/ConditionalFilter
Basically, it uses one clip if the condition is met. e.g. If difference is detected (ie in motion, use video B, otherwise use other video A. Where "A" is unfiltered, "B" is filtered low passed video. In this case YDifferenceFromPrevious is just looking a the Y plane between adjacent frames). It's difficult to do generically for everything, because you have to adjust the threshold value for the detection (e.g. you might have more noise in some poorly lit scenes, but even on a no motion, static scene, the noise could be detected as "motion" or a difference in frames; but on clean footage or better camera, it might use a different threshiold). So you have to do some debugging for appropriate threshold values (use show=true) . Or you might be able to do it with mvtools2 instead of using Y difference
If you get stuck, use search, I've posted several examples on how to use ConditionalFilter before -
thanks but too complicated for a cat, is enought if you can suggest me an appropriate resizing filter for the gopro, I have put
spline36resize(720,576)
blur(0.0,1.0)
sharpen(0.0,0.5)
but don't know if spline36 is right, and if that blur or sharpen is right or no. Hoewver, for you what should be a proper resize alghorithm for the gopro? -
Use what you think is best - there is no proper "right or wrong" for that. Unlike using the wrong matrix, wrong colors or illegal levels (which all are definitely "wrong"), the amount of lowpassing is quite subjective and might be different in different situations. eg. If your content has all organic curves, not fine lines, you might not even have to lowpass at all - or very little. Do a pan on a brick wall and you might have to lowpass a lot.
Test and retest examine the results of different footage, different "worst case" situations (panning shots of fences, brick walls, roof top shingles etc...) -
but for now the wrong matrix, wrong colors or illegal levels are solved, it's only question of kind of resize algorithm and blur/sharpen, but you tell me spline36resize is no exactly the optimum, so for you what can do a possible if not this? the lanczos seems to me not, maybe the gauss? In true I don't have well undestand what resize algorithm are lowpass
-
this is a test footage from gopro hero3+ black edition 1920x1080 50P (1080p)
https://www.dropbox.com/s/bulsslffkm56z5u/GOPR1264.MP4?dl=0
Can be suitable IcResize.avsi?
where IcResize.avsi is:
Code:function icResize(clip "source", int "newwidth", int "newheight", bool "discardhalf") { discardhalf = default(discardhalf, false) src1=source.separatefields() src2=discardhalf ? src1.selectevery(4, 0, 3) : src1 Shift = (src2.GetParity() ? -0.25 : 0.25) * (src2.Height()/Float(newheight/2) - 1.0) E = src2.SelectEven() .Spline36Resize(NewWidth, NewHeight/2, 0, Shift) O = src2.SelectOdd() .Spline36Resize(NewWidth, NewHeight/2, 0, -Shift) Echr = src2.SelectEven() .Spline36Resize(NewWidth, NewHeight/2, 0, 2*Shift) Ochr = src2.SelectOdd() .Spline36Resize(NewWidth, NewHeight/2, 0, -2*shift) dst1=Interleave(E, O) dst2=dst1.IsYV12() ? MergeChroma(Interleave(Echr, Ochr)) : dst1 dst2.Weave() }
I have try this:
Code:FFVideoSource("c:\gopro\GOPR1264.MP4") ConvertToYUY2(interlaced=false) Colormatrix(mode="rec.709->rec.601",clamp=false) ColorYUV(levels="PC->TV") IcResize(720,576) AssumeTFF().SeparateFields().SelectEvery(4,0,3).Weave()
not too aliasing, maybe is a little little softer but adding any
blur(0.0,1.0)
sharpen(0.0,0.5)
the situation worses, so I prefer don't adding this last 2 lines
Please poison I wonder this: this source is progressive 50P, and if I would convert to 1920x1080 50i (interlaced), this script is suitable?
Is there a way to correct gamma so that image result is a little more "dark" in black... this ColorYUV(levels="PC->TV") get a image slightly too "tv", maybe too "bright" in brighter zone.
ColorYUV(levels="PC->TV") equalize levels to the edius's output as wel, but I would a gamma more "restricted", can be done in avisynth? -
Of course there are ways - manually adjusting it per scene is the "best" way
Remember, ColorYUV(levels="PC->TV") is a "dumb" clamp - black is "squished" by 16 and white is squished 20. Always. That means on some footage with different exposure characteristics it will look bad
If you dont want to do this manual work, you need control exposure properly when you shoot (very difficult to control unless you have complete control over lighting, better manual settings on camera)
There are some "auto" plugins like autoadjust, autogain, autolevels, you can try etc... you have to set the parameters properly . NLE's have "auto" plugins as well, but they aren't necessarily any better or worse than the avisynth ones. "Auto" anything will of course always yield worse results than doing it manually. -
I had a doubt, but IcResize is for progressive source?
results seems the same of IResize
OR considering the gopro source, is there another best way to resize 1080p --> SD interlaced, is there a plugin for avisynth that work in high-accurate mode (but not too slow)? -
my "final" script should be:
Code:FFVideoSource("c:\gopro\gopr1263.mp4") ConvertToYUY2(interlaced=false) Colormatrix(mode="rec.709->rec.601",clamp=false) ColorYUV(levels="PC->TV") IcResize(720,576) AssumeTFF().SeparateFields().SelectEvery(4, 0, 3).Weave()
for example I would "restrict" gamma in a classic range 0.70-1.2 but I don't know how to do
and 2 thing:
IcResize is ok for progressive source?
IcResize is ok also for upscaling?
Thank you -
Use levels, curves, or some other filters
for example I would "restrict" gamma in a classic range 0.70-1.2 but I don't know how to do
IcResize is ok for progressive source?
IcResize is ok also for upscaling?
-
This seems to me good
Code:FFVideoSource("c:\gopro\gopr1264.mp4") ConvertToYUY2(interlaced=false) Colormatrix(mode="rec.709->rec.601",clamp=false) ColorYUV(levels="PC->TV") ColorYUV(gamma_y=-15, gamma_u=-15, gamma_v=-15) IcResize(720,576) AssumeTFF().SeparateFields().SelectEvery(4, 0, 3).Weave() function icResize(clip "source", int "newwidth", int "newheight", bool "discardhalf") { discardhalf = default(discardhalf, false) src1=source.separatefields() src2=discardhalf ? src1.selectevery(4, 0, 3) : src1 Shift = (src2.GetParity() ? -0.25 : 0.25) * (src2.Height()/Float(newheight/2) - 1.0) E = src2.SelectEven() .LanczosResize(NewWidth, NewHeight/2, 0, Shift) O = src2.SelectOdd() .LanczosResize(NewWidth, NewHeight/2, 0, -Shift) Echr = src2.SelectEven() .LanczosResize(NewWidth, NewHeight/2, 0, 2*Shift) Ochr = src2.SelectOdd() .LanczosResize(NewWidth, NewHeight/2, 0, -2*shift) dst1=Interleave(E, O) dst2=dst1.IsYV12() ? MergeChroma(Interleave(Echr, Ochr)) : dst1 dst2.Weave() }
-
ICResize() is terribly destructive. Why do you insist on using it. Use a vertical blur if you want to reduce interlace flicker.
-
I have try something like
spline36resize(720,576)
blur(0.0,0.5)
sharpen(0.0,0.5)
but very bad results. My target is 50i: so I use a broadcast SD monitor to compare results ... I see image "well": no aliasing, no ringing (consider the gopro Hero3+ in gopr1264.mp4 I have use it without the magnifying glass frontal protection so is natual to have natively outline almost too sharp to the limit of aliasing). If is there is an alternative is welcome -
Sharpening after blurring is silly. Just use enough blur to reduce the aliasing and flicker. And using a sharpening resizer on video that's already over sharpened will only exacerbate the problems. Do you ever think about what you are doing?
Last edited by jagabo; 6th Oct 2014 at 20:34.
-
Jagabo, I stopped feeding the troll a while ago. Much less stressful and more humorous thread reviewing now. Of course, this will only abate when all follow/join the exit bandwagon.
ScottLast edited by Cornucopia; 6th Oct 2014 at 21:41.
-
Code:
FFVideoSource("c:\gopro\gopr1264.mp4") ConvertToYUY2(interlaced=false) Colormatrix(mode="rec.709->rec.601",clamp=false) ColorYUV(levels="PC->TV") ColorYUV(gamma_y=-15) LanczosResize(720,576) blur(0.8,0.8) AssumeTFF().SeparateFields().SelectEvery(4, 0, 3).Weave()
I have try this but in my monitor I found is "better" the IcResize() one -
of course as reference I use a broadcast SD CRT monitor, I know the IResize and IcResize are are misjudged but in my monitor I found they works well: clean details, no aliasing, no flickering, no loss of the general "definition" (...) of images.
Seems to me IcResize is a lot better compared to other methods, but I don't know many many other methods.
Out of the IcResize/IResize procedure I get easly aliasing and the picture becomes very difficult to treat.
Maybe I'm wrong somewhere but at the moment I see that. -
ps. IcResize have a "bug"?
Code:function icResize(clip "source", int "newwidth", int "newheight", bool "discardhalf") { discardhalf = default(discardhalf, false) src1=source.separatefields() src2=discardhalf ? src1.selectevery(4, 0, 3) : src1 Shift = (src2.GetParity() ? -0.25 : 0.25) * (src2.Height()/Float(newheight/2) - 1.0) E = src2.SelectEven() .LanczosResize(NewWidth, NewHeight/2, 0, Shift) O = src2.SelectOdd() .LanczosResize(NewWidth, NewHeight/2, 0, -Shift) Echr = src2.SelectEven() .LanczosResize(NewWidth, NewHeight/2, 0, 2*Shift) Ochr = src2.SelectOdd() .LanczosResize(NewWidth, NewHeight/2, 0, -2*shift) dst1=Interleave(E, O) dst2=dst1.IsYV12() ? MergeChroma(Interleave(Echr, Ochr)) : dst1 dst2.Weave() }