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
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.