How video speed changes work
Changing speed sounds like one knob, but it is three separate jobs: re-timing pictures, deciding which pictures to keep, and stretching sound without turning voices into chipmunks.
1. Every frame has a timestamp
A video file stores compressed pictures, each with a presentation timestamp (PTS) that says when it should appear. A 30 fps clip has a picture every 33.3 milliseconds. To play at 2×, you divide every timestamp by two: the same pictures now arrive every 16.7 ms, and the clip lasts half as long. In FFmpeg that is the setpts=PTS/2 filter. That is all a speed change is, at heart.
You can stop right there and keep every frame, which is what VidSpeed’s quick mode does for MP4 and MOV files. It is lossless and fast, but a 30 fps clip at 2× becomes a 60 fps clip, and at 4× a 120 fps one.
2. Getting back to a normal frame rate
Most platforms expect 24–60 fps, so the normal export samples the re-timed pictures at a steady rate. Sped up, some frames fall between samples and are dropped. Slowed down, samples land on the same picture more than once, so it repeats. Try it:
Frame strip: 30 fps in, 30 fps out
Source frames
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
Output frames (first 12)
- 0
- 2
- 4
- 6
- 8
- 10
- 12
- 14
- 16
- 18
- 20
- 22
The blend option is FFmpeg’s framerate filter: instead of repeating a frame, it mixes the two nearest in proportion to how close each is. It is cheap and smooth-ish, but fast motion gets a double-exposure look. Professional “optical flow” tools go further and estimate motion to paint genuinely new in-between frames; that needs heavy computation and is not available in the browser build.
3. Sound: resampling vs time-stretching
Audio is a stream of samples. Playing those samples faster is the tape-recorder method: duration and pitch change together, by the same factor. Doubling speed raises pitch one octave.
To change duration alone you need time-stretching. FFmpeg’s atempo filter uses a WSOLA-style method (waveform similarity overlap-add): it chops the sound into short overlapping windows, slides them closer together or further apart, and picks each overlap position where the waveforms match best so the joins do not click. Pitch survives because each window’s waves are untouched. Push it far (below 0.5× or above 2×) and you start to hear the seams as a slight echo or warble.
Speeding up sound: two ways
Original: 3 cycles of a note
After 2× · same wave shape, fewer repeats
atempo filter) cuts the audio into short overlapping slices and overlaps them tighter or looser, so waves keep their length and only the timing changes. The demo tones are synthesised in your browser. 4. Why this runs in your browser
VidSpeed uses ffmpeg.wasm, the FFmpeg project compiled to WebAssembly. Your file is mounted read-only into the tab, processed there, and the output is handed back as a download. The trade-off is speed: this build uses a single CPU thread and has no access to hardware encoders, so it is several times slower than desktop FFmpeg. In return, nothing is uploaded and there are no server queues or file-size caps on our side.
5. Frame rate and slow motion, briefly
A clip recorded at 120 fps and played at 30 fps is slow motion with every frame real: 0.25× with no repeats. That is the only way to get truly smooth slow motion; everything else is repeating or blending what the camera captured. The slow motion maker has a calculator for it.
Back to the video speed changer.
Questions people ask
Can you speed up a video without changing the pitch?
Yes. Time-stretching algorithms such as FFmpeg’s atempo split audio into short overlapping windows and re-space them, so the duration changes but the waves inside each window keep their length, and so their pitch.
Why is the preview instant but the export slow?
The preview just tells your browser’s video player to play faster or slower (the playbackRate property). Exporting builds a new file: every frame is decoded, re-timed and encoded again, on one CPU thread inside WebAssembly.
Does speeding up a video reduce quality?
The normal export re-encodes with H.264, which is a small generational loss, usually invisible at the default settings. Quick mode on MP4/MOV files does not re-encode at all, so there is no loss.