I have a clip that has two sequential frames that are bad; frames 898 and 899.
ReplaceSingle usually does a great job, but when two bad frames are sequential, it doesn't work well.
Is there another tool or method to solve this?
Perhaps eliminate one of the bad frames completely and the use ReplaceSingle to replace the one bad left frame that was left.
Replace single is meant to replace single frames, not multiple frames in a row.
It uses the adjacent frames as base to create the interpolation to replace the existing frame.
One would need something like a 'ReplaceMultipleFrames' script, the current frame can't do this atm. .
Maybe I'll find to write a script for this tomorrow, since I probably will be afk. for most of the day, today.
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Thank you, thank you. A great new tool you've just added.
Already looks a whole lot better, but I think there is a small issue. The two bad frame 898 and 899 now look great, but it appears that now frame 899 and 900 are identical.
I have another scenario which I'm not sure how to solve, please assist.
Its a bad transition between scenes.
up to Frame 7361 everything looks good, Frame 7362 is the end of scene, image shifts up and the frame looks bad and 7363 is the new scene also looks good
Is there a way to make frame 7362 become a duplicate to frame 7361, instead of using ReplaceSingle interpolation between 7361 & 7363
19.05.2025, 14:54 (This post was last modified: 19.05.2025, 14:54 by Selur.)
Do:
# replaces frame x +1 with a duplicate of x
def duplicate(clip: vs.VideoNode, x: int) -> vs.VideoNode:
part1 = core.std.Trim(clip, 0, x) # Frames 0 to x (inclusive)
replacement = core.std.Trim(clip, x, x) # Only frame x (duplicate)
part3 = core.std.Trim(clip, x + 2, None) # Frames x+2 to end
return core.std.Splice([part1, replacement, part3], mismatch=True)
return duplicate(clip, 7361)
is faster and works.
If you wanted to duplicate 7361 and 7447 you would use:
# replaces frame x +1 with a duplicate of x
def duplicate(clip: vs.VideoNode, x: int) -> vs.VideoNode:
part1 = core.std.Trim(clip, 0, x) # Frames 0 to x (inclusive)
replacement = core.std.Trim(clip, x, x) # Only frame x (duplicate)
part3 = core.std.Trim(clip, x + 2, None) # Frames x+2 to end
return core.std.Splice([part1, replacement, part3], mismatch=True)
clip = duplicate(clip, 7361)
clip = duplicate(clip, 7447)
return clip
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.