![]() |
|
My video - Printable Version +- Selur's Little Message Board (https://forum.selur.net) +-- Forum: Hybrid - Support (https://forum.selur.net/forum-1.html) +--- Forum: Problems & Questions (https://forum.selur.net/forum-3.html) +--- Thread: My video (/thread-4482.html) |
RE: My video - Vhs-Digital-Buddy - 15.09.2026 That is much better. Thank you. Will give it a try. RE: My video - Selur - 15.09.2026 Side note: the initial processing of the script will take quite a while, but the processing should be okay. I'll also look into using SVP or rife instead of mv for the interpolation. (probably tomorrow) RE: My video - Selur - 16.09.2026 using: # Separate branch used only to calculate properties.
stats = core.std.PlaneStats(clip, plane=0)
def set_interp_flag(n, f):
f = f.copy()
use = False
if 0 < n < clip.num_frames - 1:
cur = f.props["PlaneStatsAverage"]
prev = stats.get_frame(n - 1).props["PlaneStatsAverage"]
nxt = stats.get_frame(n + 1).props["PlaneStatsAverage"]
use = cur > prev and cur > nxt
f.props["_UseInterp"] = int(use)
return f
# Input = original frames, prop source = stats
flagged = core.std.ModifyFrame(clip, stats, set_interp_flag)
org = flagged
import filldrops
core.std.LoadPlugin(path="%FILTERPATH%/FrameFilter/RIFE/librife.dll")
clip = filldrops.ReplaceFlagged(flagged, method="rife")Just noticed I forgot to upload the updated filldrops.py I used. => uploaded a new dev which includes it. Cu Selur RE: My video - Vhs-Digital-Buddy - 17.09.2026 Thanks Selur. Been a hectic week. Will have a look over the weekend. RE: My video - Selur - 17.09.2026 Uploaded a new dev with a reworked "filldrops.ReplaceFlagged" which should be a lot faster. ![]() so using: # Separate branch used only to calculate properties.
stats = core.std.PlaneStats(clip, plane=0)
# Calculate which frames need replacing
# A frame is marked for replacement if its average luma is higher than the previous and below the next.
# This way one frame flashes should get detected.
def set_interp_flag(n, f):
f = f.copy()
use = False
if 0 < n < clip.num_frames - 1:
cur = f.props["PlaneStatsAverage"]
prev = stats.get_frame(n - 1).props["PlaneStatsAverage"]
nxt = stats.get_frame(n + 1).props["PlaneStatsAverage"]
use = cur > prev and cur > nxt
f.props["_UseInterp"] = int(use)
return f
# Input = original frames, prop source = stats
flagged = core.std.ModifyFrame(clip, stats, set_interp_flag)
# do the actual replacement of the flagged frames
import filldrops
clip = filldrops.ReplaceFlagged(flagged, method="mv")![]() Remember to also add Denoiser->QTGMC. (Maybe I'll add some ui elements for this into the Hybrid next week.) Cu Selur RE: My video - Vhs-Digital-Buddy - 17.09.2026 That would be great. I've always preferred UI instead of coding. That would help a lot. RE: My video - Selur - 18.09.2026 Uploaded a new dev with ui support for this. I rewrote it a bit to make it more generic and added it under "Filtering->Vapoursynth->Frame->Stabilize->FixFlicker". Try:
If you have different sources you might have to adjust the FixFlicker values used. (use Vapoursynth Preview with debug enabled) If you notice interpolation artifacts in the replaced frames, try a different interpolation method. Cu Selur RE: My video - Vhs-Digital-Buddy - 19.09.2026 Do I keep artifacts and small de-flicker settings I had previously, or do I just go with what's in your last post ? RE: My video - Selur - 19.09.2026 You should not need them, but use the Vapoursynth Preview to decide. You can additionally use other filters&co depending on your preferences. Cu Selur RE: My video - Vhs-Digital-Buddy - 20.09.2026 Getting the following error when opening Hybrid. The new dev version. https://ibb.co/7dkzNN4z However, program opens nonetheless. Busy with a new clip now. I uploaded two files here https://drive.google.com/drive/folders/1i42uxV3NoCkgqaiKTuU8dkiE17hNWtjg?usp=drive_link recording.avi - untouched recording_applied_filters.avi - as the name says. De-interlaced nicely, but flickering remains. |