View difference between Paste ID: hiBwTHrK and Aiyg84Zy
SHOW: | | - or go back to the newest paste.
1-
LoadCPlugin("TASEncodingPackage/programs/freesub.dll")
1+
2
\   clip clp,
3-
scale=1  # 1 or 8
3+
4
\    int "first_frame",
5-
blankclip(1, 256*scale, 224*scale, color=$00ff00ff)
5+
6-
ng_sub()
6+
7-
bilinearresize(640, 480)
7+
8
\    int "x",
9
\    int "y",
10
\ string "font",
11
\    int "size",
12
\    int "align",
13
\    int "lsp",
14
\    int "font_width",
15
\    int "halo_width",
16
\    int "halo_height",
17
\    int "x_scale",
18
\    int "y_scale",
19
\    int "text_color8",
20
\    int "halo_color8",
21
\    int "font8",
22
\    int "spc8",
23
\    int "lsp8",
24
\    int "align8",
25
\    int "x8",
26
\    int "y8",
27
\    int "size8",
28
\    int "font_width8",
29
\    int "font_angle8",
30
\ string "halo8",
31
\ string "shadow8"
32
\){
33
34
#Version 3 2012/12/1
35
36
    text = default( text, "This is a tool-assisted recording.\n" + \
37
                          "For details, visit http://TASVideos.org/")
38
    first_frame = default(first_frame, 0)
39
    last_frame  = default( last_frame, first_frame + 299)
40
    text_color  = default( text_color, $00DDDDDD)
41
    halo_color  = default( halo_color, $80000000)
42-
#Version 1 2012/11/30
42+
    font        = default(       font, "helvB12")
43
    font_real   = "C:/mf/NGcode/TASEncodingPackage/fonts/"+ font +".bdf"
44
    lsp         = default(        lsp, 0)
45
    x_scale     = default(    x_scale, 8)
46
    y_scale     = default(    y_scale, x_scale)
47
    align       = default(      align, 8)
48
    align_x = align % 3
49
    align_y = (align - 1) / 3
50-
    font        = default(       font, "TASEncodingPackage/fonts/helvB12.bdf")
50+
    default_x = (align_x == 0) ? clp.width - 8 : \
51
                (align_x == 2) ? clp.width / 2 : 8
52
    default_y = (align_y == 0) ? clp.height - 8 : \
53
                (align_y == 1) ? clp.height / 2 : 8
54
    x8 = (defined(x)) ? default(x8, x*x_scale) : default_x
55
    y8 = (defined(y)) ? default(y8, y*y_scale) : default_y
56
    x           = default(          x, default_x)
57-
    default_x = (align_x == 0) ? clp.width - 2 : \
57+
58-
                (align_x == 2) ? clp.width / 2 : 2
58+
59-
    default_y = (align_y == 0) ? clp.height - 2 : \
59+
60-
                (align_y == 1) ? clp.height / 2 : 2
60+
61
    halo_height = default(halo_height, size)
62
63
    text_color8 = default(text_color8, text_color)
64
    halo_color8 = default(halo_color8, halo_color)
65
    font8       = default(      font8, "Ariel")
66
    spc8        = default(       spc8, 0)
67
    lsp8        = default(       lsp8, lsp*y_scale)
68
    align8      = default(     align8, align)
69
    size8       = default(      size8, 112)
70
    font_width8 = default(font_width8, 0)
71
    font_angle8 = default(font_angle8, 0)
72
    halo_radius8 = 0
73
    mode8        = ""
74
    
75
#OO@
76
#   OO@
77
#      O@
78
#        @
79
#         @
80
#          @
81
#          O
82
#           @
83
#           O
84
#           O
85
#            @
86
#            O
87
#@           O
88
89
#using an unfilled circle reduces the number of calculations
90
#by a factor of ~16
91
    circle_12_jagged="0 0 "+\
92
        "  2 12   5 11   7 10   8 9 "+\
93
        "  12 2   11 5   10 7   9 8 "+\
94
        " -2 12  -5 11  -7 10  -8 9 "+\
95
        " -12 2  -11 5  -10 7  -9 8 "+\
96
        "-2 -12 -5 -11 -7 -10 -8 -9 "+\
97
        "-12 -2 -11 -5 -10 -7 -9 -8 "+\
98-
    circle_12="0 0 "+\
98+
99
        " 12 -2  11 -5  10 -7  9 -8 "
100
101
circle_12="0 0 "+\
102
"12 0 0 12 -12 0 0 -12 "+\
103
"1 12 2 12 3 11 4 11 5 11 6 10 7 10 8 9 "+\
104
"12 1 12 2 11 3 11 4 11 5 10 6 10 7 9 8 "+\
105
"-1 12 -2 12 -3 11 -4 11 -5 11 -6 10 -7 10 -8 9 "+\
106
"-12 1 -12 2 -11 3 -11 4 -11 5 -10 6 -10 7 -9 8 "+\
107
"-1 -12 -2 -12 -3 -11 -4 -11 -5 -11 -6 -10 -7 -10 -8 -9 "+\
108
"-12 -1 -12 -2 -11 -3 -11 -4 -11 -5 -10 -6 -10 -7 -9 -8 "+\
109
"1 -12  2 -12 3 -11 4 -11 5 -11 6 -10 7 -10 8 -9 "+\
110-
    sub = FreeSub(clp, text, x, y, first_frame, last_frame, font, \
110+
"12 -1  12 -2 11 -3 11 -4 11 -5 10 -6 10 -7 9 -8 "
111-
        size, text_color, halo_color, align, lsp, font_width, \
111+
112-
        halo_width, halo_height)
112+
113
    shadow8      = default(        shadow8, " -4 -8")
114
115
    sub = FreeSub(clp, text, x, y, first_frame, last_frame, \
116
        font_real, size, text_color, halo_color, align, lsp, \
117
        font_width, halo_width, halo_height)
118
119
    sub_HD = ng_bighalo(clp, text, x8, y8, first_frame, last_frame, \
120
        font8, size8, text_color8, halo_color8, align8, spc8, lsp8, \
121
        font_width8, font_angle8, halo_radius8, mode8, halo8, shadow8)
122
        
123
    (clp.height >= 1080) ? sub_HD : sub
124
}
125
126
function ng_bighalo(
127
\   clip clp,
128
\ string text,
129
\  float "x",
130
\  float "y",
131
\    int "first_frame",
132
\    int "last_frame",
133
\ string "font",
134
\  float "size",
135
\    int "text_color",
136
\    int "halo_color",
137
\    int "align",
138
\    int "spc",
139
\    int "lsp",
140
\  float "font_width",
141
\  float "font_angle",
142
\    int "halo_radius",
143
\ string "mode",
144
\ string "halo",
145
\ string "shadow"
146
\){
147
148
#Version 15 2012/11/30
149
# - drop shadow added
150
# - halo_radius still works, but calculating the points of 
151
#   a hollow circle for halo is much faster
152
# - mode is depricated since memo-ing isn't as needed
153
154
    first_frame = default(first_frame, 0)
155
    last_frame  = default( last_frame, first_frame + 299)
156
    font        = default(       font, "Ariel")
157
    size        = default(       size, 112)
158
    x           = default(          x, -1)
159
    y           = default(          y, -1)
160
    text_color  = default( text_color, $00DDDDDD)
161
    halo_color  = default( halo_color, $80000000)
162
    align       = default(      align, 5)
163
    spc         = default(        spc, 0)
164
    lsp         = default(        lsp, 0)
165
    font_width  = default( font_width, 0)
166
    font_angle  = default( font_angle, 0)
167
    halo_radius = default(halo_radius, 12)
168
    mode        = default(       mode, "depricated")
169
    halo        = default(       halo, mt_circle(halo_radius))
170
    shadow      = default(     shadow, " -4 -8")
171
    w           = clp.width
172
    h           = clp.height
173
174
    invis = BlankClip(1, w, h, pixel_type="YV12")
175
    tm = Subtitle(invis, text, x, y, 0, 0, font, size, $00FFFFFF,\
176
        0, align, spc, lsp, font_width, font_angle)
177
    text_mask = tm.mt_expand(mode="0 0 "+shadow, chroma="-128")
178
    halo_mask = text_mask.mt_expand(mode=halo, chroma="-128")
179
    
180
    h_color = BitAND(halo_color, $00FFFFFF)
181
    t_color = BitAND(text_color, $00FFFFFF)
182
    h_alpha = 255 - BitRShiftU(BitAND(halo_color, $FF000000), 24)
183
    t_alpha = 255 - BitRShiftU(BitAND(text_color, $FF000000), 24)
184
    lut_str = string(h_alpha)+ " x * 255 / " +string(t_alpha)+\
185
              " " +string(h_alpha)+ " - y * 255 / +"
186
187
    alpha_mask = mt_lutxy(halo_mask, text_mask, lut_str)
188
189
    hc = BlankClip(1, w, h, color=h_color)
190
    tc = Subtitle(hc, text, x, y, 0, 0, font, size, t_color,\
191
        0, align, spc, lsp, font_width, font_angle)
192
    overlay = tc.Mask(alpha_mask.ConvertToRGB32())
193
    
194
    clp.ApplyRange(first_frame, last_frame, "Layer", overlay)
195
}