Show HN:實時唇形同步頭像,讓你的GPU代替你參加站立會議
一位開發者因朋友對強制開啓攝像頭政策不滿,創建了ScrumSurvivor——一個開源的Windows應用,利用Wav2Lip技術實時生成逼真AI頭像,替代真實攝像頭畫面。該應用完全本地運行,無需雲服務,支持呼吸、眨眼等自然動作,並解決了音視頻同步問題。
幾個月前,一位朋友打電話向開發者抱怨:公司新實施了全體內部會議必須開啓攝像頭的政策。名義上是為了提高參與度,但實際上只是讓大家每天多花45分鐘盯着昏暗燈光下疲憊的面孔,聽一個已經通過郵件發送過的PPT。這位朋友並非想逃避會議或偷懶——他每次都參加,被點名時會發言,也完成了自己的工作。他反對的是這種強制的“在場表演”——即認為攝像頭對着臉就等於參與。
他問是否有巧妙的解決辦法。於是,開發者花了幾個週末的時間,最終推出了ScrumSurvivor——一個開源的Windows應用程序。它能夠用基於用户照片生成的逼真AI頭像實時替換攝像頭畫面。當用户説話時,Wav2Lip技術會根據實際語音同步嘴唇動作;當用户沉默時,頭像會自然呼吸、眨眼並做出微小的頭部晃動,所有這些動作都是程序化生成,而非循環播放。一切都在本地運行,使用消費級NVIDIA GPU,無需雲端處理、無訂閲、數據不離開設備。
ScrumSurvivor的工作原理是攔截攝像頭和麥克風的數據流,進行處理後再發送給Teams等會議軟件。視頻方面,OBS虛擬攝像頭為Teams提供1280×720分辨率、25幀每秒的畫面,包含靜態背景照片和動態頭像層。音頻方面,VB-Audio虛擬線纜創建了一個音頻迴環,應用程序處理後的麥克風音頻延遲265毫秒寫入,正好用於Wav2Lip推理。Wav2Lip接收80頻段梅爾頻譜圖和96×96人臉區域,生成匹配音頻的嘴唇動畫。在RTX 3050筆記本GPU上,每幀推理約需20毫秒,足以達到25幀每秒。系統在啓動時使用MediaPipe從基準照片中檢測人臉,後續所有推理均使用固定裁剪區域,無需逐幀檢測。
在用户未説話時,系統播放預先錄製的短片段,併疊加四層獨立程序化動畫:呼吸(身體區域約0.25Hz的垂直襬動)、頭部晃動(每軸兩個獨立正弦波組合,產生非重複微動)、眨眼(每4-8秒隨機觸發一次快速閉眼再睜開)以及模擬真實攝像頭傳感器的每像素高斯噪聲。所有片段切換使用平滑過渡,無可見剪輯。開發者的一位朋友已使用數月,無人察覺異常。
音頻同步是最具挑戰的工程問題。Wav2Lip推理延遲約20毫秒,導致嘴唇滯後於聲音。解決方案是延遲音頻輸出:AudioPresentationScheduler維護一個環形緩衝區,將傳入麥克風音頻塊安排在恰好等於視頻處理延遲的未來時刻寫入虛擬線纜。此外,冷GPU啓動時首次推理可能耗時1-2秒,因為NVIDIA驅動需編譯JIT內核。解決方案是啓動時進行預熱循環,最多執行20次推理,直到推理時間穩定低於50毫秒。任何因CUDA初始化緩慢產生的音頻積壓,調度器會自動丟棄超過2秒的部分,避免永久性延遲。
開發者刻意未實現雲端推理、實時面部替換或身份交換。頭像始終是用户本人,基於其照片生成,且不模仿任何人。ScrumSurvivor以MIT許可證開源,僅支持Windows 10/11,需要支持CUDA的NVIDIA GPU(最低4GB顯存),設置時間約1小時。