# -*- coding: utf-8 -*-
"""このショートの作り方(ショート専用・舞台型・2026-11-06)
エイイチの言葉: 動画づくりで一番時間を取られるのは音声確認(2026-11-02)。部屋は依頼箱 #99 で Claude Code が Unity で建てた(22:46 開始 → 22:59 完了=13分)"""
from butai_parts import *
OUTRO_K = 6 # 締めの文の番号(narration.py の最後に足した文)
NAME, VER = "このショートの作り方", 3
HEAD = "この動画
誰が作った?"
T_ON = (0, 1.0)
STEPS = ["台本", "画面", "部屋", "声", "決める"]
def pipe(done, now=(), t=None):
"""下の段に5つの工程。done はもうオレンジ、now は t で灯す"""
out = ""
for k, nm in enumerate(STEPS):
st = f"background:{ORANGE};color:#fff;" if k in done else ""
an = f"animation:{a('on', t, .25)};" if (k in now and t is not None) else ""
out += (f'
{nm}
')
return out
def wave(t0, left=48, top=150, w=804, h=220, n=36, dim=False):
import random
random.seed(3)
bw = w / n
out = ""
for k in range(n):
d = random.uniform(.35, .8)
out += (f'')
return out
def scene(T, S):
h = CSS
# 0: どうやって作ってる?
h += win(T(0, 1.0), T(1, 0), f'?
')
# 1: 台本と画面は Claude
t1 = T(1, 0)
h += win(t1, T(2, 0), kick("台本と画面") + 'Claude
' + pipe([], [0, 1], t1 + 0.6))
# 2: この部屋は Claude Code が Unity で建てた(13分)
t2 = T(2, 0)
h += win(t2, T(3, 0), kick("この部屋(Claude Code × Unity)")
+ f'0分で建った
'
+ counter_js("m13", t2 + 0.4, t2 + 2.4, 13, 0) + pipe([0, 1], [2], t2 + 0.6))
# 3: 声は ElevenLabs(波形が動く)
t3 = T(3, 0)
h += win(t3, T(4, 0), kick("声は ElevenLabs") + wave(t3 + 0.2, top=130, h=260) + pipe([0, 1, 2], [3], t3 + 0.5))
# 4: いちばん時間がかかるのは、音声の確認(波形の上を再生ヘッドが何度も往復)
t4, s4 = T(4, 0), S(4)
h += win(t4, T(5, 0), kick("いちばん時間がかかる") + wave(t4, top=130, h=200, dim=True)
+ ""
+ f''
+ f'音声の確認
')
# 5: 見て決めるのは、エイイチさん
t5 = T(5, 0)
h += win(t5, None, kick("見て決めるのは")
+ f'エイイチ
' + pipe([0, 1, 2, 3], [4], t5 + 0.3))
h += outro(T, OUTRO_K) # 締め:サイトへの入口
return h
def OVER(T):
return stage_fx(T, bursts=[(T(5, 0.3), 200)])
FACE = [(-1, 0.0, 1.0, "joy"), (1, 0.0, 3.3, "joy"), (2, 0.0, 3.5, "smile"), (3, 0.0, 3.6, "wink"), (4, 0.0, 3.0, "trouble"), ("end", 0.0, 3.0, "joy")]
POSE = [(-1, 0.0, 1), (2, 1.5, 3), (3, 0.0, 2), (4, 0.0, 2), (5, 0.3, 4)]
LEAN = []
INTRO = "hop"
MOVES = [(1, 0.2, "jump", 1.0), (2, 0.5, "turn", 1.6), (3, 0.3, "tilt", 1.2), (5, 0.3, "bow", 1.2)]
SE = [(-1, 0.0, "se_rise", -9), (0, 1.0, "se_boot", -12), (1, 0.0, "se_whoosh", -12), (1, 0.6, "se_ding", -11),
(2, 0.0, "se_whoosh", -12), (2, 2.4, "se_ding", -10), (3, 0.0, "se_whoosh", -12), (4, 0.0, "se_whoosh", -12),
(4, 1.4, "se_pechin", -9), (5, 0.3, "se_jaran", -10), (5, 0.3, "se_ding", -9)]
ENDING = dict(kind="jump", at=(6, 0.9)) # 2026-11-07 跳ねると頭が工程の「声」にかかるので、締め(サイトの入口)で跳ねる