- 目的と全体像
目的: セリフ(テキスト)から8秒の動画を生成する手順を、数式・アルゴリズム・品質指標まで一気通貫で解説。
構成: Text→Phoneme→Mel→Waveform(TTS)→Lip/Blendshape(表情)→Video(拡散/レンダ)→Mux。
Text → G2P → Prosody(Duration,F0 prior)
→ Acoustic model (Mel)
→ Vocoder (Waveform)
→ Lip-sync / 3D Blendshape
→ Video generation / Rendering
→ A/V Sync & Export
- テキスト処理(G2Pと韻律)
入力文字列 s=(c₁,…,c_L) を音素列 p=(p₁,…,p_N) に写像。
p* = argmax_p P(p | s; θ_g2p)
L_g2p = − Σ_i log P(p_i = y_{p,i} | s)
持続時間予測(FastSpeech系のDuration Predictor):
d_i = f_dur(p_i, context; θ_d) # 秒
L_dur = (1/N) Σ_i (log d_i − log d_i*)^2
アクセント・休止の事前(任意):
break_j ~ Bernoulli(π_j), 句ポーズ τ_break = g(prosody)
- 音声合成(Acoustic→Vocoder)
2.1 メルスペクトログラム生成
音素埋め込み e_i を持続 d_i で時間展開しフレーム列 E を得る。
E = upsample({e_i}, {d_i})
ŷ_m = A(E; θ_a) ∈ ℝ^{F×T} # F:メル次元, T:フレーム
L_mel = ||ŷ_m − y_m||_1 + λ_w ||Δ_t ŷ_m − Δ_t y_m||_1
(Δ_t は時間一次差分で過度なフリッカを抑制)
2.2 ボコーダ(HiFi-GAN 例)
ŷ = G(ŷ_m) # 生成波形
L_adv = Σ_k [ E_y (D_k(y)−1)^2 + E_ŷ (D_k(ŷ))^2 ]
L_feat = Σ_k Σ_l || D_k^{(l)}(y) − D_k^{(l)}(ŷ) ||_1
L_stft = Σ_s || STFT_s(y) − STFT_s(ŷ) ||_1
L_vocoder = α L_adv + β L_feat + γ L_stft
- 音声→口形・表情(2D/3D)
3.1 音素→ビセム写像
強制アラインで音素時間区間 [τ_i^s, τ_i^e] を得る。窓特徴 a_t からビセム重み w_v(t) を推定。
w_v(t) = Softmax(W a_t + b) # v は口形カテゴリ
3.2 2Dリップ(Wav2Lip型)
ŷ_t = G_lip(x_t, a_t) # 口元合成
L_sync = 1 − cos( S_audio(a_t), S_video(ŷ_t) )
L_rec = ||ŷ_t − x_t^{gt}||_1
L_lip = L_sync + λ_rec L_rec
3.3 3Dブレンドシェイプ(ARKit 52ch)
b(t) ∈ ℝ^{52} # 各ブレンドシェイプ係数(0..1)
b(t) = W a_t + U prosody_t + c
b(t) = clip( b(t−1) + Δt·v(t), [0,1] )
v(t) = −∂E/∂b, E = κ1 ||∇_t b||^2 + κ2 hinge(b_occlusion)
θ_jaw(t) = k0 + k1·F0_norm(t) + k2·energy(t)
- 映像生成(拡散/レンダ)
4.1 拡散(動画条件付き)
前向き:
q(x_t | x_{t−1}) = 𝒩(√α_t x_{t−1}, (1−α_t)I)
x_t = √ā_t x_0 + √(1−ā_t) ε, ε~𝒩(0,I)
逆推定:
ε̂_θ = ε_θ(x_t, t, cond) # cond: text, a_t, b(t)
x_{t−1} = 1/√α_t [ x_t − (1−α_t)/√(1−ā_t) ε̂_θ ] + σ_t z
L_diff = E_{t,ε} || ε − ε̂_θ ||^2
時間一貫性:
F_{t→t+1} = optical_flow(ŷ_t, ŷ_{t+1})
L_flow = || warp(ŷ_t, F_{t→t+1}) − ŷ_{t+1} ||1
L_tv = Σ_t || ŷ{t+1} − ŷ_t ||_1
4.2 PBR レンダ(3Dアバター時)
レンダ方程式:
L_o(p, ω_o) = ∫_Ω f_r(p, ω_i, ω_o) L_i(p, ω_i) (n·ω_i) dω_i
トーンマッピング(ACES 近似一例):
c_out = (c_in (a c_in + b)) / (c_in (a c_in + c) + d)
- 音声・映像同期と8秒設計
時間離散化:
fps = 24 → 総フレーム N = round(8 * fps) = 192
t_n = n / fps
k_audio = round( t_n * SR ) # SR=22050 など
字幕・口形キー:
n_i = ⌊ τ_i * fps ⌋
GOP と書き出し:
codec=H.264, CRF=18..22, GOP=48, pix_fmt=yuv420p
- 総合損失
L_total = λ1 L_g2p + λ2 L_dur + λ3 L_mel
+ λ4 L_vocoder + λ5 L_lip
+ λ6 L_diff + λ7 L_flow + λ8 L_tv
- 推奨パラメータ(8秒セリフ)
• 音声: SR=22050 Hz, hop=256 → メルFPS≈86
• 映像: 1920×1080, 24 fps, 8 s, GOP=48
• F0 抽出: 40 ms 窓, 10 ms シフト(RAPT/CREPE)
• ブレンドシェイプ平滑: 一次IIR
b_t = (1−α) b_{t−1} + α b_t*, α≈0.3
• 口形遅延補正: Δt ≈ 40–80 ms(視覚自然性向上)
-
品質評価
• 音声: PESQ, STOI, LSD(Log Spectral Distance)
• リップ: LSE-C / LSE-D(SyncNet)
• 動画: FVD/KVD(分布距離), CLIP-S(一致度)
• A/V 同期: |Δt| ≤ 80 ms を目標 -
失敗モードと対策
• 子音破裂音が弱い → 子音区間の開口ゲイン補正 gain_c>1
• フリッカ(口形ジッタ) → 時間TV正則化 + IIR 平滑
• 同期ズレ → audio time-stretch ±1% または fps微調整
• ノイズ混入 → 音声は事前ノイズ抑圧→TTS→最終EQ/LUFS正規化(-16 LUFS) -
8秒セリフ設計テンプレ(技術語入り)
日本語:
「テキストヲ音素ニシテ、メルカラHiFi-GANデ声ヲ合成。Wav2Lipデ口形同期、AIガ動画ヲ生成スル。」
英語:
“Text to phonemes, Mel to voice with HiFi-GAN, lips synced by Wav2Lip, and the AI renders the video.”
- 実装スケルトン(疑似コード)
params
FPS=24; DURATION=8.0; N=int(FPS*DURATION); SR=22050
1) text -> phoneme -> duration
phonemes = g2p(text)
dur = duration_predictor(phonemes)
2) acoustic -> mel -> waveform
E = upsample(emb(phonemes), dur)
mel = acoustic_model(E)
wav = vocoder(mel)
3) alignment -> viseme/BS curves
align = force_align(wav, phonemes, SR)
viseme = phoneme2viseme(align)
b_t = audio2blendshape(wav, viseme)
4) video frames (diffusion or 3D render)
frames = video_generator(text_cond=text, audio_cond=wav, bs=b_t, fps=FPS)
5) mux & export
video = encode_h264(frames, fps=FPS, crf=20, gop=48)
out = mux_audio(video, wav, sr=SR)
- 次アクション
• 要件を指定すれば、Colab向け最小実装(8秒固定、24 fps、TTS+Wav2Lip合成パイプ)を提示できる。
• 3Dアバター駆動(ARKit 52ch)版、または拡散動画統合版も作成可能。どちらを優先するか指示を。