工具简介
唇形同步是把声音拆成最小单位再逐个换成嘴形的技术。本文讲清音素、对齐、协同发音三个关键环节,解释中文口型比英文难的三个原因,并给出静音看、慢放看、念数字三个自己就能做的检查办法。
判断一个数字人真假,很多人的经验是:不用听声音,看嘴就行。人对口型的敏感程度远超自己以为,差半拍就能察觉,说错一个字的口型立刻就觉得别扭。这门让嘴和声音对上的技术,行话叫唇形同步,它要解决的事很朴素:把声音拆成最小单位,再一个个换成对应的嘴形。
一、先把声音拆开:音素是什么
音素是声音的最小单位,一个音素对应一段嘴形基本不变的声音。汉语拼音里的声母和韵母大致就对应音素,比如妈这个字,拆成 m 和 a 两段。机器处理语音时,第一步就是把文字转成音素序列,再算出每个音素在时间轴上的起止点,这一步叫音素对齐。有了这张时间表,它才知道第几毫秒该发什么音,接下来才能安排嘴形。所以口型不准,问题经常不在画面,而在这张时间表没算准,尤其是语速快、连读多的时候。顺带说清一个容易混的说法:唇形同步和口型驱动经常被当成同义词,前者强调对齐这件事,后者强调产生动作的整套机制,日常说法里混着用也没人纠正你。
二、音素到嘴形:一张对照表加一层过渡
最朴素的做法是查表:m 闭嘴,a 张大嘴,i 嘴角往两边拉,u 嘴唇收圆。但真人说话不是一个个音素孤立地蹦出来,而是连绵不断的。发 a 的时候,嘴已经在为后面的 i 做准备了,这种现象叫协同发音。所以系统不能查完表直接播,还要在相邻嘴形之间做插值和重叠,让过渡平滑。做得好的系统会把前后两个音素的影响都算进去,嘴形变化像水波一样推过去;做得糙的系统,嘴形一个接一个地跳,看着像在念电报。另一个细节是气息音,像喝、哈这类音几乎没有明显嘴形,只能靠张嘴的幅度和时长来暗示,模型如果给它配了一个很夸张的口型,反而显假。
三、中文为什么比英文难
有三个原因。第一是声调。汉语一个音节配一个声调,同一个音节配上不同声调,嘴形的开合程度和持续时间都会变,而很多口型模型是按没有声调的语言训练的,处理不了这个差异。第二是音节密度。汉语一个音节平均只有两三个音素,说得快时一秒能吐出五六个音节,嘴形变化极密集,模型来不及过渡就容易糊成一片。第三是口型幅度小。汉语很多音发音位置靠里,嘴唇动作不明显,画面上可参考的信息少,一旦对不准就特别显眼。还有一个现实难题是中英混说,一句话里夹着英文单词,音素体系要临时切换,很多系统在这里会卡一下,嘴形出现明显停顿。
四、两条技术路线
一条是规则驱动,靠音素表加人工调的过渡曲线,稳定、可预测,但机械感强,遇到连读和情绪变化就僵。另一条是数据驱动,让模型从大量真人说话的视频里自己学声音和嘴形的对应关系,泛化好、自然,但需要海量素材,偶尔会生成奇怪的嘴形。现在多数产品用混合做法:主干是数据驱动,再用规则做约束,避免出现张不开嘴或者牙齿糊掉这类低级错误。选工具时可以特意让它念一段绕口令,这类文本最容易暴露问题。评估两条路线还有个简单指标:让它念一段密集合唇音的句子,看双唇有没有真的合上,这是最容易被偷懒省掉的地方。
五、自己怎么检查口型
有三个笨办法很管用。第一,把视频静音看一遍,只看嘴,如果嘴形和你能读出的字对不上,说明有问题。第二,慢放到四分之一速,看每个字的嘴形有没有到位,特别是闭合音,比如不和么,这类音需要双唇合上,漏掉就很明显。第三,让它念一串数字或者一段带英文缩写的句子,数字和字母的读法不固定,最考验对齐。这三关过了,日常口播基本不会因为口型被挑毛病。
口型是数字人最容易翻车、也最容易改进的一环。如果你的成片被人说假,先别急着换模型,把语速调慢一成、把停顿加长一点,很多时候观感立刻就回来了。改完再静音看一遍,这次你多半能看出差别。

