# Video Subtitles

> 在瀏覽器把影片或音訊轉成 SRT、VTT 或純文字：Whisper large v3 turbo、Qwen3-ASR 靠 WebGPU 在顯示卡上跑，沒 GPU 退回 CPU；Hy-MT2 本機翻譯出雙語字幕，不上傳。

- URL: https://bytescope.dev/zh-Hant/video-subtitles/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/video-subtitles.md) · [ja](https://bytescope.dev/ja/video-subtitles.md)
- Runs: 檔案不會離開你的瀏覽器 — 全部在本機處理。
- Requires: Whisper (downloaded once) transcribes in any browser with WebGPU, and Whisper base also on WebAssembly, several times slower. Gemini Nano, Chrome Speech Recognition and the translation engines need Chrome 138 or newer on desktop. Not mobile browsers.
- Updated: 2026-09-08

## What it does

課堂或會議錄音，不該非丟到雲端語音服務不可。把影片或音訊丟進來，就由你挑的語音辨識引擎在這個分頁轉寫：Whisper 模型——base、small、large（v3-turbo）三種，下載一次存在瀏覽器裡、用 WebGPU 在你的顯示卡上跑——或者 Chrome 內建的 Gemini Nano（走 Prompt API），不用從我們這裡下載任何東西。另一個獨立的選擇器負責翻譯——Hy-MT2（下載一次、用 WebGPU 在顯示卡上跑）、Chrome 內建的 Translator 或 Gemini Nano，全都在裝置上跑——所以同一趟就能出雙語字幕。輸出 `SRT`、`VTT` 或純文字，下載前可以用小表微調時間。隔壁是 Subtitle Converter 跟 Subtitle Sync，分別管格式跟整份平移。

### 模型

語音辨識：Whisper base（小又快，沒有 WebGPU 用 CPU 也能跑）、Whisper small（一般的折衷）、Whisper large v3 turbo（有可用的顯示卡時，英文、中文、日文檔案通常推薦它）、Qwen3-ASR 0.6B（沒有 GPU 時通常推薦它）、Qwen3-ASR 1.7B（比較大的那個 Qwen3-ASR）、Confucius4-R2T2（簡稱 R2T2，在 GPU 上邊辨識邊逐字串流出來的模型）、Gemini Nano（Chrome 內建，不用跟我們下載）、Chrome Speech Recognition（Web Speech：只能用播放速度聽，沒裝本機語言包時音訊會送到 Google）。精準時間戳：Qwen3-ForcedAligner 0.6B——選配、預設關閉、約 1.85 GB，把轉好的逐字稿逐字或逐個字元對回音訊。翻譯：Hy-MT2 1.8B（Tencent Hunyuan-MT 2，在你的 GPU 上跑，有可用顯示卡時就是預設）、Chrome Translator（內建，沒有 GPU 時的預設）、Gemini Nano。全部在瀏覽器裡跑：Whisper、Qwen3-ASR、R2T2、Hy-MT2 和 ForcedAligner 都是透過 WebGPU 在你的顯示卡上跑，「通用 GPU」版照顧沒有 shader-f16 的舊卡（例如 GTX 10 系列），「快速 GPU」版在顯示卡支援時改用 f16，沒有可用的 GPU 時，Whisper、Qwen3-ASR 和 ForcedAligner 會退回 CPU（WebAssembly，慢一些），R2T2 還是只建議在 GPU 上跑，翻譯則從 Hy-MT2 改成 Chrome Translator。下載一次，所有 ByteScope 工具共用。

### 模型該選哪個

處理檔案的話，英文、中文、日文的推薦模型是照我們實測的準確度排的：有能用的顯示卡通常是 Whisper large（v3-turbo），沒有的話通常是 Qwen3-ASR 0.6B；一樣準的話，已經下載好的優先。下載好的模型會用這台電腦跑得動的最快速度把整份錄音處理完，下載一次所有 ByteScope 工具共用；Whisper 三種大小是速度和準確度的取捨——base 小而快，沒有 WebGPU 也能用 CPU 跑（慢）；small 是中間的選擇；large（v3-turbo）最重，有顯示卡時也比 base 和 small 更準。Gemini Nano 只要你的 Chrome 有提供就不用下載，會把音訊切成 30 秒一段餵給模型。Chrome 內建的語音辨識也在清單裡，但卡片上會老實寫：它只能照播放速度聽，一小時的影片就要一小時，而且預設模式會把音訊送到 Google 的伺服器。任何下載都會先問過你——這台電腦還沒有的模型，會先顯示大小、剩餘空間、你是不是在行動網路上，你按了才開始；下載、驗證、載入記憶體、暖機各自有進度；「測試速度」會拿一段內建的短音訊跑一次，讓頁面估給你看一小時的音訊在這台大概要多久。推薦的選項會標出來並附一行理由；你自己改過的選擇會記住。不管選哪個模型，打開「精準時間軸」（預設關閉）就會再用第二個本機模型 Qwen3-ForcedAligner 0.6B 把轉出來的文字對回音訊：英文逐字、中文和日文逐個字對齊，每句字幕都從真正開口的地方開始、講完就結束，超過 6 秒左右的字幕會在字詞邊界切開。它要多下載一次大約 1.85 GB（跟其他模型一樣會先問你），有顯示卡就用顯示卡跑，沒有就用 CPU、慢很多。中文、英文、日文完整支援，幾種歐洲語言部分支援，韓文不支援；對不上音訊的句子會保留語音模型原本的時間。

### 聲音怎麼進模型

音軌用 `AudioContext` / `OfflineAudioContext` 解開。Web Audio 只存在於 Window，這一步出不了主執行緒（不過編解碼是瀏覽器自己的執行緒在跑。解碼會要求 16 kHz；建不出這個取樣率的 context 時，就由 worker 重取樣。一個容器只解第一條音軌）。混成單聲道跟重取樣則在 worker。之後把音訊一段一段餵給引擎，避免長檔把上下文塞滿。Whisper 的下載進度是這一頁自己量的；Gemini Nano 在這台電腦第一次用時可能會下載本機模型（常常好幾 GB），那邊看到的進度是瀏覽器自己的 `downloadprogress`，不是我們轉的圈。把字幕燒進畫面不在 v1：那要拖 ffmpeg.wasm，這批先不驗證那個需求。

### 雙語字幕

把翻譯選擇器設成一個目標語言，轉寫完的每一句就會在裝置上翻譯，然後寫成雙語的 `SRT` 或 `VTT`——原文在上或譯文在上，你自己選——也可以只出譯文。Hy-MT2 是 1.8B 的模型，下載一次（約 1.3 GB）之後用 WebGPU 在你的顯示卡上跑，電腦有可用的 GPU 就推薦它——我們盲測比較下來它比較準；Chrome 的 Translator 每個語言配對下載一個小語言包，是快的那個，也是沒有可用 GPU 時的預設；Gemini Nano 是比較大的內建模型，每句比較慢。選擇器留在「不翻譯」，整條翻譯管線就不會啟動。

### 做不到的事

Whisper 只要有 WebGPU 或 WebAssembly 就能跑，所以轉寫本身不綁 Chrome；Gemini Nano、Chrome 內建的語音辨識和兩個內建的翻譯引擎都只有 Chrome 才有，Firefox 跟 Safari 沒有；翻譯用的 Hy-MT2 跟 Whisper 一樣，有 WebGPU 的瀏覽器都能跑。Edge 雖是 Chromium，這一頁只寫實際跑過的。Nano 還要模型肯跑的硬體；`unavailable` 是常態，不是 bug，也沒有雲端後路——唯一的例外是 Chrome 內建語音辨識的預設模式，它本來就是雲端服務，卡片上也這樣寫。轉寫品質就是你選的模型在那一段上的表現——漏句、時間飄了，在表裡改；每一句都晚同樣長度，再拿去 Subtitle Sync。

## Limits

Does not burn subtitles into the video or transcribe languages the chosen model lacks; it produces an SRT/VTT file — optionally bilingual — from a local video or audio file.

## FAQ

### 影片或音訊會上傳嗎？

不會——只有一個標明的例外。解碼、切段、Whisper 或 Prompt API 的呼叫都在這個分頁跑。會連網的只有這台機器第一次抓模型的時候，你的錄音不會附在那些請求上。例外是 Chrome 內建語音辨識的預設模式，它會把音訊送到 Google 的伺服器；卡片上有這個徽章，選 Whisper 或 Gemini Nano 就完全避開。

### 模型該選哪一個？

英文、中文、日文，選標著推薦的那個就對了。有能用的顯示卡時通常是 Whisper large（v3-turbo）；沒有的話通常是 Qwen3-ASR 0.6B，不過日文如果已經下載了 Qwen3-ASR 1.7B，就會先推薦它。要是有幾個模型實測一樣準，頁面會挑這台電腦已經有的那個——這是省你一次下載，不代表它比其他打平的模型更準。其他語言選 Whisper small：下載一次、在顯示卡上跑、很多語言都準。這台電腦沒有 WebGPU，或檔案很短只想快點拿到結果，選 Whisper base；它也能用 CPU 跑，只是慢。準確度比時間重要，選 Whisper large（v3-turbo）——下載最大、跑最慢。不想下載任何東西而且你的 Chrome 有提供，選 Gemini Nano。Chrome 內建的語音辨識除非檔案很短否則跳過：它照播放速度聽，一小時就是一小時，預設模式還會上傳音訊。拿不定主意就按卡片上的「測試速度」：頁面會拿一段內建的短音訊跑一次，告訴你一小時的音訊在這台電腦大概要多久。

### 哪些瀏覽器真的轉寫得出來？

Whisper 在任何有 WebGPU 的瀏覽器都能轉寫，Whisper base 沒有 WebGPU 時也能透過 WebAssembly 用 CPU 跑。Gemini Nano 要有 Prompt API 而且吃得了音訊的 Chrome；Firefox 跟 Safari 跑不了，Edge 可能因為是 Chromium 而能用，但對照表在有人實測前標未測。翻譯引擎裡，Chrome 的 Translator 和 Gemini Nano 也一樣只有 Chrome 才有；Hy-MT2 下載一次就在顯示卡上跑，有 WebGPU 的瀏覽器都能翻。就算這個瀏覽器跑不了，說明跟表還是會在。

### 為什麼第一次會下載好大一包？

那是模型，不是你的檔。Whisper 模型會在你看過大小、按下下載之後從模型託管站抓一次，存在瀏覽器裡、所有 ByteScope 工具共用；「管理已下載的模型」看得到也刪得掉。Gemini Nano 則是 Chrome 自己抓（常常好幾 GB，磁碟跟顯示卡／記憶體也有門檻），百分比來自 `LanguageModel.create({ monitor })` 的 `downloadprogress`。之後可以離線轉寫。

### 能把字幕燒進影片嗎？

這個版本不行。下載 `SRT` 或 `VTT`，在剪輯軟體裡疊上去。燒進去要 ffmpeg.wasm，這批刻意沒帶。

### 時間不準，或少了一句，怎麼辦？

在表裡改。這些模型都不是工作室級 ASR，分段可能飄或漏行，Whisper 越大通常漏得越少。每一句都晚一樣多，拿到 Subtitle Sync 做平移。要 ASS 或 SBV，去 Subtitle Converter。

### 能標出是誰在講話嗎？

有實驗性的做法。轉寫完成之後按「分辨說話者」，就會依每個人的聲音把每一句分成「說話者 1、2、3…」；人數可以留自動，也可以指定 2–10 人。幫某個說話者改一次名字，他的每一句都會跟著改。匯出時勾「標出說話者」，SRT 會在每句前面加 `[名字] `，WebVTT 用 `<v 名字>` 的 voice 標籤，TXT 會把連續同一個人講的句子歸在名字底下；沒勾的話檔案跟以前一模一樣。它只會把聲音分組，不會認出任何人是誰；兩個模型都在這個瀏覽器裡跑，這一步不會把音訊送到任何地方。第一次要下載 31 MB 的模型（pyannote segmentation-3.0，MIT 授權；WeSpeaker ResNet34-LM，CC BY 4.0），之後留在瀏覽器裡。有 WebGPU 的話一小時音訊幾分鐘就好，沒有就改用 CPU，每 10 分鐘音訊大約要等 6 分鐘。準確度要老實講：用公開的測試錄音試下來，有 9–26% 的說話時間沒被標出來或標錯人。真實會議裡大家搶著講話的段落佔了錯誤的 40–46%，「嗯」「對」這種很短的回應大多會錯，而猜錯人數影響最大——有一段錄音只因為把兩個人併成一個，錯誤率就從 13% 跳到 39%。自己指定人數也不一定比較好，因為它一樣可能把真的兩個人併在一起。中文很短、輪得很快的對話比較容易漏掉；日文目前只用合成的對話測過。

## Related tools

- [Subtitle Converter](https://bytescope.dev/zh-Hant/subtitle-converter.md) — 把剛做好的 SRT 或 VTT 轉成 ASS、SBV 或 LRC。
- [Subtitle Sync](https://bytescope.dev/zh-Hant/subtitle-sync.md) — 整份字幕一樣慢半拍的話，去平移或拉伸時間軸。
