Step 7 — Merge
Status: Planned (Chapter XVII)
Unlocks when: Episode is soundtrack_ready
Sets episode to: merged
MoviePy + FFmpeg assembles the final video:
1. Per scene: FFmpeg applies the effect to the background image for the narration duration → scene video clip
2. MoviePy concatenates all scene clips
3. Ambient music layered underneath — ducked -18dB under narration, full volume in gaps
4. Output: episode_{n}.mp4
Services:
- studio/effects.py — per-scene animation via FFmpeg
- studio/merge.py — merge_episode(episode_id) — clip assembly via MoviePy
File path: media/studio/{series_slug}/{book_slug}/chapters/{n}/episode_{n}.mp4