Dup Filter for Avisynth
(Version for Avisynth 2.5)

This plugin for Avisynth implements a robust duplicate frame detector. It is initially intended as a test bed for a new frame differencing algorithm, but to make it a useful filter in its own right, a copy feature has been implemented, whereby a frame that is determined to be close enough to its predecessor to be considered a duplicate will be replaced by a copy of the predecessor. This can significantly reduce the size of encoded clips with virtually no visual effect. It's a free lunch! ('Marc FD' first implemented this copying functionality.)

The filter also now provides the capability to replace frames with a blend of all the duplicates, providing a valuable noise reduction.

You can configure the percentage difference at which a duplicate is declared. This gives you control over the extent of frame duplication, and therefore of amount of bitrate reduction.

The filter provides a debug mode that eases configuration and makes it easy to see what the filter is deciding. Here is an example of this mode in action:

The filter requires YUY2 or YV12 input.

The justification for the filter is simple. Many duplicate detectors are incapable of adapting to changes in the luminance levels of the various scenes in a clip, and they are badly affected by noise. They have delicate absolute thresholds that must be set by the user. This filter attempts to solve all of these problems.

Version 2.30 [Source code]

Version 2.30 fixes a minor blending bug and adds configurable window size for the change detection (changes by Fizick).

Version 2.22 fixes two bugs: 1) crashing of VirtualDub (or other application that opens the Avisynth script) upon close, and 2) blend=true was broken.

Version 2.21 adds a parameter called log that allows the debug information to be dumped to a text file.

Version 2.20 beta 1 provides low-level optimizations and fixes a problem whereby the frame blending was not completely correct.

Version 2.01 fixes a bug that caused crashes when Dup was followed by filters that request out-of-order frames, such as temporal smoothers.

Version 2.00 now requires Avisynth 2.5 and supports both YUY2 and YV12. It also provides a new blend option, by which the copy frame can be generated from a blend of all the frames in the string of duplicates.

Version 1.4 fixes a crashing bug resulting when the frame dimensions are not a multiple of 32 and the box drawn by show=true is partially off the frame.

Version 1.3 was not released.

Version 1.2 fixes a bug that caused overflow of the Avisynth stack in some circumstances.

Version 1.1 improves the detection algorithm, fixes problems detecting changes near the frame borders, improves the speed, and shortens overlaid strings to prevent wrap around.

Version 1.0 was the first released version.

Copyright (C) 2002-2006, Donald A. Graft, All Rights Reserved.

[up to home page]