# Video Subtitles

> Transcribe video or audio to SRT/VTT in the browser: Whisper large v3 turbo, Qwen3-ASR on your GPU via WebGPU or CPU; Hy-MT2 makes it bilingual. No upload.

- URL: https://bytescope.dev/en/video-subtitles/
- Locale: en · Also: [ja](https://bytescope.dev/ja/video-subtitles.md) · [zh-Hant](https://bytescope.dev/zh-Hant/video-subtitles.md)
- Runs: Your files never leave your browser — all processing is local.
- 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

A class recording or a meeting dump should not have to go to a cloud speech service. Drop a video or an audio file and it is transcribed in this tab by the speech engine you pick: a Whisper model — base, small or large (v3-turbo) — downloaded once into the browser and run on your graphics card with WebGPU, or Chrome's built-in Gemini Nano through the Prompt API, with nothing to download from us. A second, independent picker adds translation — Hy-MT2, a model downloaded once and run on your graphics card with WebGPU, Chrome's built-in Translator or Gemini Nano, all on-device — so the same pass can produce bilingual subtitles. You get `SRT`, `VTT` or plain text, and a small table to nudge timestamps before you download. Subtitle Converter and Subtitle Sync sit next door for format changes and a global shift.

### Models

Speech recognition: Whisper base (small and quick, also runs on the CPU), Whisper small (the usual middle ground), Whisper large v3 turbo (the usual pick for English, Chinese and Japanese files on a usable graphics card), Qwen3-ASR 0.6B (the usual pick without a GPU), Qwen3-ASR 1.7B (the larger Qwen3-ASR), Confucius4-R2T2 (R2T2, a model that streams words as they are recognised on a GPU), Gemini Nano (Chrome built-in, nothing to download from us) and Chrome Speech Recognition (Web Speech: listens at playback speed, and may send audio to Google unless the on-device pack is installed). Precise timestamps: Qwen3-ForcedAligner 0.6B, optional and off by default, aligns the finished transcript word by word or character by character (about 1.85 GB). Translation: Hy-MT2 1.8B (Tencent Hunyuan-MT 2 on your GPU, the default with a usable graphics card), Chrome Translator (built-in, the default without one) and Gemini Nano. Every model runs in the browser: Whisper, Qwen3-ASR, R2T2, Hy-MT2 and the aligner run on your graphics card through WebGPU, with a compatible-GPU build for older cards without shader-f16 (a GTX 10-series, say), a fast-GPU build that uses f16 when the card supports it, and without a usable GPU, Whisper, Qwen3-ASR and the aligner fall back to the CPU over WebAssembly (slower), R2T2 stays a GPU model, and translation switches from Hy-MT2 to Chrome Translator. Each model downloads once and is shared by all ByteScope tools.

### Which model to pick

For English, Chinese and Japanese the recommended model follows our accuracy measurements: with a usable graphics card it is usually Whisper large (v3-turbo), without one usually Qwen3-ASR 0.6B, and a model already on this machine wins over an equally accurate one that still needs a download. A downloaded model processes the whole recording as fast as this machine can go, one download serves every ByteScope tool, and the three Whisper sizes trade speed for accuracy — base is small and quick and also runs on the CPU without WebGPU (slowly), small is the usual middle ground, large (v3-turbo) is the heaviest, and with a graphics card it is also the most accurate of the three. Gemini Nano skips the download where Chrome provides it, and feeds the model 30-second windows one at a time. Chrome Speech Recognition is offered too, with an honest caveat on its card: it can only listen at playback speed, so a one-hour video takes one hour, and in its default mode the audio goes to Google's servers. Nothing downloads without asking — a model that isn't on this machine yet shows its size, the free space left and whether you're on a metered connection, and starts only when you say so; download, verification, loading into memory and warm-up each show progress, and “test speed” runs a short built-in clip so the page can tell you roughly how long an hour of audio will take here. The recommended option is marked with a one-line reason; your own choice is remembered. Whichever model you pick, the “Precise timestamps” option (off by default) can run a second local model, Qwen3-ForcedAligner 0.6B, over the finished transcript: it lines the text up with the audio word by word in English or character by character in Chinese and Japanese, so every cue starts and ends where the words are actually spoken, and cues longer than about 6 seconds are split at word boundaries. It is a one-time download of about 1.85 GB — asked before it starts, like every model — and runs on your graphics card, or much more slowly on the CPU; Chinese, English and Japanese are fully supported, several European languages partially, Korean not at all, and a sentence it cannot match keeps the speech model's timing.

### How the audio reaches the model

The page decodes the soundtrack with `AudioContext` / `OfflineAudioContext`. Web Audio is Window-only, so that step cannot move into a worker — though the browser runs the codec on its own decoding thread. Decode asks for 16 kHz; if that context cannot be built, the worker resamples. Only the first audio track of a container is decoded. The downmix and any resampling do run in a worker. Audio windows then go to the engine one chunk at a time so a long file cannot fill its context. A Whisper download shows the progress this page measures itself; Gemini Nano's first use on a machine may download the local model — often multiple gigabytes — and the progress you see there is the browser's own `downloadprogress` event, not a spinner we invented. Burning captions into the picture is out of v1: that would drag in ffmpeg.wasm for a need that is still unproven here.

### Bilingual subtitles

Set the translation picker to a target language and every cue is translated on-device after transcription, then written out as a bilingual `SRT` or `VTT` — original on top or translation on top, your pick — or as translation only. Hy-MT2 is a 1.8B model downloaded once (about 1.3 GB) and run on your graphics card with WebGPU — the recommendation whenever this computer has a usable GPU, because it came out more accurate in our blind comparison; Chrome's Translator downloads a small language pack per pair and is the fast choice, and the default without a usable GPU; Gemini Nano is the larger built-in model and slower per cue. Leave the picker on “none” and the translation pipeline never starts.

### What this will not do

Whisper runs wherever WebGPU or WebAssembly runs, so transcription itself is not tied to Chrome; Gemini Nano, Chrome Speech Recognition and the two built-in translation engines are Chrome-only, and Firefox and Safari do not ship them; Hy-MT2 translation, like Whisper, runs in any browser with WebGPU. Edge is Chromium, but this page only claims what was actually run. Nano also needs hardware the model will accept; `unavailable` is a normal answer, not a bug, and there is no cloud fallback — except Chrome Speech Recognition in its default mode, which is a cloud service and says so. The transcript is as good as the chosen model on that clip — misses and drifted times are edited in the table, or taken to Subtitle Sync if every line is late by the same amount.

## 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

### Is my video or audio uploaded?

No — with one labelled exception. Decode, chunking and the Whisper or Prompt API call all run in this tab. The only downloads are the models themselves the first time this machine needs them, and your recording is not attached to those requests. The exception is Chrome Speech Recognition in its default mode, which sends the audio to Google's servers; its card carries that badge, and picking Whisper or Gemini Nano avoids it entirely.

### Which model should I choose?

For English, Chinese or Japanese, go with the model marked as recommended. With a usable graphics card that is usually Whisper large (v3-turbo); without one it is usually Qwen3-ASR 0.6B, except in Japanese, where an already-downloaded Qwen3-ASR 1.7B comes first. When several models measured equally accurate, the page picks the one already on this computer — that saves you a download, not because it is any more accurate than the ones it tied with. For other languages, Whisper small: one download, runs on your graphics card, good accuracy across many languages. Pick Whisper base if this machine has no WebGPU or the file is short and you want the quickest result; it also runs on the CPU, slowly. Pick Whisper large (v3-turbo) when accuracy matters more than time — it is the heaviest download and the slowest. Pick Gemini Nano when you'd rather not download anything and your Chrome provides it. Skip Chrome Speech Recognition unless the file is short: it listens at playback speed, so an hour takes an hour, and its default mode uploads the audio. If in doubt, press “test speed” on a card: the page runs a short built-in clip and tells you how long an hour of audio would take on this computer.

### Which browsers can actually transcribe?

Whisper transcribes in any browser with WebGPU, and Whisper base also on the CPU through WebAssembly where WebGPU is missing. Gemini Nano needs Chrome with the Prompt API and audio input; Firefox and Safari cannot run it, and Edge may work as Chromium but is marked untested in the matrix until someone measures it. Of the translation engines, Chrome's Translator and Gemini Nano are Chrome-only as well; Hy-MT2 is downloaded once and runs on your graphics card, so it translates in any browser with WebGPU. The table stays on the page even when this browser cannot run the tool.

### Why does the first run download something huge?

That is the model, not your file. A Whisper model is fetched once from the model host after you've seen its size and pressed download, stored in the browser and shared by every ByteScope tool; “manage downloaded models” lists and deletes it. Gemini Nano is fetched by Chrome itself (often multiple GB, with real disk and GPU/RAM gates), and the percentage is `downloadprogress` from `LanguageModel.create({ monitor })`. After that, transcription can run offline.

### Can I burn the subtitles into the video?

Not in this version. Download `SRT` or `VTT` and mux them in your editor. Hard-burning would mean ffmpeg.wasm, which this batch deliberately skipped.

### The times are wrong, or a sentence is missing — now what?

Edit the table. None of these models is a studio ASR; chunks can drift or drop a line, and a bigger Whisper usually drops fewer. If every cue is late by the same amount, take the file to Subtitle Sync for a shift. If you need ASS or SBV, use Subtitle Converter.

### Can it label who is speaking?

Experimentally. After the transcript exists, press “Find speakers” and the lines are grouped into Speaker 1, 2, 3… by how each voice sounds; leave the count on auto or set 2–10. Rename a speaker once and every line of theirs changes. Tick “Label speakers” when exporting and SRT gets `[Name] ` before each line, WebVTT uses `<v Name>` voice tags and TXT groups consecutive lines under the name; leave the box unticked and the files are exactly what they were before. It only separates voices and never recognises who anyone is, and the two models run in this browser, so this step sends no audio anywhere. The first run downloads 31 MB of models (pyannote segmentation-3.0, MIT; WeSpeaker ResNet34-LM, CC BY 4.0) and keeps them for next time. With WebGPU an hour of audio takes a few minutes; without it the CPU needs about 6 minutes per 10 minutes of audio. On accuracy: on public test recordings 9–26% of speech time was missed or given to the wrong speaker. People talking over each other caused 40–46% of the errors in real meetings, very short replies like “mm” or “yes” are mostly wrong, and getting the number of people wrong hurts most — one recording went from 13% to 39% when two people were merged. Setting the count yourself is not automatically better, since it can merge two real people too. Short, fast turns in Chinese are missed more often, and Japanese has so far only been tested on synthetic conversations.

## Related tools

- [Subtitle Converter](https://bytescope.dev/en/subtitle-converter.md) — Convert the SRT or VTT you just made into ASS, SBV or LRC.
- [Subtitle Sync](https://bytescope.dev/en/subtitle-sync.md) — Shift or stretch the times if the transcript is uniformly late.
