不抱太大期望,讓 AI 幫我調 OBS 麥克風

2026-10-09 · 2,731 字 · 6 分鐘

我偶爾需要錄一點參考用的影片,大多是一邊打字一邊講解操作。設備是 RØDE NT-USB Mini 接 Mac,用 OBS 錄。內容不難,麻煩的是聲音。

收音調高一點,聲音是清楚了,但背景那層沙沙的底噪也跟著變大。調低一點,底噪沒了,可是我的聲音也變得又小又悶。想兩邊都顧到,就只能試著靠近麥克風,或是講話時特別朝麥克風的方向講。可是錄的時候常常要轉頭看第二個螢幕,一轉頭就離麥克風遠了,錄出來的效果時好時壞。

過去我都只能先接受這個狀況:聲音小一點,背景的底噪也跟著小一點。也沒特別想過能怎麼調整,畢竟 OBS 的選項太多,我自己也弄不清楚哪些比較方便、適合這種情況。

之前看過不少人拿 AI 來處理自己搞不定的問題,像最近很紅的例子,有人用 webcam 拍下自己電腦的畫面,請 AI 試著調整顯示卡 driver 的顏色呈現。我想,反正錄影都會存檔,這些檔案應該也能交給 AI 自動分析才對。這次也沒抱太大期望,就是想試試看,交給 AI 會不會有不一樣的結果。

先來一個不良示範

一開始我並沒有想到,可以請 Claude Code 去分析錄影檔,看說話時有多少分貝、停頓時的底噪又有多少。那時候我甚至還沒意識到底噪這個現象,只是跟 Claude Code 描述了一個悶悶的、不太明確的狀態:「悶、不夠清楚、有雜音」。回頭看,這大概是剛開始用 AI Agent 輔助工作時很常見的起手式:丟出一個無法衡量的描述,期待它替我完成心中的目標。

Claude Code 先檢查了麥克風、取樣率、系統權限這些基本設定,都沒問題。接著它根據經驗判斷增益太高了,所以雜音明顯,於是把收音調低,再加上一整套處理:AI 降噪(RNNoise)、噪音閘門、壓縮器、限制器。我錄了一段來聽,第一個反應是「原本的比較好」。聲音更悶了,而且停頓的地方會突然變成完全的靜音,講話一斷一斷的,很不自然。

我的智商終於上線了

照著本能和直覺做事,不一定會剛好符合 best practice。所以我還是得提醒自己,比較正確的用法,是盡可能拿可觀測的事實,最好是能用程式量化的事實,當作讓 AI Agent 判斷成果好壞的標準。

會想到這一步,是因為 Claude Code 先替我分析了剛剛那段錄音。它列出的各項數值,老實說我完全不在意,但看到那些數字的瞬間,我腦中像被敲醒一樣:我應該請它幫我比較不同的錄音成果,把每一段萃取出來的特徵放在一起,看看彼此差在哪裡。

於是 Claude Code 用 ffmpeg 分析了幾個不同設定下的錄影檔,比較三件事:整體響度、停頓時的底噪有多大、說話時有多大聲。

量出來的結果跟一開始的判斷剛好相反。原始錄音的響度大約是 -35 LUFS,語音內容常見的目標大概在 -20 到 -16 LUFS,差了一大截。問題不是太大聲,是太小聲。

Claude Code 順便解釋了一件我之前沒想過的事:調低增益並不會降噪,只是把我的聲音和底噪一起變小而已。播放的時候為了聽清楚又得把音量轉大,底噪就原封不動地回來了。真正決定底噪比例的,是嘴巴離麥克風多遠、環境有多安靜,增益只是整體放大縮小。

至於不良示範那次看起來很漂亮的降噪結果,停頓時底噪低到 -88 dB,其實是噪音閘門把聲音整段切掉了,不是環境真的變安靜。

讓 Claude Code 直接動手調 OBS

一旦看到 Claude Code 能產生可以比較的數據,我的直覺反射就是:這件事得自動化。原本的流程是 Claude Code 改設定檔,我得先把 OBS 關掉,等它改完再打開,然後再錄一段給它分析。這樣來回幾次實在太沒效率了。

這其實就是日常軟體開發裡提高迭代效率的手法:把需要人工介入的麻煩步驟,盡可能找地方排除掉。另外,也不用在每一輪小迭代裡都跑最完整的測試,只要從完整流程裡截取最小、相關的那一段,把它自動化就夠了。

這次的對象是 OBS,剛好它內建了 WebSocket 伺服器(工具 → WebSocket 伺服器設定),打開之後,外部程式就能連進來讀取和修改設定,不用關掉重開。所以 Claude Code 寫了幾支小腳本,透過 WebSocket 連到 OBS,可以直接做這些事:

即時音量表就是那個「最小的一段」。完整的驗證是錄一段影片再分析檔案,但每一輪小調整其實只需要知道音量和底噪有沒有變。Claude Code 先啟動量測,我對著麥克風照平常的方式講 15 秒,它就能告訴我底噪多少、說話時的峰值多少。不用錄影、不用關掉重開 OBS,調完馬上量。

一次只改一個地方

有了量測工具之後,接下來改成一次只改一個變數,改完先看數字,再用耳朵聽。

第一步先把不良示範時加上去的降噪和閘門關掉,系統收音音量調回原本的設定。接著用即時音量表量,說話峰值大約在 -24 dB,離目標還差 12 dB 左右。

第二步在濾鏡最前面加一個 +12 dB 的增益。這裡踩了一個小坑:增益濾鏡建立後被放到了最後面,排在限制器後面,限制器就失去了防止爆音的作用。要另外把它移到最前面才對。補完增益之後,說話峰值來到 -11 dB,響度也到了 -22.5 LUFS,聲音終於夠大了。

但我馬上聽到沙沙聲變明顯了。這是預料中的事,聲音整體放大,底噪也一起被放大。

第三步,加一個溫和的擴展器(expander)。這一步加完,我聽完的評價是「這一版很好」。

為什麼是擴展器,不是降噪或閘門

老實說,就算 Claude Code 都調完了,這些濾鏡我還是不懂,頂多大概有個感覺,知道 Claude Code 在忙什麼。我只知道 OBS 的濾鏡可以做一些條件判斷,在音量接近底噪邊緣的時候做動態調整,剩下的細節都是借 Claude Code 的手完成的。

照 Claude Code 的解釋,噪音閘門比較像自動門,聲音小於某個門檻,門就直接關上,變成完全靜音;一講話門又打開。所以停頓時會「啪」一下變安靜,聽起來一頓一頓的。AI 降噪則是會連人聲的一些細節一起修掉,聲音因此更悶。

擴展器比較溫柔。它不會把聲音關掉,只是把小於門檻的聲音再壓小一點。最後用的設定是門檻 -40 dB、比例 2:1,意思是講話的時候幾乎不受影響,停頓時的底噪則被往下壓。實際量起來,停頓時的底噪從 -44 dB 降到 -66 dB,說話音量維持不變,兩者的差距從 23 dB 拉開到大約 45 dB。

最後的結果

最終的濾鏡順序是:增益、擴展器、壓縮器、限制器。降噪和閘門保留在清單裡,但不啟用。

項目 調整前 調整後
整體響度 約 -35 LUFS 約 -23 LUFS
說話峰值 約 -24 dB 約 -11 dB
停頓時底噪 約 -64 dB 約 -66 dB

最有感的是第一列和最後一列放在一起看:聲音大了將近 12 dB,停頓時的底噪卻沒有變大。這正是我一開始想要、卻一直調不出來的狀態。

Claude Code 最後把這組設定存成一個叫 clear-voice-v1 的預設檔,加上一支套用腳本。之後如果設定被改亂,或是換了電腦,跑一次就能把整組濾鏡建回來。嘴巴離麥克風保持在 10 到 15 公分左右就夠了,轉頭看另一個螢幕時也不用刻意遷就麥克風。

與其說學到,不如說是反省

回頭想想,這次好像也說不上學到什麼,頂多是一次反省。就算是已經天天在用 Claude Code 的我,碰到不常接觸的領域,還是會丟一個模糊的需求要它改,然後擅自覺得挫折。

所以,想要得到好的結果,重點不在於手上有沒有某個數值,而是要把模糊的問題描述,轉化成能夠取得觀測數值的方法。有了方法,就能在多個結果之間用比較具體的方式衡量,AI Agent 也能根據這些數字自我回饋。同時,再透過人工驗證,確定結果真的符合期望。這次的數字負責告訴 Claude Code 往哪裡調,我的耳朵負責確認調出來的聲音是我要的。