Slow-motion playback duration calculator
This slow-motion playback duration calculator shows exactly how long high-frame-rate footage becomes when its captured frames are played at a lower frame rate.
Run — free
Enter the original clip duration, the frame rate used by the camera, and the intended playback frame rate. The result includes the final running time, slowdown factor, and extra duration created by conforming the footage. It is useful for planning edits, music cues, shot lists, and delivery timelines before opening an editing application.
Understand what creates slow motion
Slow motion is created when a camera records more frames each second than the finished video displays each second. A camera capturing at 120 frames per second collects 120 distinct moments during every real second. If those frames are later shown at 24 frames per second, the player needs five seconds to display the material recorded in one second. The footage therefore lasts five times as long, with no duplicated frames required. This calculator expresses that relationship as a slowdown factor and applies it to the source duration. The calculation assumes that all captured frames are retained and conformed directly to the selected playback rate. It does not estimate optical-flow interpolation, frame blending, speed ramps, dropped frames, or a timeline setting that preserves the original real-time duration. Those are separate editing choices. Use the capture rate reported by the camera and the delivery or timeline rate you actually intend to use, rather than a rounded label from a shooting-mode menu, whenever exact timing matters.
Enter rates and interpret the result
Provide the source duration in seconds, then enter both frame rates in frames per second. The calculator divides the capture frame rate by the playback frame rate to obtain the slowdown factor. It multiplies the source duration by that factor to find the stretched playback duration. For example, footage recorded at 120 fps and played at 24 fps has a factor of five, so a ten-second recording becomes fifty seconds long. The formatted duration is convenient for reading, while the numeric seconds are better for scripts, spreadsheets, and edit-planning tools. Added duration is the stretched result minus the original recording time, which can help you see how much more timeline space the shot consumes. A factor above one indicates slow motion. A factor of one indicates unchanged duration. A factor below one indicates accelerated playback; the arithmetic remains valid, although that is not normally described as slow motion. Decimal rates such as 23.976 or 29.97 are accepted for practical video workflows.
Plan shoots and edits with reliable timing
Use the result before production to estimate how much finished screen time a short real-world event can supply. This is especially helpful for splashes, jumps, sports movements, wildlife, product demonstrations, and other moments recorded at high speed. During editing, compare the calculated duration with a voice-over sentence, music phrase, transition, or reserved timeline gap. The tool can also help determine whether several slow-motion clips will fit a target sequence without repeatedly importing test footage. Remember that the calculation describes frame-for-frame conformance, not every camera or editor workflow. Some cameras save a file already tagged for slow playback, while others save a normal-rate clip that an editor must interpret or conform. Variable-frame-rate files and cameras that do not sustain their nominal rate may require inspection of actual media metadata. Audio recorded with high-speed modes may be absent, shortened, or unsuitable for stretched playback. Treat the duration as an exact arithmetic result for the rates supplied, then confirm application settings before final export.
What you can do with it
Plan a slow-motion shot list
Convert each planned recording length into finished screen time before deciding how long the camera must roll.
Fit footage to music
Check whether a conformed high-frame-rate clip will cover a beat, phrase, or reserved section of an edit.
Automate edit estimates
Use the numeric output in a production spreadsheet or workflow that totals the running time of several slow-motion clips.
FAQ
What formula does the calculator use?
Playback duration equals source duration multiplied by capture frame rate divided by playback frame rate.
Does 120 fps footage always play five times slower?
Only when it is played at 24 fps. At 30 fps it plays four times slower, and at 60 fps it plays twice as slowly.
Can I use decimal frame rates such as 23.976?
Yes. Enter the actual decimal capture and playback rates for the most accurate duration.
Does this include speed ramps or frame interpolation?
No. It calculates constant frame-for-frame conformance. Variable speed, generated frames, blending, and dropped frames require timeline-specific calculations.
Why might my editor show a different duration?
The editor may preserve real time, interpret metadata differently, use a different timeline rate, or work with variable-frame-rate footage. Confirm its clip interpretation settings.
What does it cost?
It is free to use in the browser on this page, and API requests cost $0.002 each.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/hobby/photo-slowmo-playback \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"source_duration_seconds":10,"capture_frame_rate_fps":120,"playback_frame_rate_fps":24}'const res = await fetch("https://api.kit.forhosting.com/hobby/photo-slowmo-playback", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"source_duration_seconds": 10,
"capture_frame_rate_fps": 120,
"playback_frame_rate_fps": 24
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/photo-slowmo-playback",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"source_duration_seconds": 10,
"capture_frame_rate_fps": 120,
"playback_frame_rate_fps": 24
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/photo-slowmo-playback", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"source_duration_seconds":10,"capture_frame_rate_fps":120,"playback_frame_rate_fps":24}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"source_duration_seconds":10,"capture_frame_rate_fps":120,"playback_frame_rate_fps":24}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/photo-slowmo-playback", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"source_duration_seconds": 10,
"capture_frame_rate_fps": 120,
"playback_frame_rate_fps": 24
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.photo_slowmo_playback",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |