Log in

View Full Version : Fix for color flickering?


VideoMilk78
10th June 2025, 02:27
I've been stuck on trying to fix this flickering for a while, in a previous thread from days ago I was given small_deflicker which does not help with this color flickering unfortunately.

sample
https://112.gigafile.nu/0615-cfa53c90abd5417be623defceeacae0be

Selur
11th June 2025, 17:08
Seems like only the U channel is flickering. Some motion and scene change aware averaging might work,.... (maybe some function ment for luma flickering could work by only applying it on the U channel)

VideoMilk78
11th June 2025, 17:54
Seems like only the U channel is flickering. Some motion and scene change aware averaging might work,.... (maybe some function ment for luma flickering could work by only applying it on the U channel)

Any idea how I might go about making something for this?

I tried separating the planes and deflickering the u and merging but this didn't work

Selur
11th June 2025, 18:39
Sadly no. :)

VideoMilk78
11th June 2025, 18:47
I separated R,G, and B and it seems the culprit is the blu channel

https://7.gigafile.nu/0617-mc30cad102d17decec6b401a097e4b2cb
stacked in order of rgb

Selur
11th June 2025, 19:14
Ah, good catch. It's not the U, but the B channel. :) So someone messed up while working in RGB on the input.

wonkey_monkey
11th June 2025, 21:46
If you convert to RGB, all the channels exhibit some flickering, but B has the most. But if you leave it as YUV, Y has no flickering. So I don't think it was an RGB processing thing. It's just U is flickering a lot and V is only flickering a little.

Selur
12th June 2025, 13:37
Even when staying in YUV, the main problem is: How to fix the flickering. Maybe there is a pattern?

VideoMilk78
12th June 2025, 16:16
I'm gonna try matching the color of the blue channel to a green channel using Dr Dre's color matching (already tried gammatch with no luck) and merge like normal

source
r=extractr(source)
g=extractg(source)
b=g.cube(lut)
merge(rgb)

hello_hello
12th June 2025, 20:12
You could try just deflickering the U channel, although after playing around a little I didn't find a way to do it perfectly. It's easy enough to remove the flicker, but doing it without messing with the color at all is a different story. Maybe it'd work better doing the same thing after converting to RGB.

Z = last
Y = ExtractY()
U = ExtractU().Deflicker(percent=100, lag=150, scene=40)
V = ExtractV()
CombinePlanes(Y,U,V, planes="YUV", sample_clip=Z)

This defickers it completely, but as it sets the U plane to a constant value it does change the color.

Z = last
G = Z.Greyscale()
Y = Z.ExtractY()
U = G.ExtractU()
V = Z.ExtractV()
CombinePlanes(Y,U,V, planes="YUV", sample_clip=Z)

Selur
13th June 2025, 16:59
Nice!

Z = last
Y = ExtractY()
U = ExtractU().Deflicker(percent=100, lag=150, scene=40)
V = ExtractV()
CombinePlanes(Y,U,V, planes="YUV", sample_clip=Z)
hmm, trying to do this in Vapoursynth with the Avisynth Plugin

# requires colorformat YUV444P8
core.avs.LoadPlugin("F:/Hybrid/64bit/Avisynth/avisynthPlugins/Deflicker.dll")
Y, U, V = core.std.SplitPlanes(clip)
U = core.resize.Bicubic(clip=U, format=vs.YUV444P8)
U = core.avs.Deflicker(U, percent=100, lag=150, scene=40)
clip = core.std.ShufflePlanes(clips=[Y, U, V], planes=[0, 0, 0], colorfamily=vs.YUV)

(I first tried without the 'U = core.resize.Bicubic(clip=U, format=vs.YUV444P8)' but that crashed, Vapoursynth without an showing an error.)
The output is different and still flickering a lot, doesn't seem useful to me. :/

Z = last
G = Z.Greyscale()
Y = Z.ExtractY()
U = G.ExtractU()
V = Z.ExtractV()
CombinePlanes(Y,U,V, planes="YUV", sample_clip=Z)
Okay, that replaces the U channel with the gray scale version. I like the idea.

That should be:

# requires colorformat YUV444P8
Y, U, V = core.std.SplitPlanes(clip)
U = core.resize.Bicubic(clip=clip, format=vs.GRAY8)
clip = core.std.ShufflePlanes(clips=[Y, U, V], planes=[0, 0, 0], colorfamily=vs.YUV)

in Vapoursynth.

That looks like the more watchable solution to me. :)
https://i.ibb.co/fY6QbhCM/grafik.png (https://ibb.co/zh9N1ySs)

Cu Selur

real.finder
13th June 2025, 18:28
try
SMDegrain(tr=5, thSAD=3000, plane=3, chroma=false, prefilter=2)

or maybe more advanced

SMDegrain(tr=5, thSAD=3000, plane=1, chroma=false, prefilter=2, Globals=2)
SMDegrain(tr=5, thSAD=1000, plane=2, chroma=false, prefilter=2, Globals=1)

Selur
13th June 2025, 19:42
Uhh, that works nicely. Good catch. (Never thought about SMDegrain for something like that.)

real.finder
13th June 2025, 20:29
Uhh, that works nicely. Good catch. (Never thought about SMDegrain for something like that.)

seems you forget/didnt note this :D https://forum.doom9.org/showthread.php?p=1788404#post1788404

anyway, it's the mvtools power, which is used even in qtgmc (We can say that it is the backbone of many things)

as aside note, I am thinking about try/using DTL version of mvtools (dont know why it not merged with pinterf version of mvtools yet)

Selur
13th June 2025, 21:46
as aside note, I am thinking about try/using DTL version of mvtools (dont know why it not merged with pinterf version of mvtools yet)
Hoping that one day, there will be a Vapoursynth&Avisynth version which incorporates:

https://github.com/dubhater/vapoursynth-mvtools
https://github.com/IFeelBloated/vapoursynth-mvtools-sf
https://github.com/pinterf/mvtools/
https://github.com/DTL2020/mvtools

:D

VideoMilk78
13th June 2025, 22:17
I ended up making a LUT that applied blue levels to the green channel use Dr Dre's color correction tool and merged r,g,g