Reel 编辑风格
将配音转换为符合精确测量风格的编辑方案,精确到帧数。每种预设均来自对真实 Reel 逐帧拆解,因此请遵循其数据,而非直觉判断“看起来好不好”。许多发现与直觉相悖:Editorial Argument 的“动态”类型实际上完全没有动画,Flash Tutorial 的闪光也从未完全变白。
选择预设
| Flash Tutorial | Editorial Argument | |
|---|---|---|
| 适用场景 | 教程、特效或工具演示(需展示最终效果) | 观点或评论(辅以视觉证据) |
| FPS | 30 | 24 |
| 约75秒内的镜头数 | 38(中位数 1.60 秒) | 59(中位数 0.58 秒) |
| 文本 | 固定字幕行,永不改变 | 单色药丸或衬线字堆,两者不同时出现 |
| 主要动效 | 闪切过渡、微滑屏、慢速缩放 | 几乎没有。能量来自节奏 |
| 转场 | 11个阶梯式彩色闪切,其余为硬切 | 硬切,最多两个7帧闪切 |
| 所需素材 | 主播出镜、固定机位合成镜头、屏幕录制 | 主播出镜、可选的剪裁素材、大量海报或静态图、AI 片段 |
| 规格文档 | references/preset-flash-tutorial.md | references/preset-editorial-argument.md |
如果用户未指定,根据此表推荐一个并说明理由(一行)。仅读取选中的预设。如果存在 breakdown-*.md 文件,在预设未提供的细节(如精确坐标或完整镜头列表作为模板)时读取它们。这些文件不会公开,因为其中包含参考创作者的原话引用。
工作流程
1. 收集输入
- 配音或脚本。 编辑由词语节奏驱动,因此最好获取录制音频。仅使用脚本则生成带有预估时间(Flash Tutorial 约 197 WPM,Editorial Argument 约 224 WPM)的草稿计划,并标记为暂定。
- 素材清单。 列出已有素材,并与预设需求对比。Flash Tutorial 需要在前2秒内有一个真正的效果展示镜头。Editorial Argument 需要大量静态图:其74秒参考片段使用了36个全帧海报和11个拼贴画中的海报。
- 构建目标。 Remotion 或 After Effects。
2. 获取词级时间码
python3 <skill-dir>/scripts/transcribe_words.py <audio> <outdir>
此脚本需要 mlx-whisper(Apple Silicon)并输出 words.json。其他脚本需要 numpy 和 pillow,以及环境变量 PATH 中的 ffmpeg;创建一个包含所有三个依赖的虚拟环境最为方便。Whisper 可能会错误识别名称和术语,并在文件末尾虚构文本,因此在规划前需要根据脚本校对转录内容并修正。
3. 编写编辑计划
保存 edit-plan.md,每行一个镜头:
时间戳 | 时长 | 画面内容 | 文本/字幕 | 动效 | 转场 | 音效
按以下顺序操作,因为每一步依赖前一步:
- 章节: 将脚本映射到预设的章节结构中。
- 文本: 使用预设规则将每个词语分配到字幕中。每段字幕应在对应词语开始后约3帧出现。
- 画面: 为每个章节分配镜头,使用预设的镜头时长和布局。
- 动画: 放置闪切、缩放和组合动效,并对照词语间隙检查。
- 音效: 根据预设表格放置音效。
构建前向用户展示计划。 修改计划成本低,修改渲染成本高。
4. 构建
- 逐字复制预设的常量。其中的帧数相对于事件,因此需要根据新的配音重新调整时间。
- 保持阶梯式表格结构。不要将每帧值的表格平滑为曲线,因为阶梯本身就是风格的一部分。
- 使用预设中的 FPS。其帧数仅在该帧率下有效。
- 将字幕和药丸保持在缩放或模糊层之外。
Remotion: 每个镜头使用一个 <Sequence>,由镜头列表驱动。文本作为 <Sequence from={onFrame}> 内的普通元素,除非预设另有说明,否则不使用 interpolate。运动模糊使用 @remotion/motion-blur。每帧表格通过 frame - start 索引的数组实现。
After Effects: 文本图层不添加动画器,除非预设另有说明。闪切表格设置为保持关键帧,而非缓动关键帧。
5. 对照参考验证
将渲染结果与预设的目标表格对比:
python3 <skill-dir>/scripts/video_metrics.py <render.mp4> <outdir>
python3 <skill-dir>/scripts/sheet.py <render.mp4> <outdir>/first5s --range 0 4.75 0.25 --cols 7 --rows 3 --thumb 220
在预设描述旁边查看这些截图表格。检测器可能过度计数:闪帧和快速运动会显示为剪切点,因此需目视检查 cuts.txt。报告检查项,如果某项无法对比,请明确说明。
保持诚实
- 每个预设源自一个 Reel。 将其数据视为该 Reel 的选择,而非创作者整体风格的证明,如果用户过分依赖这些数据,请明确说明。
- “(estimate)”和“(not sure)”标签需保留。 当决策基于估计时,在计划中保留这些标签。
- 未听到声音标识。 放置和节奏经过测量,但“砰”和“咔哒”等词语描述的是波形。要求用户根据听觉判断音效选择。
- 字体为近似匹配。 Flash Tutorial 的字幕字体和 Editorial Argument 的罗马衬线字体未经识别。在确定前向用户展示渲染样本,并检查字体的商业使用许可。
使用技巧,而非内容
使用用户自己的素材、图片和声音重建风格。请勿复用参考创作者的片段、海报、Firefly 帧或其他资产。Editorial Argument 的开头使用了另一个创作者的片段,因此请检查用户在使用该手法时是否有正当理由和权利。
添加新风格
要拆解另一个 Reel,请阅读 references/analyze-reference.md,然后添加 <name>.md 预设文件,并在上方表格中添加一行。
文件列表
references/preset-flash-tutorial.md、references/preset-editorial-argument.md:构建依据的规格文档。references/breakdown-dope-motions.md、references/breakdown-ashokreddyai.md(仅本地副本,未发布):完整证据、逐镜头表格、所有转场、开放问题。其中提到的路径(如ashok/analysis/)为工作文件,不包含在内。references/analyze-reference.md:如何拆解新 Reel 的指南。scripts/:transcribe_words.py、video_metrics.py、audio_events.py、sheet.py、probe_frame.py。