How to stretch audio duration without changing pitch
- Step 1Open the time-stretcher and drop your file — Drag any browser-decodable audio file (mp3, wav, flac, m4a, aac, ogg, opus, aiff) onto the time-stretcher. Processing is local — the file is read into the FFmpeg WASM sandbox, not uploaded.
- Step 2Decide longer or shorter — To make audio longer (slow it down), use a factor below 1 — e.g. 0.9 for ~11% longer. To make it shorter (speed it up), use a factor above 1 — e.g. 1.1 for ~9% shorter. Pitch stays constant either way.
- Step 3Compute the factor from your duration target — There is no target-duration field — you set the speed multiplier directly. To hit a length, divide: factor = original_seconds ÷ target_seconds. A 64 s clip you want at 60 s needs factor = 64 ÷ 60 ≈ 1.07.
- Step 4Type the factor (step 0.05) — Enter the factor in the Factor input. It steps in 0.05 increments and accepts 0.25 to 4. The label reads 0.5–2.0 (the transparent range) but the field itself allows the wider 0.25–4 span.
- Step 5Run the stretch — FFmpeg applies
atempo=<factor>to the audio stream and re-encodes to your input format. For factors below 0.5 it chains two atempo stages so the math still works without a single-stage limit error. - Step 6Download and check against the picture / slot — Download the re-timed file (same extension, suffixed
-stretched). Drop it back on your video timeline or slot and confirm it lands; small mismatches are a sign your factor needs a 0.01–0.02 nudge.
Factor → speed → duration
How the single factor maps to speed and length. Remember the output duration is the original divided by the factor — a factor below 1 lengthens, above 1 shortens.
| Factor | Playback speed | Output duration | atempo stages |
|---|---|---|---|
| 0.25 | Quarter speed (slowest) | 4× longer | Two (0.5 × 0.5) |
| 0.5 | Half speed | 2× longer | One |
| 0.75 | 75% speed | 1.33× longer | One |
| 1.0 | Unchanged (default) | Same length | One (no-op) |
| 1.25 | 125% speed | 0.8× (20% shorter) | One |
| 1.5 | 150% speed | 0.667× (33% shorter) | One |
| 2.0 | Double speed | Half length | One |
| 4.0 | Quadruple speed (fastest) | Quarter length | One |
Input format → output encoder (output keeps the input extension)
The time-stretcher has no format dropdown — the output file uses the same extension as your input and is re-encoded with that format's encoder. To convert format as well, run a sibling converter after stretching.
| Input extension | Output extension | Re-encode encoder | Notes |
|---|---|---|---|
| mp3 | mp3 | libmp3lame | Lossy → lossy: a re-encode generation is added on top of the filter |
| wav | wav | pcm_s16le | Output is 16-bit PCM WAV (lossless container, no quality loss from the codec) |
| flac | flac | flac | Stays lossless end to end |
| m4a / aac | m4a / aac | aac | AAC re-encode |
| ogg / oga | ogg | libvorbis | Vorbis re-encode |
| opus | opus | libopus | Opus re-encode |
Tier limits for the time-stretcher
Audio-family limits read from the code (lib/tier-limits.ts). The per-file DURATION cap is separate from the file-size cap — a 35-minute voice memo well under 50 MB still exceeds the Free 30-minute limit. The time-stretcher is a Pro-tier tool (minTier: pro).
| Tier | Max file size | Max duration per file | Files per batch |
|---|---|---|---|
| Free | 50 MB | 30 min | 1 (time-stretcher itself starts at Pro) |
| Pro | 200 MB | 120 min | 10 |
| Pro-media | 100 GB (streaming) | Unlimited | 100 |
| Developer | 100 GB | Unlimited | Unlimited |
Cookbook
Real re-timing jobs where pitch has to stay put. Factors are shown to two decimals; the UI steps in 0.05, so round to the nearest step.
Nudge a 64-second voiceover to a 60-second slot
A narration take ran 4 seconds long for a fixed 60 s ad slot. Speeding it up by resampling would raise the narrator's pitch; time-stretch keeps the voice natural.
Original duration : 64.0 s Target duration : 60.0 s Factor = 64.0 / 60.0 = 1.0667 -> enter 1.05 or 1.10 At factor 1.07: output ~= 64.0 / 1.07 = 59.8 s (adjust by 0.01 if you need it dead-on) Pitch: unchanged. Voice: same person, slightly brisker.
Stretch a 60-second music bed to 66 seconds
A library track is 6 seconds too short for the scene. Looping would be audible; time-stretch lengthens it transparently for a small slow-down.
Original : 60 s Target : 66 s Factor = 60 / 66 = 0.909 -> enter 0.90 Output = 60 / 0.90 = 66.7 s (then trim ~0.7 s if needed) Format: input WAV -> output 16-bit PCM WAV (pcm_s16le)
Match two takes recorded at different paces
Take B is 3% faster than take A across a 5-minute read. Stretch take B to A's length so a comp edit lines up word-for-word.
Take A : 300.0 s Take B : 291.0 s (ran short / faster) Factor for B = 291.0 / 300.0 = 0.97 -> enter 0.95 Output B = 291.0 / 0.97 = 300.0 s Now A and B share a duration; comp edits align.
Extreme creative stretch (0.25× quarter speed)
Slowing a one-shot to a quarter speed for an ambient/drone texture. The UI's lower bound is 0.25, applied as two chained 0.5 atempo stages.
Factor 0.25 -> chainAtempo emits: atempo=0.5,atempo=0.5 Output duration = original / 0.25 = 4x longer Expect smearing/phase artefacts at this depth -- by design, the atempo algorithm is not transparent below ~0.5x.
Stretch a stem without changing its codec
An OGG Vorbis stem needs a 5% slow-down for a remix. The output stays OGG (re-encoded with libvorbis) so it drops back into the session unchanged in format.
Input : bassline.ogg Factor : 0.95 Output : bassline-stretched.ogg (encoder: libvorbis) No format dropdown -> extension preserved automatically. Want FLAC out instead? Convert after stretching.
Edge cases and what actually happens
You expected a factor to make audio longer but it got shorter
By designFactor is a speed multiplier, not a duration multiplier. Factor 2 means double speed, so the file gets HALF as long. To make audio longer, use a factor below 1 (e.g. 0.5 for twice the length). Output duration always equals original ÷ factor.
Factor set to exactly 1.0
No-opFactor 1.0 (the default) applies atempo=1 — duration and pitch are unchanged, but the file is still decoded and re-encoded. For lossy inputs that adds one re-encode generation for no benefit. Set a factor other than 1 if you actually need a length change.
Factor below 0.5 entered
Supportedatempo's single-stage range is 0.5–100. For 0.25–0.49 the tool automatically chains two stages (e.g. 0.25 → atempo=0.5,atempo=0.5) so it doesn't fail. Quality below ~0.5× is intentionally non-transparent — expect granular/phasey artefacts.
MP3 in, MP3 out
Re-encode generationThere is no stream-copy path for stretching (the audio samples change), so an MP3 input is decoded and re-encoded with libmp3lame. That is one extra lossy generation. For archival work, feed a WAV/FLAC source and convert to MP3 as the very last step.
Input is a video file
Wrong toolThe time-stretcher accepts audio input only; it won't re-time a video's picture. Extract the audio first with video-to-mp3 or video-to-wav, stretch it, then re-marry it to the video in your editor.
File longer than your tier's duration cap
RejectedFree is capped at 30 minutes per file and Pro at 120 minutes — and this is a Pro-tier tool. A 3-hour recording needs Pro-media (unlimited duration). The duration cap is independent of the size cap, so a small-but-long file can still be rejected.
You need an exact output duration
Two-stepBecause you set a speed factor (not a target time), landing on an exact second usually needs a small follow-up trim. Stretch to just over the target, then cut to length with audio-trimmer.
Safari can't decode the chosen format
Browser limitFLAC and Opus decoding is unreliable in some Safari versions. If the file won't load, open it in Chrome/Edge/Firefox, or convert it to WAV first and stretch the WAV.
Output sounds metallic at large factors
Algorithm limitatempo is a time-domain WSOLA-style stretch; it's transparent for small changes (roughly 0.8×–1.25×) but introduces a metallic/ringing quality the further you push it. That is the algorithm's nature, not a bug.
Frequently asked questions
How is time-stretch different from speeding up the file?
Speeding up by resampling changes pitch and duration together (the chipmunk effect). Time-stretch changes only duration and holds pitch constant. JAD uses FFmpeg's atempo filter, which is a pitch-preserving tempo change rather than a resample.
What does the factor actually mean?
It's a playback-speed multiplier. Factor 2 = double speed = half the duration; factor 0.5 = half speed = double the duration. Output duration = original ÷ factor. The default is 1 (no change).
What factor range can I enter?
The input accepts 0.25 to 4 in steps of 0.05, even though its label reads 0.5–2.0 (the visually transparent range). Below 0.5 the tool chains atempo stages automatically.
Does the pitch really stay the same?
Yes. atempo is designed to change tempo without altering pitch, so a sped-up voice stays in the same key. Push the factor far from 1 and you'll hear time-stretch artefacts, but the pitch centre does not move.
Can I set a target duration instead of a factor?
Not directly — there's no target-duration field. Compute the factor yourself: factor = original_duration ÷ target_duration. The cookbook above shows the arithmetic for common slot lengths.
Will the output be in the same format as my input?
Yes. There's no format dropdown on this tool. The output keeps the input extension and is re-encoded with that format's encoder (mp3→libmp3lame, wav→pcm_s16le, flac→flac, ogg→libvorbis, opus→libopus, m4a/aac→aac).
How do I also convert the format?
Stretch first, then run a converter such as wav-to-mp3 or mp3-to-wav. Doing the format change last avoids stacking lossy generations.
Is my audio uploaded anywhere?
No. FFmpeg runs as WebAssembly inside your browser tab; the file is processed locally and never sent to a server. Only an anonymous processed-file counter is recorded for signed-in dashboard stats.
Why does a factor of 1 still change my file size?
Even at factor 1 the audio is decoded and re-encoded (there's no copy path for a filter graph). A lossy input re-encoded at the same nominal bitrate can come out a slightly different size and adds one encode generation.
What's the biggest/longest file I can stretch?
Time-stretcher is a Pro feature. Pro allows 200 MB and 120 minutes per file; Pro-media and Developer remove the duration cap and allow up to 100 GB. The duration cap is separate from the size cap.
Should I use tempo-changer or pitch-shifter instead?
Use tempo-changer if you'd rather express the change as a percentage (e.g. 110%). Use pitch-shifter if you want to change pitch while keeping the length. Time-stretcher changes length while keeping pitch.
Why does a big stretch sound smeared or metallic?
atempo is a time-domain algorithm; it's transparent for small adjustments but adds smearing/ringing as you move further from 1×. That's inherent to the method — keep within roughly 0.8×–1.25× for the cleanest result.
Privacy first
Every JAD Audio tool runs entirely in your browser via FFmpeg (WebAssembly) and RNNoise. Your audio files never leave your device — verified by zero outbound network requests during processing.