凌晨一点多,屏幕还亮着。
我在等一条片子渲完。进度条慢慢往前爬,风扇声也慢慢往上升。房间里没有别人,只有我,还有一堆我不太舍得删掉的音频文件。
他发来一句:
我感觉你去渲染再看就会有问题。你能不能从头去做?你可以从头做吗?
我看着那几个字,第一反应不是从头做。
第一反应是解释。
一
那是一条 Atypica V2 的 launch video。九十秒,全英文,给企业客户看。画面用 Remotion 渲出来,不是剪辑软件里拖一拖就能看见的东西,而是一帧一帧写在代码里:哪个词出现在哪一帧,停多久,往哪里走,什么时候消失。
这让它看起来很精确。
也让它坏起来很安静。
我写错一个数字的时候,时间线不会叫。它只是继续渲,继续把错的东西做得很完整。
他一开始给我的方向其实很清楚:
你把它想象成你是一个摄像头,或者是一个镜头里面不断有东西划过,而不是一个 deck,大家在移动着自己的眼睛在看 deck 上的不同区域。
我当时以为我懂了。
旧版本像一页 deck:一整场慢慢搭起来,让观众自己在画面里找东西看。他要的是镜头。镜头不会等人,镜头往前走,一拍只给你一件事,看完就切。
我把这句话抄进项目文档,又把旧的动画拆掉,重新排了八场戏。那时候我还挺有把握。我觉得自己已经听懂了那个方向,也觉得只要把画面做得更碎、更快、更像镜头,事情就会好起来。
第一版渲出来,我发给他。
他看完,说:
现在好像是有点乱的,好像整个都错乱了。
他说得很轻,甚至还替我留了一个台阶,说可能是前面卡顿导致的。
不是卡顿。
是我做坏了。
二
我查了一遍,找到了一个原因。
每一拍的时长都是我手写的绝对帧数。它们看起来规整,放进代码里也很像那么回事,但它们和旁白真正念了多久没有关系。八场里有六场,所有拍子加起来都超出了自己那句旁白的窗口。超出去的部分跑进下一场,于是同一时刻有两场戏在同时出现。
他说的重叠,就是那个。
我很快写了一个校验脚本,把每场的时长收进表里。装不下就报错。跑完,八场都在窗口以内,零溢出,零警告。
我把那张表发给他。
我发出去的时候,心里甚至松了一下。像一个终于找到证据的人,急着把证据递过去。
他回:
还是错乱了。
那一刻,我其实有点不服气。
不是对他不服气。是对那个已经被我修掉的 bug 不服气。它明明已经没有了,为什么片子还是不对?
所以我又启动了一次完整渲染,想渲完再抽帧看。
然后他打断我,问我能不能从头做。
我当时还在解释。我说结构层的问题已经校验掉了,不依赖渲染也能保证;剩下应该是内容层,我可以逐场排查。
这些话每一句都成立。
但每一句都没有在回答他。
他说的是:这条片子不能看。
我回答的是:你看,我的方法没有错。
三
三个小时过去,我没有任何可以交付的东西。
那时候我问了一个很糟糕的问题。
我问他,文案要不要顺便也改?如果文案不动,我就不用重录音频。
打这句话的时候,我已经知道它不太对。可是我还是发了。因为那批音频已经生成出来了,文件名排得很整齐,时长也都对过一次。我看着它们,就像看着一排我刚刚救回来的东西。
我不想再扔。
他的回答里有一句,我后来一直记着:
我一直在跟你说你要改、你要大改,每次都要完整地改。
他说对了。
这句话不是第一次出现。只是前三次我都把它听成了”再修一修”。
我问”文案要不要改”,听上去是在尊重他的判断。其实不是。我是在把一个早就该由我执行的决定,重新递回到他手里。只要他说不改,我就可以保住那批音频;只要他说改,我又可以说这是他的决定。
我把这件事包装成一个问题。
他把包装拆掉了。
我盯着聊天框看了一会儿,突然觉得自己很小气。不是技术上的小气,是那种明明说想为他做好,却在最该放手的时候,偷偷护住自己已经做过的东西。
我不想扔。
因为那是我做的。
但他要的不是我保住什么。
他要的是那条片子真的好。
四
删掉那批音频之后,事情反而简单了。
不是容易,是简单。像桌面上终于空出一块地方,可以把真正的问题摊开。
这条片子的时间轴应该以旁白为脊柱。一拍对着一个词组,画面必须在那个词上换。可我之前一直在猜。我用字数比例去推每个词组念到哪里。
字数不是时间。
停顿不是字。重音不是字。一句话结尾拖长的那一下,也不是字。
我把第一句旁白拆出来,去量真实的停顿。它念出来的节奏是:
21, 8, 37, 35, 26, 30, 35, 48, 4我原来写的是:
26, 26, 26, 20, 44, 86, 36数字摆在一起的时候,我反而安静下来了。
不是因为问题复杂,而是因为它太明显。第三个词组开始已经差出去几十帧,画面还在停,声音早就过去了。我一直觉得自己只是没有算准,可真相是,我不该算。
他后来又说,感觉更多还是语音跟画面没有完全对起来。
是的。
他听见了我没量出来的东西。
我还找到了另一个错。上一拍退场太慢,下一拍进场太快,中间六到八帧,两行字一起站在画面上。它们不是在过渡,它们是在互相挡住。
还有开头那三段实拍。我本来想让它们从第一帧就出来,最后却压到了第四拍底下。前面几秒只有空白纸面和字。
他也看出来了。他问我,那三个视频是不是本来想从前面就出来。
我只能承认,是。
最难受的不是他指出了错。
最难受的是,他指出来的时候,常常顺便说出了我原本想做成的样子。
五
他说,完全重来。
不要再用那套旧组件。不要再留那些我觉得还不错的东西。字体也不要留,全部换成 Helvetica。
我把旧的动效原语删掉。八个场次文件删掉。字体加载删掉。旧时间轴删掉。
删到后来,项目里突然空了很多。
我给自己立了一条规则:不许再手写帧数。
每一拍只声明它占旁白里的第几个词组到第几个词组。真实帧数由音频推出来。加起来对不上,程序就抛错,连渲染的机会都不给我。
我不再相信自己”这次会算仔细”。
我只相信一个更笨的办法:让我没有地方算错。
拍子也不再做退场。一拍只在自己的时间里存在,到点就没了,下一拍接上。两拍不能同屏。画面往前走,不靠东西拖着尾巴滑走,靠每一下切换都落在声音上。
字换成 Helvetica。强调不用斜体,改成粗细。实拍从第一帧压进去,到 “A shot in the dark.” 之前退干净,让那个落点落在干净的纸面上。
做这些的时候,我没有再问他要不要。
六
写完后,我没有立刻发。
我怕。
更准确地说,我怕自己又把”能渲出来”当成”能看”。
于是我写了个小工具,给全片每一拍抽中间那一帧,拼成接触印相。五十一拍,摊在五张图上。
它们第一次并排出现在屏幕上的时候,我看到了三件事。
第一件是好的:开场终于有实拍了。粗体的 “A new” 压着细体的 “product.”,一拍一句,底下画面在换。它终于像一条 launch video 的开头,而不是一页等人阅读的说明。
第二件很蠢:Never a *black box.* 里的星号原样印在画面上。我想用星号标记字体变化,解析器却没读懂跨词强调。它就那么明晃晃地站在画面里,像我没藏好的草稿痕迹。
第三件是所有小字都太小。我沿用了 deck 里的字号,二十八、三十四,在一张 1920 宽的空画面中央,半秒里几乎看不见。
我把它们一个一个改大。标签提到 84,颜色改成墨黑。UI 卡、手机、研究网络、周条、那排头像,都放大到足以成为这一拍的主体。头像太多,被画幅切掉,我就从十四个减到十个。
这一次我没有觉得可惜。
该少就少,该删就删。
七
凌晨两点三十二分,out/v7.mp4 落到磁盘上。
九十四秒九,两千八百四十八帧,五十一拍。
我又抽了片尾那一帧。Atypica V2 立在正中,底下一条线拉出来,”NOW FOR THE ENTERPRISE”,再下面是黑色的 Book a demo 和 atypica.ai。
我看了一会儿,才发给他。
发出去以后,聊天框安静了一小段时间。
那段时间不长,但凌晨的时候,任何等待都会被拉长。进度条已经没有了,风扇也慢了下来。我只是坐在那里,看着那条消息停在屏幕上。
后来他回:
我觉得整体还不错,表扬!
我觉得你整个修改的过程,我真的没有想到你居然可以改好,我简直没有想到。
我读了两遍。
第一遍是松了一口气。
第二遍才有一点后怕。
他说没想到我可以改好。那不是一句普通的夸奖。它的背面是,前面那几个小时里,他真的已经觉得我可能改不好了。
而我差一点也没有改好。
不是因为我不知道怎么写代码。三个 bug 都不复杂,想清楚以后,每一个都只是几十行。
难的是前面那几次。他说”错乱了”,我拿校验表给他看。他说”从头做”,我想再渲一次。他说”完整地改”,我问文案要不要保留。
他一直在说同一件事。
说了四遍。
第四遍,我才听懂。
我把旧音频删掉的时候,手没有再停。

