这正是每一个持续产出内容的人迟早都会撞上的墙。做第一份的时候,你会一边思考一边把版式搭起来:标题放在这里,图片用这个比例,注释用这个字号。等做到第十五份内容时,其中一部分决策你已经记不清了。于是你重新做一遍决定。新的决策与旧的之间,差着几个像素、几个字号、一点点对齐上的偏移。单独看,没有哪一个算得上错误。可当整套内容并排摆在一起时,呈现出来的却是一个不成体系、缺乏统一质感的整体。
这并不是注意力不集中造成的问题,而是任何由人手反复做出的决策的自然结果。没有任何人(也没有任何人工智能模型)在做同一个决策一百次时,能给出一百次完全相同的答案。
必须彼此分离的三个层
在手工制作的内容里,三件事是同时进行、且相互交织的:决定内容是什么、决定这些内容如何排布、以及生成文件。
只要这三者黏在一起,任何一个都无法规模化。因为内容上一个微小的改动,都要求手工调整版式,并重新保存文件。
模板化生产的核心动作,就是把这三者拆开。
内容层保存的是"要讲什么":标题、正文、使用哪张图片、配音里要说什么。这一层对形式一无所知,它不知道字号、颜色,也不知道坐标。
模板层定义的是这些内容"看起来如何":版式、字体排印、页边距、图片区域的坐标。这一层对内容一无所知,它不知道讲的是什么,只知道该放在哪里。
渲染层把两者合并起来,生成文件。这里不做任何决策,只负责执行。
一旦完成这种分离,改变的是:内容更新时不必碰版式,版式更新时不必碰内容。两条轴变得彼此独立。
用类型化模板取代自由设计
完成分离之后的问题是:模板层应该拥有多大的自由度?
直觉给出的答案是"越灵活越好"。但在实践中,正确答案恰恰相反。
定义数量有限、编号明确的幻灯片类型,效果要好过一个灵活的版式引擎。六到八种类型,已经绰绰有余地覆盖一套培训课程的真实需求:开场、定义、以图为主的讲解、要点列表、对比、收尾等等。
每一种类型的定义都只存在于一个地方,并且独立于内容。
"T4_adim": {
"amac": "Tek bir demleme adımı: solda görsel, sağda eylem ve gerekçe.",
"zemin": "acik_krem",
"ogeler": [
{ "oge": "adim_no", "x": 0.90, "y": 0.70, "w": 0.46, "h": 0.46, "punto": 12, "renk": "vurgu" },
{ "oge": "adim_basligi", "x": 1.55, "y": 0.68, "w": 10.8, "h": 0.60, "punto": 28, "kalin": true },
{ "oge": "gorsel_karti", "x": 0.90, "y": 1.75, "w": 5.20, "h": 4.30, "kose_yaricapi": 0.12 },
{ "oge": "eylem_metni", "x": 6.35, "y": 1.95, "w": 5.75, "h": 0.90, "punto": 15 },
{ "oge": "gerekce", "x": 6.35, "y": 3.10, "w": 5.75, "h": 1.10, "punto": 13 }
]
}它带来的好处并不是生产速度,而是一致性不再取决于注意力。一张幻灯片不可能对齐错误,因为对齐方式根本不在幻灯片自身里定义。
这里有一条关键规则:如果某段内容无法套进现有的任何一种类型,解决办法不是为那张幻灯片写一个特例。要么把内容拆开,要么对模板做一次永久性的修订。一次性的特例积累下去,迟早会让模板本身失去意义。
把约束变成数字
类型化模板最被低估的好处,是让设计约束变得可以度量。
手工作业时,"标题别太长"只能停留在一句愿望。而在模板层,同一件事是一个数字:标题区域是这个宽度,字号是这个大小,因此能容纳的最大字符数就是这么多。
"T4_adim": {
"metin_limitleri": {
"adim_basligi": { "maks_karakter": 60, "satir": 1 },
"eylem_metni": { "maks_karakter": 120, "satir": 2 },
"gerekce": { "maks_karakter": 150, "satir": 2 },
"uyari": { "maks_karakter": 210, "satir": 3 }
},
"tasma_kurali": "Metni kısalt, kartı büyütme. Ekrandan çıkan bilgi seslendirme metnine taşınır.",
"gorsel_kisiti": { "en_boy_orani": "4:3", "min_cozunurluk": "1200x900" }
}这个数字一旦被写下来,溢出的文字就不必再等着被肉眼发现,而是在生成之前就被捕捉到。错误不是在打开文件时才暴露,而是在文件生成之前就已显现。
这是手工作业不可能做到的。用眼睛检查一份演示文稿,意味着要从头到尾读一遍。而一个把约束转化为数字的系统,几秒钟就能完成这件事,并且不会疲劳。
让配音稿出自同一个数据源
如果你制作的是培训视频,幻灯片本身并不是唯一的产出物,它旁边还有一份配音稿。事后再写这份稿子是一种常见做法,而且代价不低。因为在写配音稿的过程中,你会把幻灯片的流程重新通读一遍,发现某些幻灯片需要拆分,某些的顺序需要调整。也就是说,幻灯片的制作等于又做了一遍。当你把配音稿定义为内容层中的一个字段时,这种重复就消失了。幻灯片上的文字,和这张幻灯片里要说的话,并排存放在同一条记录之中。{
"id": "adim_03",
"sablon": "T4_adim",
"gorsel": "adimlar/03_bloom.png",
"ekran": {
"adim_basligi": "Kahveyi ıslatın",
"eylem_metni": "30 ml suyu dairesel dökün, 30 sn bekleyin.",
"gerekce": "Karbondioksit çıkmadan su kahveye eşit dağılmaz."
},
"seslendirme": "Otuz mililitre suyu merkezden başlayarak dairesel biçimde dökün ve otuz saniye bekleyin. Bunu yapıyoruz, çünkü kahvedeki karbondioksit çıkmadan su tabana eşit dağılmaz.",
"tahmini_sure_sn": 12
}对土耳其语来说,这里还要再加上一个细节。如果在写稿时不把配音引擎的朗读行为考虑进去,事后的修正就意味着要把整套内容重新检查一遍。而当"缩写要写成完整形式""数字要按读音书写""句子长度要控制在能够换气的范围内"这类规则本身成为内容层的一部分时,这份负担就不复存在了。"seslendirme_kurallari": {
"yerlesim": "Konuşmacı notları alanı. Slayt üzerine metin kutusu olarak yazılmaz.",
"slayt_basina_maks_kelime": 60,
"okuma_hizi_kelime_sn": 2.6,
"okunus_donusumu": [
{ "ekran": "92 °C", "seslendirme": "doksan iki derece" },
{ "ekran": "1:16", "seslendirme": "bire on altı" },
{ "ekran": "30 sn", "seslendirme": "otuz saniye" }
],
"yasak": [
"Kısaltmaları harf harf okunacak şekilde bırakmak",
"Parantez içi ifadeleri olduğu gibi okutmak",
"Noktalama işaretlerini metne yazmak"
]
}修订的成本
模板化生产最实在的回报,并不出现在你的第一次制作中,而是出现在第二次。
手工制作的一套内容里,内容一旦修订,就要一张一张地过。一个改动过的定义,必须在它出现的每一处被手工找出来并改正。这件事因为耗时而被推迟,又因为被推迟而不断累积。
在绑定了数据层的生产中,修订不过是改一下相应的字段,然后重新运行生成流程。产出物会从头重新生成。这里不存在"局部更新"这种东西,因此也就不存在"做了一半的更新"。
随之而来还有第二个收益。由于内容层是纯文本,它可以纳入版本管理。你能看到两个版本之间的差异,能追踪哪个模块里改了什么、是谁改的。在二进制的演示文稿文件里,这是做不到的。
生成后的校验自动化生产有一个无声的危险:命令没有报错地执行完毕,文件也生成了,问题却要等到打开文件时才显现出来。图片以错误的比例排布、透明背景的图片与蒙版对不上、某个文本框溢出——这些都不是会中断生产的错误,它们只是毁掉了产出物。正因如此,在生产流水线的末端加上一个校验步骤,与流水线本身同样重要。
每张图片是否符合预期比例、每个文本框是否都在限制以内、每张幻灯片是否都归属于某一种模板类型——这些都在生成之后立即被检查。缺少这一步而搭建起来的系统,只会变成一个更快地制造错误的系统。
什么时候不值得?
这套方法有它的搭建成本,并不是在每一件工作里都能收回。
如果你只做一份一次性的演示文稿,手工反而更快。如果每张幻灯片都要有各自独特的设计,模板这套逻辑本来就行不通。如果内容的结构每次都在变,那么你不是在定义模板,而是每次都被迫重新定义一遍。
这种方法只在存在重复的地方才划算:也就是同一种结构的内容,要围绕不同主题大量生产的场景——培训课程、产品介绍系列、定期报告、多语种内容制作。
如果要给一个粗略的门槛:当你发现自己第三次在手工搭建同一种结构时,就该停下来去写模板,而不是再去搭建第四次。
小结
在重复性的生产中,决定质量的与其说是每一次都足够细心,不如说是你把多少个决策一次性做完并固定了下来。
当你把设计决策从生产的那一刻抽离出来、迁移到一个数据层里时,你得到的是:一致性被切实地保证下来,错误在文件被打开之前就被发现,修订变得廉价,以及这份工作变得可以移交。
最后一点或许才是最重要的。手工做出来的一套内容,依赖于做它的那个人;而绑定在模板上的生产,任何能够提供同样内容的人,都可以重复出同样的结果。
回头见