Frame Rate Conversion Calculator

Frame Rate Conversion Calculator .frc-calculator-container { max-width: 800px; margin: 0 auto; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; background: #ffffff; padding: 30px; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.1); border: 1px solid #e0e0e0; } .frc-calc-header { text-align: center; margin-bottom: 30px; background: #f8f9fa; padding: 20px; border-radius: 8px; } .frc-calc-header h2 { margin: 0; color: #2c3e50; font-size: 24px; } .frc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 25px; margin-bottom: 25px; } .frc-input-group { margin-bottom: 15px; } .frc-input-group label { display: block; margin-bottom: 8px; font-weight: 600; color: #4a5568; font-size: 14px; } .frc-input-wrapper { position: relative; display: flex; align-items: center; } .frc-input { width: 100%; padding: 12px 15px; border: 2px solid #e2e8f0; border-radius: 6px; font-size: 16px; transition: all 0.2s; box-sizing: border-box; } .frc-input:focus { border-color: #3182ce; outline: none; box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1); } .frc-time-inputs { display: flex; gap: 10px; } .frc-time-field { flex: 1; } .frc-time-field span { display: block; font-size: 11px; color: #718096; margin-top: 4px; } .frc-select { width: 100%; padding: 12px; border: 2px solid #e2e8f0; border-radius: 6px; font-size: 16px; background-color: white; cursor: pointer; } .frc-btn { width: 100%; background: #3182ce; color: white; border: none; padding: 15px; font-size: 18px; font-weight: bold; border-radius: 8px; cursor: pointer; transition: background 0.2s; margin-top: 10px; } .frc-btn:hover { background: #2c5282; } .frc-results { margin-top: 30px; background: #ebf8ff; border: 1px solid #bee3f8; border-radius: 8px; padding: 25px; display: none; } .frc-result-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid #bee3f8; } .frc-result-row:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } .frc-result-label { font-weight: 600; color: #2c5282; } .frc-result-value { font-size: 20px; font-weight: 700; color: #2b6cb0; } .frc-article { margin-top: 50px; line-height: 1.8; color: #2d3748; } .frc-article h2 { color: #2c3e50; border-bottom: 2px solid #e2e8f0; padding-bottom: 10px; margin-top: 40px; } .frc-article h3 { color: #4a5568; margin-top: 25px; } .frc-article ul { margin-bottom: 20px; } .frc-article li { margin-bottom: 10px; } @media (max-width: 600px) { .frc-grid { grid-template-columns: 1fr; } }

Frame Rate Conversion & Retiming Calculator

Select Common FPS… 23.976 (NTSC Cinema) 24 (True Cinema) 25 (PAL) 29.97 (NTSC TV) 30 (Broadcast) 50 (PAL HFR) 59.94 (NTSC HFR) 60 (High Frame Rate) 120 (Slow Motion)
Select Common FPS… 23.976 (NTSC Cinema) 24 (True Cinema) 25 (PAL) 29.97 (NTSC TV) 30 (Broadcast) 60 (High Frame Rate)
Hours
Minutes
Seconds
Total Frames: 0
New Duration (Retimed): 00:00:00
Playback Speed: 100%
Result Type:

About Frame Rate Conversion and Retiming

Frame rate conversion is a critical aspect of modern video production, visual effects (VFX), and animation. Whether you are conforming high-frame-rate footage for slow motion or converting standards between NTSC and PAL, understanding the mathematics behind frames per second (FPS) is essential.

How This Calculator Works

This tool performs calculations based on the relationship between your Source FPS (how the footage was shot) and your Target FPS (your project timeline or delivery format). It helps answer two main questions:

  • Total Frame Count: How many individual images exist in your source footage given its duration?
  • Retiming/Conforming: If you interpret the footage at the project frame rate (e.g., playing 60fps footage on a 24fps timeline), how long will the new clip last?

Understanding The Metrics

Total Frames

This is the absolute count of images. The formula is:
Total Frames = Source Duration (in seconds) × Source FPS

Retimed Duration (Conforming)

This happens when you map 1 source frame to 1 timeline frame. If your source FPS is higher than your target FPS, the video plays in slow motion. If it is lower, it plays in fast motion ("undercranking").
New Duration = Total Frames / Target FPS

Playback Speed Percentage

This indicates the speed of the action relative to real-time.

  • 100%: Real-time (Source FPS = Target FPS).
  • < 100%: Slow Motion (e.g., 40% speed).
  • > 100%: Fast Motion (Time-lapse effect).

Common Frame Rate Scenarios

  • Cinematic Slow Motion: Shooting at 60 FPS and conforming to 24 FPS results in 40% speed (2.5x slower). This is the standard "smooth" slow motion used in movies.
  • Sports Broadcast: Often shot and delivered at 60 FPS (or 59.94) to capture fast movement without motion blur.
  • NTSC vs. PAL: Converting 29.97 FPS (US TV) to 25 FPS (European TV) usually involves complex pulldown or interpolation algorithms to avoid changing the duration/pitch of the audio.
function updateSourceInput() { var select = document.getElementById('sourceFpsSelect'); var input = document.getElementById('sourceFps'); if (select.value) { input.value = select.value; } } function updateTargetInput() { var select = document.getElementById('targetFpsSelect'); var input = document.getElementById('targetFps'); if (select.value) { input.value = select.value; } } function formatTime(totalSeconds) { var h = Math.floor(totalSeconds / 3600); var m = Math.floor((totalSeconds % 3600) / 60); var s = Math.floor(totalSeconds % 60); var ms = Math.round((totalSeconds – Math.floor(totalSeconds)) * 100); var hStr = h < 10 ? "0" + h : h; var mStr = m < 10 ? "0" + m : m; var sStr = s 0) { var msStr = ms < 10 ? "0" + ms : ms; return hStr + ":" + mStr + ":" + sStr + "." + msStr; } return hStr + ":" + mStr + ":" + sStr; } function calculateFrameRate() { // Get Inputs var srcFps = parseFloat(document.getElementById('sourceFps').value); var tgtFps = parseFloat(document.getElementById('targetFps').value); var hrs = parseFloat(document.getElementById('durHours').value) || 0; var mins = parseFloat(document.getElementById('durMinutes').value) || 0; var secs = parseFloat(document.getElementById('durSeconds').value) || 0; // Validation if (isNaN(srcFps) || srcFps <= 0) { alert("Please enter a valid Source FPS (greater than 0)."); return; } if (isNaN(tgtFps) || tgtFps <= 0) { alert("Please enter a valid Target FPS (greater than 0)."); return; } if (hrs === 0 && mins === 0 && secs === 0) { alert("Please enter a valid duration."); return; } // Logic // 1. Calculate Source Duration in Seconds var sourceDurationSecs = (hrs * 3600) + (mins * 60) + secs; // 2. Calculate Total Frames var totalFrames = Math.round(sourceDurationSecs * srcFps); // 3. Calculate New Duration (Conformed/Retimed) var newDurationSecs = totalFrames / tgtFps; // 4. Calculate Speed Percentage var speedPct = (tgtFps / srcFps) * 100; // Determine result type text var typeText = ""; if (Math.abs(srcFps – tgtFps) tgtFps) { var slowFactor = srcFps / tgtFps; typeText = "Slow Motion (" + slowFactor.toFixed(2) + "x slower)"; } else { var fastFactor = tgtFps / srcFps; typeText = "Fast Motion (" + fastFactor.toFixed(2) + "x faster)"; } // Display Results document.getElementById('resTotalFrames').innerText = totalFrames.toLocaleString(); document.getElementById('resNewDuration').innerText = formatTime(newDurationSecs); document.getElementById('resSpeedPct').innerText = speedPct.toFixed(2) + "%"; document.getElementById('resType').innerText = typeText; // Show result box document.getElementById('resultsArea').style.display = "block"; }

Leave a Comment