Skip to content

blending

Functions:

  • deblend

    Automatically deblends if normal field matching leaves 2 blends every 5 frames. Adopted from jvsfunc.

  • deblend_bob

    Stronger version of deblend that uses a bobbed clip to deblend. Adopted from jvsfunc.

  • deblend_fix_kf

    Should be used after deblend_bob or deblend to fix scene

  • deblending_helper

    Helper function to select a deblended clip pattern from a fieldmatched clip.

deblend

deblend(
    clip: VideoNode,
    fieldmatched: VideoNode | None = None,
    decomber: VSFunctionNoArgs | None = vinverse,
    func: FuncExcept | None = None,
    **kwargs: Any
) -> VideoNode

Automatically deblends if normal field matching leaves 2 blends every 5 frames. Adopted from jvsfunc.

Parameters:

  • clip

    (VideoNode) –

    Input source to fieldmatching.

  • fieldmatched

    (VideoNode | None, default: None ) –

    Source after field matching with vfm, must have field=3 and possibly low cthresh.

  • decomber

    (VSFunctionNoArgs | None, default: vinverse ) –

    Optional post processing decomber after deblending and before pattern matching.

  • func

    (FuncExcept | None, default: None ) –

    Function returned for custom error handling. This should only be set by VS package developers.

Returns:

  • VideoNode

    Deblended clip.

Source code in vsdeinterlace/blending.py
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def deblend(
    clip: vs.VideoNode,
    fieldmatched: vs.VideoNode | None = None,
    decomber: VSFunctionNoArgs | None = vinverse,
    func: FuncExcept | None = None,
    **kwargs: Any,
) -> vs.VideoNode:
    """
    Automatically deblends if normal field matching leaves 2 blends every 5 frames. Adopted from jvsfunc.

    Args:
        clip: Input source to fieldmatching.
        fieldmatched: Source after field matching with [vfm][vsdeinterlace.vfm], must have field=3 and possibly low
            cthresh.
        decomber: Optional post processing decomber after deblending and before pattern matching.
        func: Function returned for custom error handling. This should only be set by VS package developers.

    Returns:
        Deblended clip.
    """
    func = func or deblend

    deblended = norm_expr(shift_clip_multi(clip, (-1, 2)), "z a 2 / - y x 2 / - +", func=func)

    if decomber:
        deblended = decomber(deblended, **kwargs)

    if fieldmatched:
        deblended = deblending_helper(deblended, fieldmatched, func=func)

    return deblended

deblend_bob

deblend_bob(
    bobbed: VideoNode,
    fieldmatched: VideoNode | None = None,
    func: FuncExcept | None = None,
) -> VideoNode

Stronger version of deblend that uses a bobbed clip to deblend. Adopted from jvsfunc.

Parameters:

  • bobbed

    (VideoNode) –

    Bobbed source.

  • fieldmatched

    (VideoNode | None, default: None ) –

    Source after field matching, must have field=3 and possibly low cthresh.

  • func

    (FuncExcept | None, default: None ) –

    Function returned for custom error handling. This should only be set by VS package developers.

Returns:

  • VideoNode

    Deblended clip.

Source code in vsdeinterlace/blending.py
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
def deblend_bob(
    bobbed: vs.VideoNode, fieldmatched: vs.VideoNode | None = None, func: FuncExcept | None = None
) -> vs.VideoNode:
    """
    Stronger version of [deblend][vsdeinterlace.deblend] that uses a bobbed clip to deblend. Adopted from jvsfunc.

    Args:
        bobbed: Bobbed source.
        fieldmatched: Source after field matching, must have field=3 and possibly low cthresh.
        func: Function returned for custom error handling. This should only be set by VS package developers.

    Returns:
        Deblended clip.
    """
    func = func or deblend_bob

    ab0, bc0, c0 = shift_clip_multi(bobbed[::2], (0, 2))
    a1, ab1, bc1 = shift_clip_multi(bobbed[1::2])

    deblended = norm_expr([a1, ab1, ab0, bc1, bc0, c0], "y x - z + b c - a + + 2 /", func=func)

    if fieldmatched:
        return deblending_helper(deblended, fieldmatched, func=func)

    return deblended

deblend_fix_kf

deblend_fix_kf(
    deblended: VideoNode,
    fieldmatched: VideoNode,
    func: FuncExcept | None = None,
) -> VideoNode

Should be used after deblend_bob or deblend to fix scene changes. Adopted from jvsfunc.

Parameters:

  • deblended

    (VideoNode) –

    Deblended clip.

  • fieldmatched

    (VideoNode) –

    Fieldmatched clip used to debled, must have field=3 and possibly low cthresh.

  • func

    (FuncExcept | None, default: None ) –

    Function returned for custom error handling. This should only be set by VS package developers.

Returns:

  • VideoNode

    Deblended clip with fixed blended keyframes.

Source code in vsdeinterlace/blending.py
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
def deblend_fix_kf(deblended: vs.VideoNode, fieldmatched: vs.VideoNode, func: FuncExcept | None = None) -> vs.VideoNode:
    """
    Should be used after [deblend_bob][vsdeinterlace.deblend_bob] or [deblend][vsdeinterlace.deblend] to fix scene
    changes. Adopted from jvsfunc.

    Args:
        deblended: Deblended clip.
        fieldmatched: Fieldmatched clip used to debled, must have field=3 and possibly low cthresh.
        func: Function returned for custom error handling. This should only be set by VS package developers.

    Returns:
        Deblended clip with fixed blended keyframes.
    """
    func = func or deblend_fix_kf

    shifted_clips = shift_clip_multi(deblended)
    prop_srcs = shift_clip_multi(fieldmatched, (0, 1))

    return core.akarin.Select(shifted_clips, prop_srcs, "x._Combed x.VFMSceneChange and y.VFMSceneChange 0 2 ? 1 ?")

deblending_helper

deblending_helper(
    deblended: VideoNode,
    fieldmatched: VideoNode,
    length: int = 5,
    func: FuncExcept | None = None,
) -> VideoNode

Helper function to select a deblended clip pattern from a fieldmatched clip.

Parameters:

  • deblended

    (VideoNode) –

    Deblended clip.

  • fieldmatched

    (VideoNode) –

    Source after field matching, must have field=3 and possibly low cthresh.

  • length

    (int, default: 5 ) –

    Length of the pattern.

  • func

    (FuncExcept | None, default: None ) –

    Function returned for custom error handling. This should only be set by VS package developers.

Returns:

  • VideoNode

    Deblended clip.

Source code in vsdeinterlace/blending.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def deblending_helper(
    deblended: vs.VideoNode, fieldmatched: vs.VideoNode, length: int = 5, func: FuncExcept | None = None
) -> vs.VideoNode:
    """
    Helper function to select a deblended clip pattern from a fieldmatched clip.

    Args:
        deblended: Deblended clip.
        fieldmatched: Source after field matching, must have field=3 and possibly low cthresh.
        length: Length of the pattern.
        func: Function returned for custom error handling. This should only be set by VS package developers.

    Returns:
        Deblended clip.
    """
    func = func or deblending_helper

    inters = telecine_patterns(fieldmatched, deblended, length, func)
    inters += [shift_clip(inter, 1) for inter in inters]

    prop_srcs = shift_clip_multi(fieldmatched, (0, 1))
    expr_clips = inters + prop_srcs

    return core.akarin.Select(expr_clips, prop_srcs, f"x._Combed N {length} % y._Combed 0 {length} ? + {len(inters)} ?")