← 開發筆記

錯時間的字幕,比沒字幕更糟

2026 年 8 月 · DeepSRT 開發筆記

只信錨點、不信時長的字幕工程。

1.3.0 上架那天晚上,我們拿真實世界的影片來虐它——財經頻道的週末點評、多人對談的靈異 podcast、大馬外景的探靈實錄。AI 逐字稿是 1.3.0 的主打功能:影片沒有字幕軌,DeepSRT 就請 Gemini 直接「看」影片,即時字幕、逐字稿、摘要照常運作。

文字幾乎每次都是對的。時間,幾乎每次都有自己的想法。

模型聽得懂,但抓不準拍子

第一支影片回來 16 條字幕,每條剛好 60 秒——一整分鐘的講稿疊成一面牆掛在畫面上。我們要求它切細一點,它從善如流地給了 181 條漂亮的小字幕,然後時間軸一路漂移:中段慢了幾十秒,最後一條落在 4181 秒——影片全長只有 858 秒。

這不是我們的 prompt 寫壞了。這是整個社群都記錄過的 Gemini 限制:它無法產生 SRT 等級的精確時間戳,而且粒度和準度是互相交換的——逼它切細,它就漂給你看。

公平地說,Google 的官方文件從來沒有承諾過字幕級的時間精度——能力清單寫的是「描述、切分、擷取資訊、參照特定時間戳」,而「參照時間戳」和「產生毫秒級的 SRT」是兩件事。YouTube URL 輸入本身也還在 preview(免費、每天 8 小時額度、規則隨時可能變)。我們是在一個官方都還標著 preview 的地基上,蓋一個需要對時精度的功能——這就是為什麼下面這張表裡,每個專案都在同一面牆前轉了向。

官方怎麼說對 DeepSRT 的意義
Preview「The YouTube URL feature is in preview and is available at no charge. Pricing and rate limits are likely to change.」我們把功能標成 preview 不是保守——上游本身就還沒定案
額度免費層每天最多 8 小時 YouTube 影片,僅限公開影片你的每日額度,官方出處在此
成本影片以 1 FPS 取樣;低解析度約 100 tokens/秒(預設 300)我們實測約 91 tokens/秒,與官方數字吻合——也是「每次請求都重新攝取整支影片」的成本由來
能力能力清單:describe、segment、extract information、refer to specific timestamps官方從未承諾字幕級時間精度——「參照時間戳」和「產生毫秒級 SRT」是兩回事

別人怎麼處理

動手修之前我們先查了社群——遇到這面牆的不只我們,而且每一家最後都選擇了某種形式的放棄

專案遇到的阻礙他們的決定
pyVideoTransGemini 無法產生 SRT 等級的精確時間戳;批次任務還會忘記格式、亂切段落放棄向 Gemini 要時間。下載音訊,用 VAD 做毫秒級切段,Gemini 只負責文字
yt-whisper 系列需要精確時間軸放棄多模態模型這條路。下載音訊,整包交給 Whisper
video-intel分塊轉錄時間戳跨塊錯位、小時位遺失、內容靜默缺漏;換更強的模型反而更糟放棄即時等級的精度。做離線逐字稿供翻譯與檢索,靠分塊、正規化、涵蓋率檢查層層防禦
gemini-transcribe細粒度時間戳不可靠放棄細粒度。標榜「邏輯分組的時間戳」——給人讀的,不是給播放器對時的

看出模式了嗎:拿得到音訊的,都逃去找 VAD 和 Whisper;拿不到的,都放棄了精確時間。而我們兩條路都不通——DeepSRT 不下載影片,這是產品承諾,也是這個功能存在的前提;但即時字幕又必須對時。我們是在做一件公開資料裡找不到成功先例的事。

我們的決定:只信錨點,不信時長

反覆量測之後,規律浮現了:模型說「這句話幾分幾秒開始」大致可信,說「這句話講了多久」經常是編的。

有多離譜?某支 33 分鐘的影片,模型宣稱一條 22 個字的字幕橫跨 2,723 秒。另一輪它給了「無縫覆蓋全片」的答案——但把字數除以時長,語速是每秒 0.3 個字。中文口語每秒三到六個字。沒有人講話講得比一炷香還慢。

所以 1.4.0 的字幕引擎把信任邊界劃在這裡:

寧可留洞,不可瞎猜

最難的一課來自那支探靈影片。大量空景、環境音、間歇的對白——模型把散落在幾分鐘裡的零星對話打包成一條字幕。這種時候把文字擠回錨點是錯的(畫面上出現六分鐘後才會說的話),攤開來也是錯的(每句話糊在螢幕上二十秒)。兩種都是瞎猜。

探靈影片在 DeepSRT 中播放,AI 即時字幕與逐字稿欄運作中
「最難一課」的本尊:馬來西亞探靈實錄——大量空景、間歇對白,這支影片沒有字幕軌,AI 即時字幕與右側逐字稿照常工作。

所以我們不猜:打包的字幕直接丟掉,讓那段時間變成一個洞。引擎逐段檢查涵蓋率,發現洞就針對那個範圍重新轉錄——範圍問題通常會得到範圍答案,時間反而是準的。補不起來的,畫面上誠實告訴你「這幾分鐘轉不出來」。

尖叫、人群、純音樂的段落本來就沒有可轉錄的話語。空白不是故障——假裝有才是

說實話:這還不完美

上面那張表值得再看一眼——各家專案紛紛在「精確時間」面前轉向,不是他們不夠努力,是這個問題在只有 URL 的約束下還沒有完美解。我們的做法讓字幕從「不可用」進步到「跟得上」,但時間對位是段落級的,偶爾還是會有慢半拍的瞬間。

所以我們的誠實建議:把 AI 摘要和逐字稿當主要功能用——那兩個是可靠的;即時字幕當參考。這部分還需要更多打磨,而它會持續打磨下去——這正是這個功能標著 preview、預設關閉、用你自己的 key、並且我們提醒你先設好每月支出上限的原因。

有字幕的影片完全不受影響——原生字幕軌永遠優先,AI 轉錄只在影片真的沒有字幕時出手。

1.4.0 release notes

fancam 在 DeepSRT 隱藏面板佈局下全視窗播放,AI 即時字幕運作中
隱藏面板佈局:整個視窗留給影片。這支 fancam 沒有字幕軌——歌詞是 AI 即時轉錄的。
LISA 測謊影片全視窗播放,原生字幕即時翻譯成中文
原生英文字幕軌即時翻成中文,最大畫面模式。
小技巧:即時字幕的大小用鍵盤 + / − 直接調,位置用滑鼠按住拖曳就能上下移——超級簡單,試試看。

DeepSRT 買斷制,在 Mac App Store 上架中。AI 逐字稿需要你自己的 Gemini API key。1.4.0 現正審核中。