How the Video Speed Changer Works
AnyTool changes video speed entirely in the browser using a self-hosted single-threaded ffmpeg.wasm engine — the core (ffmpeg-core.js + the 32 MB wasm) is bundled from npm and served as a same-origin asset, so nothing is fetched from a CDN. A live HTML5 playbackRate preview shows the new speed instantly. On apply, the clip is written to ffmpeg's virtual filesystem (MEMFS) and the video presentation timestamps are rescaled with setpts=(1/speed)*PTS; the audio is retimed with the atempo filter to preserve pitch so voices sound natural. Because atempo only accepts 0.5–2.0 per pass, factors outside that range are chained (for example 4× = atempo=2.0,atempo=2.0); you can also drop audio entirely with -an. The result is read back as an MP4 blob. Single-threaded is deliberate: the multi-threaded core needs SharedArrayBuffer + cross-origin isolation (COOP/COEP), which would block cross-origin ad iframes.
- Runs client-side — the video is never uploaded
- Self-hosted ffmpeg core (bundled) — no CDN
- setpts=(1/speed)*PTS retimes the video
- Chained atempo (0.5–2.0 per pass) preserves audio pitch
- Optional -an to drop audio; live playbackRate preview
- No backend, no watermark, no size cap
