SHOW:
|
|
- or go back to the newest paste.
1 | - | # FixChromaBleedingMod v1.34 |
1 | + | # FixChromaBleedingMod v1.35 |
2 | ||
3 | Function FixChromaBleedingMod (clip input, int "cxShift", int "cyShift", float "thr", float "strength", bool "f", float "opacity", bool "n", bool "xysh", bool "Bic") { | |
4 | ||
5 | xShift = default ( cxShift, -4 ) | |
6 | yShift = default ( cyShift, -4 ) | |
7 | thr = default ( thr, 4.0 ) | |
8 | stre = default ( strength, 0.8 ) | |
9 | f = default ( f, true ) | |
10 | n = default ( n, false ) | |
11 | sh = default ( xysh, false ) | |
12 | Bic = default ( Bic, false ) | |
13 | opacity = default ( opacity, 1 ) | |
14 | ||
15 | # prepare to work on the V channel and reduce to speed up and filter noise | |
16 | vch = VersionNumber() < 2.60 ? input.tweak(sat=thr).VtoY : input.tweak(sat=thr).VtoY8 | |
17 | area = f ? VersionNumber() < 2.60 ? vch.ConvertToyv12.ReduceBy2 : vch.ReduceBy2 : n ? VersionNumber() < 2.60 ? vch.ConvertToyv12.Blur(1) : vch.Blur(1) : VersionNumber() < 2.60 ? vch.ConvertToyv12 : vch | |
18 | ||
19 | # select and normalize both extremes of the scale | |
20 | red = area.Levels(255,1.0,255,255,0) | |
21 | blue = area.Levels(0,1.0,0,0,255) | |
22 | ||
23 | # merge both masks | |
24 | maskc = n ? MergeLuma(red, blue, 0.5).Levels(250,1.0,250,255,0) : f ? MergeLuma(red, blue, 0.5).Levels(250,1.0,250,255,0) : MergeLuma(red, blue, 0.5).Blur(1).Levels(250,1.0,250,255,0) | |
25 | ||
26 | # expand to cover beyond the bleeding areas and shift to compensate the resizing | |
27 | maskc = maskc.mt_edge("0 0 0 1 0 0 0 0 0", 0,255,0,255).mt_edge("1 1 1 1 1 1 0 0 0", 0,255,0,255) | |
28 | ||
29 | # back to full size and binarize (also a trick to expand) | |
30 | maskc = f ? Bic ? maskc.BicubicResize(Width(vch),Height(vch)).Levels(10,1.0,10,0,255) : maskc.BilinearResize(Width(vch),Height(vch)).Levels(10,1.0,10,0,255).mt_inflate() : maskc.Levels(10,1.0,10,0,255).mt_inflate() | |
31 | ||
32 | # prepare a version of the image that has its chroma shifted and less saturated | |
33 | input_c = sh ? input.ChromaShiftSP(x=xShift,y=yShift).tweak(sat=stre) : input.ChromaShift(C=xShift).tweak(sat=stre) | |
34 | ||
35 | # combine both images using the mask | |
36 | - | fu = VersionNumber() < 2.60 ? isyuy2(input) ? input.utoy.ConvertToyuy2.overlay(input_c.utoy.ConvertToyuy2,mask=maskc,mode="blend",opacity=opacity) : input.utoy.ConvertToyv12.overlay(input_c.utoy.ConvertToyv12,mask=maskc,mode="blend",opacity=opacity) : input.utoy8.overlay(input_c.utoy8,mask=maskc,mode="blend",opacity=opacity) |
36 | + | fu = VersionNumber() < 2.60 ? input.utoy.overlay(input_c.utoy,mask=maskc,mode="blend",opacity=opacity) : input.utoy8.overlay(input_c.utoy8,mask=maskc,mode="blend",opacity=opacity) |
37 | - | fv = VersionNumber() < 2.60 ? isyuy2(input) ? input.vtoy.ConvertToyuy2.overlay(input_c.vtoy.ConvertToyuy2,mask=maskc,mode="blend",opacity=opacity) : input.vtoy.ConvertToyv12.overlay(input_c.vtoy.ConvertToyv12,mask=maskc,mode="blend",opacity=opacity) : input.vtoy8.overlay(input_c.vtoy8,mask=maskc,mode="blend",opacity=opacity) |
37 | + | fv = VersionNumber() < 2.60 ? input.vtoy.overlay(input_c.vtoy,mask=maskc,mode="blend",opacity=opacity) : input.vtoy8.overlay(input_c.vtoy8,mask=maskc,mode="blend",opacity=opacity) |
38 | return YToUV(fU, fV, VersionNumber() < 2.60 ? input : input.ConvertToy8) | |
39 | } |