I built a free Whisper transcription site that runs in the browser: 5 things that broke
说明与用途
Quietscribe 是一个完全在浏览器中运行的 Whisper 转录站点,数据不上传服务器,支持字幕和嵌入式字幕,兼容移动端和桌面端,并提供可选的云端大模型处理。
问题
The author needed a subtitle tool that does not upload footage, has no free‑minute limits, and does not watermark videos, but existing tools failed to meet these constraints.
结果
Quietscribe delivers fully on‑device Whisper transcription with optional cloud fallback, supports burned‑in captions, and runs on mobile and desktop without uploading data.
工作流
- 1. Load Whisper model (tiny/base/small) via transformers.js in a Web Worker, using WebGPU or multi‑threaded WASM.
- 2. Detect language by decoding first 30 s and selecting highest‑scoring language token.
- 3. On iPhone Safari, limit to one WASM thread and downgrade model if a crash flag is present in sessionStorage.
- 4. Detect looping in small models and re‑run with no_repeat_ngram_size and repetition_penalty, then collapse repeated phrases.
- 5. For languages needing larger models, enable Cloud mode: encode audio to 16 kHz mono, split into ~60 s segments, send to Workers AI Whisper‑large‑v3‑turbo, then translate with m2m100‑1.2b.
- 6. Burn captions into video using Canvas + MediaRecorder + WebAudio, requesting avc1 codec and falling back to WebM; shrink long captions to fit.
- 7. Provide Android share_target via web manifest and service worker to accept shared files without upload.
证据
I built Quietscribe: OpenAI's Whisper running directly in the browser. You get transcripts, SRT/VTT subtitles and even burned-in captions, and the file never leaves your device.
My first Urdu test came back as confident English gibberish. It turned out that when you don't pass a language to a multilingual Whisper model, the library falls back to English with only a console warning:
On iPhone, the model download reached 100% and then the whole page reloaded. There was no error. Safari kills tabs that use too much memory.
For Urdu, the honest answer is that small on-device models aren't good enough, and the large ones don't fit on a phone. So I added an opt-in Cloud mode.
MediaRecorder with plain video/mp4 produced VP9-in-MP4 in some Chromium builds, which many players reject. Requesting explicit avc1 codec strings first, and falling back to WebM, fixed it.
- 记录日期: 2026-11-02T06:28:47.925Z