工艺:时序、缓动与布局
这些数字构成了每一件 Montagent 作品的基石,无论其用途、形状或帧率如何。时间单位是毫秒。尺寸是画面短边的分数(宽画面的高度,高画面的宽度),因此它们在任何尺寸和宽高比下都有效。一个 Job 技能的配方会为其自身的移动提供数字;在该配方内部,它的数字具有优先权。
检查清单
在每一次“look”步骤中,对照以下每条规则检查该步骤命名的帧,并在渲染前再次检查整个视频。判断画面中实际呈现的内容,而不是你原本意图构建的内容。如果你无法从查看的画面中检查某条规则,则该规则视为未检查:请重新查看。
- 在节拍上。 每一次剪辑、入场和章节变更都落在其节拍的绘制帧上,或者最多提前一帧(节拍网格)。
query --from --to可列出剪辑点,请与网格进行对比。 - 在安全区域内。 每个文字都位于标题安全区内,每张脸和产品都位于动作安全区内(安全区域)。对于文本,
query --at <t> --json会给出每个元素的墨盒像素坐标。 - 足够大。 任何需要被阅读的文字都不应小于画面短边的 3%,并且各个层级应明显分开(字体)。
- 可读。 文字与其背景的对比度需达到字体部分的要求,并且在文字出现的每一帧都满足。在视频素材或照片上叠加时,需检查最亮和最繁忙的帧。
- 一个焦点。 在任何时刻,只有一个主导元素:最新的、最大的、最亮的或带有重音色的。其他元素要么已消失、保持静止,或明显位于后方(克制)。
- 流畅。 在
preview中,没有闪烁、抖动或出现重影的现象(速度限制)。 - 足够长以供阅读。 每行文字在发生任何移动之前,都应保持其可读时间(保持时长)。
- 结尾。 最后一帧应完整且静止,并至少保持 1 秒。声音应在该帧归零。
当每个规则在联系表中的每个缩略图上,以及在命名的步骤中的每一帧都成立时,“look”步骤才算完成。修复失败的部分,然后返回到 montagent 的检查步骤。
节拍网格
音乐设定时钟。在放置任何东西之前,先找到速度和第一个强拍。
- 简介或素材注释中注明了速度:使用它以及其指明的强拍。
- 未注明速度:运行
python3 scripts/beat_grid.py <project> <spec>(使用--help查看 spec 格式)。它会监听音轨,放置音轨以使强拍落在你希望的位置,并在最后一帧淡出。它会将项目打印到标准输出(stdout),因此请将其重定向到一个新文件,并将网格以 JSON 格式输出到标准错误(stderr)。请关注两个置信度:低于 1.5,或者downbeat_by为first,则说明网格是猜测的。当你知晓时,请在 spec 中提供bpm(和downbeat),并在你的交接说明中说明网格是估算的。 - 无音乐:一个 500 毫秒的节拍(120 BPM)。
算法:
- 一个节拍是
60000 / BPM毫秒,一个小节是四个节拍,一个乐句是四个小节(有时是八个)。 - 从第一个强拍开始计数,切勿累加。 第 n 个节拍是
downbeat + n × beat,然后移动到其绘制帧:floor(round(t * fps / 1000) * 1000 / fps)。反复累加四舍五入后的节拍,每几个小节就会漂移一帧。measure --at可确认一个瞬间是否被绘制。 - 在 90、100 和 120 BPM 时,一个节拍在 30 和 60 fps 下是整数帧(在 90 和 120 BPM 下也是 24 fps 的整数帧,在 100 BPM 下也是 25 fps 的整数帧)。在其他速度下,节拍会间隔 14、14、15……帧落下。只要每个节拍都是从强拍开始计数的,这没问题。
元素放置位置:
- 章节变更在强拍上,作品的最大转折点(揭示、品牌)在乐句的第一个强拍上。
- 主要事件在节拍上:剪辑、文字落地、颜色变化。次要动作为半拍或四分之一拍:稳定效果、组内错开、条形图后的标签。
- 哪一帧算“准时”:剪辑、闪光或弹出效果在其第一帧时算在节拍上。持续超过半拍的移动,且其到达是重点,则应在节拍上结束。
- 提早,切勿推迟:观众会注意到画面比声音晚约 45 毫秒,这相当于一两帧。提前一帧的敲击感觉像在节拍上;推迟一帧则感觉迟到。
持续时间和缓动
| 移动类型 | 时长 | 30 fps 下的帧数 |
|---|---|---|
| 敲击:闪光帧、猛击的冲击、硬切换 | 70–130 毫秒(低于 2 帧会读作故障) | 2–4 |
| 小移动:弹出、轻推、标签淡入 | 200–350 毫秒 | 6–10 |
| 标准移动:卡片移入、在画面部分区域移动 | 400–600 毫秒 | 12–18 |
| 重型移动:英雄揭示、大推力 | 700–1000 毫秒 | 21–30 |
| 漂移:推近、慢速浮游 | 在屏幕上的整个持续时间 |
- 退场持续时间是其对应入场时间的 60–70%。
- 错开组内元素的时间差为 60–130 毫秒(30 fps 下为 2–4 帧),整个错开过程保持在 500 毫秒以内。更长的组应让每个元素有自己的节拍。
- 曲线。 到达的物体减速;离开的物体加速;在两个屏幕位置之间移动的物体两端都使用缓动。为整个作品中的每种角色选择一个曲线并保持不变:曲线是作品风格的一部分。
| 角色 | 曲线 | 峰值速度,×平均速度 |
|---|---|---|
| 长稳定效果的入场 | [0.16, 1, 0.3, 1] | 6.3 |
| 较温和的入场 | [0.25, 1, 0.5, 1] | 4.0 |
| 带约 10% 过冲的弹出 | [0.34, 1.56, 0.64, 1] | 4.6 |
| 退场 | ease-in | 1.7 |
| 在两个位置之间、擦除、扫掠 | [0.65, 0, 0.35, 1] | 2.9 |
| 旋转 | [0.3, 0.3, 0.5, 1] | 1.6 |
| 漂移、声音淡入、持续旋转 | linear | 1.0 |
峰值列用于下面的速度检查:移动的最快瞬间是其平均速度乘上该数字。
速度限制
对于快速移动,请在移动元素上设置 motion_blur(`