iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
ChatGPT & Codex

43歲非工程師爸爸與Codex共築墨寒:30天打造開源AI桌面伴侶系列 第 11

Day 11|讓墨寒不是只會張嘴:A/I/U/E/O 嘴型同步

  • 分享至 

  • xImage
  •  

墨寒在聲音排練室讓嘴型、眼神與眨眼各自接上節奏

圖說:墨寒在聲音排練室讓嘴型、眼神與眨眼各自接上節奏

墨寒表情與嘴型系統總覽

圖說:墨寒表情與嘴型系統總覽

昨天我們終於把聲音可靠地轉成文字,今天輪到墨寒開口。

我早期看桌面角色說話時,最容易接受的做法就是「有聲音就張嘴,沒聲音就閉嘴」。只要畫面會動,第一眼確實像在說話;多看幾秒後卻會發現,那張嘴比較像音量指示燈,和實際發出的字沒有關係。

真人說「一」和「喔」時,嘴形明顯不同。角色不必做到電影級臉部捕捉,至少要有幾個能讓眼睛相信的形狀。墨寒目前使用 A、I、U、E、O 概念的母音嘴型,加上子音或過渡形狀,讓聲音與畫面不再只是一起開始、一起停止。

音量只告訴我們多大聲,沒有告訴我們在說什麼

若只依聲音大小控制張嘴,任何響亮音節都會張到最大,安靜音節就變小。「啊」與「喔」音量相同時,畫面仍長得一樣。角色像在嚼口香糖,而不是說中文。

嘴型同步要的是另一種線索:這個時間點比較接近開口的 A、扁寬的 I,還是圓唇的 U/O。雲端語音若能提供較精細的時間資料,就依那條線走;Windows 本機語音則使用系統能提供的事件或較保守的估算。兩種引擎能力不同,最後都轉成角色看得懂的幾種嘴型。

我不追求每一個中文字都像真人口型老師般精準。桌面角色尺寸有限,過度快速切圖反而會抖。真正目標是讓主要口形方向正確、轉換平順,並在句子結束時可靠閉嘴。

一個像素,足以讓她像換了一張臉

嘴型圖不是只畫嘴巴再貼上去。每一張表情的臉部位置、頭部角度與透明邊界可能略有不同;嘴唇圖層若偏一個像素,就可能出現黑線、重影或像貼紙滑動。

我曾為眼皮旁的一條黑線、嘴唇邊界的一點雜色反覆檢查。這些問題在原始大圖裡很小,放到透明桌面角色上、連續切換後卻特別明顯。使用者未必能說出是哪個像素錯了,只會直覺覺得「她的臉怪怪的」。

所以素材不能只檢查單張是否漂亮,還要把待機、眨眼、每個嘴型來回播放,看邊緣是否穩定。這也預告了 Day 13 要談的逐圖錨點:嘴巴必須知道自己在每張圖上的正確位置。

最重要的嘴型,其實是閉嘴

說話中的 A、I、U、E、O 很吸睛,但我遇過更破壞體驗的 Bug 是:聲音已經播完,墨寒仍張著嘴。

這通常不是缺少一張閉嘴圖,而是結束訊號沒有走到最後。可能播放被取消、雲端失敗、Realtime 被打斷,或新一句話太快接上。只測正常播放到結尾,很容易漏掉這些分支。

我因此把驗收條件寫得很直接:正常結束要閉嘴;取消要閉嘴;錯誤要閉嘴;Realtime 停止也要閉嘴;接著開始下一句時,不能先閃回上一個嘴型。閉嘴不是沒有功能,而是整段說話正式交棒回待機的證明。

嘴巴在動,眼睛與身體不能停工

墨寒說話時仍要眨眼、保持注視,也可能帶著 AI 回覆指定的情緒。若嘴型素材是一整張完整人物圖,每切一次嘴就把眼睛與身體也換掉,眨眼、視差與呼吸會被吃掉。

比較合理的方式,是讓嘴型只改自己負責的區域,或讓不同完整素材仍共享一致的定位與動作規則。說話狀態的優先權要足以接管嘴巴,卻不能任意取消安全提醒、角色姿態或必要表情。

這也是為什麼我一直強調「不得影響原有的眨眼、眼球追蹤、臉部視差、身體微轉向與呼吸」。嘴型修得再準,如果墨寒一開口就整個人僵住,仍然不像活著。

中文、英文與語速,不能只靠五張圖硬撐

A、I、U、E、O 是容易理解的分類,不代表每一種語言真的只有五種嘴形。中文有圓唇、展唇與複合韻母,英文也有不同母音與連續子音;同一個人說快、說慢,嘴形停留時間也不同。

目前墨寒採取的是桌面角色可負擔的近似:把較細的聲音線索歸到幾個視覺差異明顯的形狀,中間使用過渡嘴型,不試圖假裝成專業三維臉部捕捉。這個取捨也讓繁中、簡中與英文能共用同一組角色素材,不必為每個音素畫一張幾乎看不出差別的嘴。

真正要避免的是錯誤映射。例如圓唇聲音長時間顯示扁寬嘴,或子音間隙仍維持最大張嘴。Codex 能用時間序列檢查分類與收尾,我則用不同語言短句觀看節奏。若未來有配音或動畫專業者參與,也可以在不破壞現有介面的前提下改善這套映射。

這樣寫也比較誠實:墨寒有母音嘴型同步,但不是宣稱已達到逐音素、逐語言都完美的口型捕捉。

我會怎麼看一段嘴型測試

程式測試可以餵入固定時間點,確認每種聲音線索對應到正確嘴型、播放結束回到閉嘴,也能用假的語音引擎檢查取消和錯誤。實機驗收則要播放長短不同、母音明顯與語速不同的句子,觀察是否太快閃爍、音畫錯位或最後殘留。

我還會在一般雲端語音、Windows 本機語音與 Realtime 間切換。因為三條路如果各自留著舊的嘴型控制,單獨看都能動,切換時才會互相打架。修正完成的標準不是某一段示範看起來漂亮,而是每一條入口都把控制權交給同一套時間規則。

一位非工程師未必能寫出嘴型演算法,卻完全可以用眼睛與耳朵抓出不自然的瞬間,再把它改寫成「哪條語音路徑、什麼時候、預期回到哪個狀態」。這就是我在墨寒開發中最常做的工作。

明天 Day 12,我會讓墨寒先安靜下來。她不說話時,眨眼、呼吸、注視與微轉向要怎麼讓人感覺她仍在,又不會像桌面上一直躁動的玩具?


嘴型同步的自動測試能檢查時間與狀態規則;素材邊界、音畫感受與不同 Windows 聲音仍需實際觀看、聆聽。


上一篇
Day 10|她到底有沒有聽懂?從語音轉文字到混合轉錄
下一篇
Day 12|眨眼、注視與微動:桌面角色「活著」的錯覺從哪裡來
系列文
43歲非工程師爸爸與Codex共築墨寒:30天打造開源AI桌面伴侶18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言