视频继续播放,旁边的配速、心率、海拔和路线也在实时变化。
这些数字看起来只是几个简单的图形。
真正开始做以后,我们才发现,问题远没有“把几个数字放到视频上”这么简单。
因为运动设备记录的是数据,而 DaVinci Resolve 处理的是时间轴。
如何让两者准确地对应起来,才是整个产品真正需要解决的问题。
一切从 FIT 文件开始
Garmin、COROS 等运动设备记录一次活动时,通常会保存大量结构化运动数据。
FIT 是其中非常重要的一种格式。
一份 FIT 文件里可能包含:
- 时间
- GPS 坐标
- 心率
- 速度
- 距离
- 步频
- 功率
- 海拔
- 圈段
- 设备信息
以及大量与具体运动类型有关的数据。
从信息量来说,它非常丰富。
但对于视频创作者来说,这些数据还不能直接使用。
因为视频软件并不知道:
某个 FIT 数据点应该出现在视频的哪一帧。
这成为整个问题的起点。
两条完全不同的时间线
运动手表和摄像机是两个独立设备。
手表可能在 06:31:18 开始记录。
相机可能在几分钟以后才开始拍摄。
中间可能暂停录像、重新开机、切换镜头,甚至同时使用几台不同的设备。
于是我们面对的是两条完全不同的时间线:
运动数据时间线
和
视频时间线
只有把两条时间线对齐,运动数据才真正有意义。
假设视频中的某一帧对应运动记录里的第 1,427 秒,那么这一刻应该显示的心率、配速、位置和海拔,都必须来自这一时间附近的数据。
偏差几秒,有时候就足以让画面变得明显不自然。
尤其是在快速跑、骑行、爬坡或者比赛中。
数据不是连续的
另一个问题是,FIT 文件并不是视频。
视频可能是 30fps 或 60fps,每一秒都有几十帧。
运动设备的数据采样却可能以完全不同的频率出现。
因此不能简单地理解成:
“一帧视频对应一个 FIT 数据点。”
我们需要先把 FIT 中的记录解析成一条运动数据时间序列,再根据视频当前所处的时间,找到这一时刻应该呈现的状态。
这其中会遇到很多现实问题:
数据缺失怎么办?
GPS 短暂漂移怎么办?
速度突然跳变怎么办?
两个数据点之间应该如何过渡?
暂停运动以后时间轴应该如何处理?
这些细节决定了最后的浮层看起来是“一个会变化的数字”,还是一个真正可以用于视频制作的工具。
从数据变成视觉
解决时间同步以后,下一步才是大家最终看到的部分:
Gauge。
速度表、心率、路线、海拔、距离、计时器……
每一种 Gauge 本质上都是同一份运动数据的不同表达方式。
但好的运动数据浮层不能只是把数字直接显示出来。
例如配速从 4:01/km 变成 3:59/km,如果数字每次变化都会造成整个组件左右抖动,视频里的体验会非常差。
路线图需要考虑 GPS 坐标如何映射。
速度表需要考虑数值变化时动画是否自然。
海拔图需要考虑当前进度与整条路线之间的关系。
组件还必须能够适应不同的视频比例、分辨率和视觉风格。
到了这里,产品已经不再只是一个 FIT Parser。
它开始变成一个完整的运动数据视觉系统。
为什么最后选择 DaVinci Resolve
我们希望这些数据最终进入真正的视频制作流程。
而不是先生成一个固定的视频,再让创作者把它叠到自己的素材上。
对于创作者来说,更自然的方式应该是:
在剪辑过程中决定什么时候显示数据、显示什么数据、放在哪里,以及它应该是什么样子。
这也是 Resolve Telemetry Overlay 最终围绕 DaVinci Resolve 工作流设计的原因。
运动数据不应该是剪辑完成之后额外贴上去的一层东西。
它应该成为视频设计本身的一部分。
看起来简单的功能,背后通常并不简单
这也是我们开发这类工具时很有意思的一点。
最终用户看到的可能只是:
一个心率数字。
一条路线。
一个速度表。
但它们背后经历的是:
FIT 文件 → 数据解析 → 时间序列 → 时间轴同步 → 数据处理 → Gauge → 视频画面
任何一个环节出现问题,最后都会直接反映在画面里。
而真正好的工具,应该把这些复杂性藏起来。
用户不需要知道 FIT 文件内部是如何组织的,也不需要理解时间序列如何映射到视频。
他只需要选择自己的运动记录,然后开始创作。
从自己的需求开始
Resolve Telemetry Overlay 的起点其实很简单。
我们自己制作运动内容,也希望在视频里更自然地使用运动数据。
当现有工作流不能很好地解决这个问题时,我们决定自己做一个工具。
这也是 LIGHTOUCH 很多产品共同的起点。
先遇到一个真实的问题。
把它解决。
然后再看看,这个解决方案是不是也能帮助其他遇到同样问题的人。
从一份 FIT 文件,到最终出现在 DaVinci Resolve 时间线上的一个实时心率数字,中间经过了很多用户不会看到的步骤。
而我们认为,这恰恰是软件应该做的事情:
把复杂的过程留给工具,把简单的体验留给使用它的人。