用 Claude Code、Codex 和 Remotion 做一支《命运石之门》MV

用 Claude Code、Codex 和 Remotion 做一支《命运石之门》MV

💡 原文中文,约7200字,阅读约需18分钟。
📝

内容提要

作者借助Claude Code与Codex CLI制作《命运石之门》MV:17个React场景由Remotion合成,36张图由Codex生成,音效用numpy合成。作者仅写开场提示词,之后约10轮看片提意见迭代。音乐经librosa分析节拍确定剪辑点,世界线数值查原作资料,辉光管数字用代码绘制。成片4分28秒,同一代码可导出MP4或在浏览器实时播放。

🔎

延伸解读

AI 协作流程:从提示词到成片的迭代方法

作者仅提供开场提示词,后续通过约10轮审片提出具体修改意见,由Claude Code负责分镜、代码和调度。每条意见只针对一个问题,附截图或时间点定位,实现方案交给AI。这种分工让作者聚焦审美和设定,AI处理技术实现,适合需要快速迭代的创意项目。

音乐驱动剪辑:数据化节拍与场景同步

使用librosa分析BGM,得到112 BPM、466个节拍点和能量曲线,重音点用于关键切点,节拍数据导出为beats.json供场景代码调用。剪辑点从数据计算,避免手动对拍,即使分镜调整也能保持同步。这种方法适合音乐视频或需要精确节奏匹配的项目。

混合创作:生成图与代码的精确分工

场景图由Codex生成,提供材质和氛围;文字、数值、动画由代码实现,确保精确控制。例如辉光管用生成空管加代码绘制数字,世界线变动率查原作资料后由代码动态显示。这种分工结合了AI的生成能力和代码的确定性,适合需要细节准确的作品。

质量保障:抽帧检查与设定核对

渲染整片需10-15分钟,作者用renderStill抽取关键帧拼图快速检查,拦截了文字遮挡、颜色混淆等问题。设定方面,世界线数值查原作资料,剧情逻辑由作者审核,避免模型记忆错误。这种双重检查机制提升了作品的准确性和完成度。

❓

Q&A

用 Claude Code 和 Codex 制作《命运石之门》MV 的整体流程是怎样的?

作者只写一段开场提示词,之后约 10 轮看片提意见迭代。Claude Code 负责分镜、写 React 场景代码、调度 Codex 生成图片和渲染;Codex CLI 按文字描述生成 36 张场景图;音效用 numpy 合成;音乐经 librosa 分析节拍确定剪辑点。最终成片 4 分 28 秒,同一套代码可导出 MP4 或在浏览器实时播放。

MV 中的辉光管数字效果是怎么实现的?

辉光管管体由 Codex 生成一张透明背景的空管 PNG,数字用 SVG 路径手绘成灯丝形状,每个数字叠三层描边(外层模糊橙红、中层橙色、内层白色细芯),10 根未亮阴极以低透明度叠在后面。接入实拍管子后,将管体压暗到 38% 亮度并叠加压暗网格,避免发光数字被冲淡。最终锁定到 1.048596。

MV 的剪辑点是如何确定的?

用 librosa 分析主题曲,测出约 112 BPM、466 个节拍点和每 0.5 秒的能量曲线。能量曲线上四个重音(27s、61s、122s、218s)分别用作标题、角色出场、时间跳跃、最终锁定的切点;205–209s 几乎静音处放「骗过世界」台词。节拍点导出为 beats.json,场景代码中所有快闪切点都从这份数据计算,因此分镜改动后卡点无需手动重对。

制作过程中如何保证《命运石之门》的设定准确?

剧情中的世界线变动率数值全部查原作资料,例如起点 1.130426、第一封 D-mail 后 0.571024、最终 STEINS;GATE 世界线 1.048596 等。查资料还纠正了模型错误:开场显示的 1.130205 其实是 SKULD 作战失败的世界线。作者还指出第一封 D-mail 并非取消,而是要用 IBN 5100 入侵 SERN 数据库删除记录,最后一次回溯因此改为入侵 SERN 的画面。

歌词动画是如何与画面配合的?

歌词文件由作者提供(.lrc,34 句带时间轴)。第一版固定在底部做卡拉 OK 字幕,作者觉得平庸。改版后有 6 种样式:竖排双列、大字砸入后炸散、RGB 故障字、沿世界线滑行、侧边遮罩擦入、终端打字。每句用哪种、放在哪里,按该句出现时画面上的空位逐句指定,例如 α/β 分屏时歌词沿中间分割线竖排,角色卡在右边时歌词放左边。

如何快速验证 MV 的渲染效果而不必每次渲染整片?

整片渲染一次要 10 到 15 分钟,太慢。每次改动后,用 @remotion/renderer 的 renderStill 抽取 10 到 30 个关键时间点的帧,用 ImageMagick 拼成一张大图检查,约一分钟出结果。这拦下了大部分问题,如角色卡标签压住歌词、红色标签在红色天空上看不见、α 被 CSS 大写成了 A、分屏里真由理只露出一只手等。整片渲染后再用 ffprobe 核对时长和规格,用 volumedetect 查音频峰值。

🏷️

标签

➡️

继续阅读