OwO

this page under construction

So a pretty nice trailer for the third Evangelion movie was uploaded to YouTube (a mere five years after the movie). Unfortunately it has the movie name plastered on it the whole time, so I recreated the video. Can’t upload it to YouTube though, it’s blocked instantly. So I’ll just make the Vapoursynth source available, in case you have the Coalgirls or UTW-THORA release of this movie (which I obviously don’t because that’d be totally illegal).

Random notes

Arguments to vspipe

Required Vapoursynth plugins


import functools
import vapoursynth as vs


try:
    aspect_ratio = aspect_ratio.decode()
except NameError:
    aspect_ratio = '2.35:1'
if aspect_ratio not in ('2.35:1', '16:9'):
    raise ValueError("invalid aspect ratio")

try:
    waifu2x = int(waifu2x)
except NameError:
    waifu2x = 0
w2xscale = waifu2x and 2 or 1

def waifu2x_fun_placeholder(clip, *args, **kwargs):
    orig_format = clip.format
    clip = vs.core.fmtc.resample(clip, scale=2)
    clip = vs.core.fmtc.bitdepth(clip, csp=orig_format)
    return clip

# Fast upscaler for testing
# waifu2x_fun = waifu2x_fun_placeholder
# Actual waifu2x
waifu2x_fun = functools.partial(vs.core.w2xc.Waifu2x, noise=0)

scenes = [              #   start/movie   start/pv
    (113334, 113397),   #  01:18:42.250  00:37.838
    (113070, 113090),   #  01:18:31.250  00:41.041
    ( 29117,  29178),   #  00:20:13.208  00:41.875
    (111660, 111712),   #  01:17:32.458  00:44.411
    (111545, 111570),   #  01:17:27.708  00:46.580
    (118157, 118176),   #  01:22:03.208  00:47.648
    (117734, 117757),   #  01:21:45.583  00:48.415
    (  9877,   9905),   #  00:06:51.542  00:49.383
    (120289, 120354),   #  01:23:32.042  00:50.550
    ( 29596,  29616),   #  00:20:33.167  00:54.888
    ( 30041,  30065),   #  00:20:51.708  00:55.722
    ( 30109,  30140),   #  00:20:54.542  00:56.723
    ( 24995,  25018),   #  00:17:21.458  00:58.025
    ( 45760,  45779),   #  00:31:46.667  00:58.992
    ( 45803,  45836),   #  00:31:48.458  00:59.760
    ( 45746,  45760),   #  00:31:46.083  01:01.161
    ( 16218,  16242),   #  00:11:15.750  01:02.562
    ( 95285,  95310),   #  01:06:10.208  01:03.563
    (  5231,   5253),   #  00:03:37.958  01:04.598
    (  7386,   7427),   #  00:05:07.750  01:05.532
    (107054, 107075),   #  01:14:20.583  01:07.234
    ( 45951,  45982),   #  00:31:54.625  01:08.101
    ( 43587,  43607),   #  00:30:16.125  01:09.403
    (123852, 123878),   #  01:26:00.500  01:10.237
    (117961, 117991),   #  01:21:55.042  01:11.338
    ( 29378,  29396),   #  00:20:24.083  01:12.573
    ( 33648,  33668),   #  00:23:22.000  01:13.340
    ( 33820,  33843),   #  00:23:29.167  01:14.174
    ( 46179,  46210),   #  00:32:04.125  01:15.108
    ( 24624,  24678),   #  00:17:06.000  01:16.410
    ( 25958,  25978),   #  00:18:01.583  01:18.679
    ( 18517,  18537),   #  00:12:51.542  01:19.513
    ( 98778,  98796),   #  01:08:35.750  01:21.214
    ( 26873,  26909),   #  00:18:39.708  01:21.949
    ( 28607,  28632),   #  00:19:51.958  01:23.450
    ( 32760,  32789),   #  00:22:45.000  01:24.518
    ( 33427,  33451),   #  00:23:12.792  01:25.719
    (107832, 107851),   #  01:14:53.000  01:26.720
    (107857, 107883),   #  01:14:54.042  01:27.521
    (105332, 105360),   #  01:13:08.833  01:28.588
    (116032, 116061),   #  01:20:34.667  01:29.756
    ( 99455,  99477),   #  01:09:03.958  01:31.792
    (118465, 118492),   #  01:22:16.042  01:32.726
    (118420, 118439),   #  01:22:14.167  01:33.860
    (104697, 104711),   #  01:12:42.375  01:34.628
    (100917, 100931),   #  01:10:04.875  01:35.228
    ( 98756,  98778),   #  01:08:34.833  01:35.796
    ( 28867,  28894),   #  00:20:02.792  01:36.730
    (106446, 106460),   #  01:13:55.250  01:37.864
    (115372, 115403),   #  01:20:07.167  01:38.432
    (105700, 105740),   #  01:13:24.167  01:39.733
    (113205, 113258),   #  01:18:36.875  01:41.401
    (112387, 112420),   #  01:18:02.792  01:43.603
    (115206, 115242),   #  01:20:00.250  01:44.938
    ( 98574,  98604),   #  01:08:27.250  01:46.440
    (  4366,   4403),   #  00:03:01.917  01:47.708
    ( 95770,  95809),   #  01:06:30.417  01:49.242
    (107136, 107167),   #  01:14:24.000  01:50.877
    ( 30534,  30558),   #  00:21:12.250  01:52.145
    ( 31186,  31202),   #  00:21:39.417  01:53.146
    (107565, 107603),   #  01:14:41.875  01:53.814
    ( 31967,  31990),   #  00:22:11.958  01:55.415
    (108117, 108143),   #  01:15:04.875  02:01.588
    ( 25761,  25777),   #  00:17:53.375  02:02.656
    (108492, 108544),   #  01:15:20.458  02:03.323
    (  4545,   4570),   #  00:03:09.375  02:05.492
    (116902, 116931),   #  01:21:10.917  02:06.560
    (106916, 106956),   #  01:14:14.792  02:07.761
    (105404, 105426),   #  01:13:11.833  02:09.429
    (  9542,   9580),   #  00:06:37.583  02:10.330
    ( 32992,  33012),   #  00:22:54.667  02:11.932
    ( 72682,  72733),   #  00:50:28.417  02:12.766
    (105542, 105582),   #  01:13:17.583  02:14.901
    (101714, 101728),   #  01:10:38.083  02:16.570
    (112244, 112284),   #  01:17:56.833  02:17.137
    (115314, 115329),   #  01:20:04.750  02:18.805
    (116116, 116142),   #  01:20:38.167  02:20.407
    (117840, 117855),   #  01:21:50.000  02:21.475
    (122741, 122764),   #  01:25:14.208  02:22.109
    (117414, 117434),   #  01:21:32.250  02:23.076
    (100668, 100686),   #  01:09:54.500  02:23.910
    (119624, 119647),   #  01:23:04.333  02:24.644
    (102910, 102926),   #  01:11:27.917  02:25.612
    (  9039,   9089),   #  00:06:16.625  02:26.246
    (113493, 113510),   #  01:18:48.875  02:28.315
    (125141, 125177),   #  01:26:54.208  02:29.016
    (114101, 114134),   #  01:19:14.208  02:30.517
    (124349, 124369),   #  01:26:21.208  02:31.918
    (108608, 108623),   #  01:15:25.333  02:32.753
    (117715, 117732),   #  01:21:44.792  02:33.353
    (114443, 114464),   #  01:19:28.458  02:34.087
    (114327, 114349),   #  01:19:23.625  02:34.955
    (117502, 117547),   #  01:21:35.917  02:35.856
    (120465, 120553),   #  01:23:39.375  02:37.758
    (122200, 122238),   #  01:24:51.667  02:41.428
    (122248, 122334),   #  01:24:53.667  02:42.996
]

movie = vs.core.ffms2.Source('[Coalgirls] Evangelion 3.33 You Can (Not) Redo [BD 1080p][010A5269].mkv')

# UTW-THORA release has 171 extra frames at the start.
# It's 814px high (vs Coalgirls' 816px), so you'll probably need to
# convert clips to 4:4:4 subsampling before cropping works.
#movie = vs.core.ffms2.Source('[UTW-THORA] Evangelion 3.33 You Can (Not) Redo [BD 1080p][F2060CF5].mkv')[171:]

if waifu2x:
    movie = vs.core.fmtc.bitdepth(movie, flt=1)
    movie = waifu2x_fun(movie)

if aspect_ratio == '16:9':
    borderheight = (1080 * w2xscale - movie.height) // 2
    movie = vs.core.std.AddBorders(movie, top=borderheight, bottom=borderheight)

def process_youtube_clip(file, frames, crop=True):
    source = vs.core.ffms2.Source(file)
    source = vs.core.std.AssumeFPS(source, movie)
    clip = source[frames[0]]
    for i in frames[1:]:
        clip += source[i]
    clip = vs.core.fmtc.bitdepth(clip, csp=movie.format)
    if waifu2x:
        clip = waifu2x_fun(clip)
    if crop:
        cropheight = (clip.height - movie.height) // 2
        clip = vs.core.std.Crop(clip, top=cropheight, bottom=cropheight)
    return clip

intro_static = process_youtube_clip('intro.mkv', [29, 40, 75])
intro_logo = process_youtube_clip('intro.mkv', [i for i in range(76, 1134) if i % 5 != 4])
outro = process_youtube_clip('outro.mkv', [0, 97, 210, 247, 346, 397], False)

clip = movie[720] * 23        # khara
clip += intro_static[0]       # black
clip += intro_static[1] * 36  # song name?
clip += intro_static[2]       # black
clip += intro_logo

for scene in scenes:
    start, end = scene
    clip += movie[start:end]

croph = (outro.height - clip.height) // 2
crop_fun = functools.partial(vs.core.std.Crop, top=croph, bottom=croph)
clip += crop_fun(outro[0])        # black
clip += crop_fun(outro[2])        # black

walloftext = outro[3]
if aspect_ratio == '2.35:1':
    croph = 84 * w2xscale
    scale = clip.height / (outro.height - 2 * croph)
    walloftext = vs.core.std.Crop(walloftext, top=croph, bottom=croph)
    walloftext = vs.core.fmtc.resample(walloftext, scale=scale, css='444',
                                       kernel='lanczos')
    borderw = (clip.width - walloftext.width) // 2
    walloftext = vs.core.std.AddBorders(walloftext, left=borderw, right=borderw)
    walloftext = vs.core.fmtc.resample(walloftext,
        csp=clip.format.replace(bits_per_sample=w2xscale * 16))
    walloftext = vs.core.fmtc.bitdepth(walloftext, csp=clip.format)
clip += walloftext * 108
clip += crop_fun(outro[4])        # black
clip += crop_fun(outro[5]) * 108  # website

clip = vs.core.fmtc.bitdepth(clip, bits=10)

clip.set_output()