{"course":{"slug":"ai-video","title":"Video with AI","url":"https://addaly.com/learn/ai-video","level":"intermediate","track":"create"},"lesson":{"slug":"frame-rate-and-interpolation","title":"Generated at sixteen, delivered at twenty-four","url":"https://addaly.com/learn/ai-video/frame-rate-and-interpolation","position":8,"of":66,"minutes":9,"answer":"Many models generate at a low native frame rate and are interpolated up afterwards, which is cheap and usually invisible, except at occlusions and fast motion, where interpolation produces a specific smeared artefact worth recognising.","keyIdea":"Many models generate at a low native frame rate and are interpolated up afterwards, which is cheap and usually invisible, except at occlusions and fast motion, where interpolation produces a specific smeared artefact worth recognising."},"body":{"format":"markdown","text":"## The frame rates you are actually dealing with\n\nA video model has a native frame rate baked into training. Common values are 16, 24 and 30. A model trained at 16 fps that hands you a 24 fps file did not generate 24 frames per second: something interpolated the extra ones.\n\nThis is a good trade and worth understanding rather than resenting. Generating more frames costs quadratically through attention. Interpolating them costs a small, separate network run at a tiny fraction of the price. For most footage the result is indistinguishable.\n\nThe interpolators you will meet: **RIFE** (fast, free, open, the default in most pipelines), **FILM** (Google's, handles large motion better, slower), and the optical-flow retimer inside DaVinci Resolve. All three estimate motion between two real frames and warp pixels along it.\n\n## Where interpolation gives itself away\n\nMotion estimation fails in three specific places, and once you can name them you will see them in other people's work constantly.\n\n1. **Occlusion boundaries.** Where one object passes in front of another, some pixels exist in frame A and not in frame B. There is nothing to warp, so the interpolator smears or invents. You see a soft halo hugging the moving edge.\n2. **Fast motion.** If something moves more than the estimator's search range between frames, the match is wrong and the intermediate frame tears. A hand crossing the frame quickly gets a ghost.\n3. **Anything appearing or disappearing.** A flash, a spark, a blink, a hard cut inside the clip. Interpolating across an event produces a half-existing frame.\n\nThe practical rule: interpolate calm footage freely, and be suspicious of interpolated fast action. If a clip has one difficult second, interpolate the rest and let that second run at native rate rather than fixing it everywhere.\n\n## Motion blur, which generated footage often lacks\n\nA real camera exposes each frame for a fraction of the frame interval: the classic 180-degree shutter means the sensor is open for half of it. Anything moving smears across that exposure. Your eye expects it.\n\nGenerated frames are frequently too clean. Every frame is crisp, so motion reads as a sequence of sharp positions rather than as movement. The effect is subtle and it is one of the things that makes footage feel synthetic without anyone being able to say why.\n\nTwo fixes, both cheap:\n\n- Add a small amount of motion blur in the editor. Resolve, Kdenlive and most compositors have it. Keep it light; overdone blur is worse than none.\n- Interpolate *up* and then conform *down*, blending frames. Generating at 16, interpolating to 48, then rendering to 24 with frame blending gives a natural smear for free.\n\n## Conform the project rate before you import a single clip\n\nThis is the mistake that costs an afternoon.\n\nMixed frame rates on one timeline judder, because frames are being duplicated or dropped to fit the project rate. A 30 fps clip on a 24 fps timeline drops one frame in five, and on a slow pan that reads as a stutter you cannot un-see.\n\nDecide the project rate first:\n\n- **24** for anything meant to read as film.\n- **25** if you are delivering for broadcast in a PAL region.\n- **30** for most social platforms, which is also where 60 shows up for fast content.\n\nSet it before importing. In DaVinci Resolve, changing project frame rate after media is on the timeline ranges from awkward to blocked depending on version, and re-conforming a finished cut is a genuine nuisance.\n\nIf a clip arrives at the wrong rate, retime it properly with optical flow rather than letting the timeline drop frames.\n\n## Odd durations\n\nModels hand back clips at 5.1 or 4.8 seconds, because the latent frame count divided by the frame rate does not land on a round number. Nothing is wrong. Trim to what you need; you were going to trim the head and tail anyway.\n\n## The free path\n\nEverything here is free. RIFE ships inside ComfyUI and inside **Flowframes** on Windows. **FFmpeg** will interpolate, conform and blend from the command line on any machine, including a very old one:\n\n```bash\n# conform 30 fps source to 24 fps with frame blending\nffmpeg -i in.mp4 -filter:v \"minterpolate=fps=24:mi_mode=blend\" out.mp4\n```\n\nResolve's free tier includes optical-flow retiming. Kdenlive and Shotcut handle conforming. On a phone, CapCut will change frame rate on export, though with less control.\n\n---\n\nToday: find out your model's native frame rate from its documentation, then look at one of your own clips frame by frame at an occlusion edge and see whether the halo is there."},"check":{"question":"A clip generated at 16 fps and interpolated to 24 looks clean except for a soft halo hugging a hand as it passes in front of a torso. What produced the halo?","options":[{"text":"The autoencoder compressed the hand region more aggressively than the torso because it carried more motion.","correct":false,"tempting":"Attributes a post-generation artefact to the VAE, which compresses uniformly and had finished long before interpolation ran."},{"text":"At the occlusion boundary some pixels exist in one real frame and not the next, so the interpolator has nothing to warp and fills the gap by guessing.","correct":true},{"text":"Interpolation to a non-integer multiple of the native rate forces the estimator to blend three frames instead of two, softening edges.","correct":false,"tempting":"Invents a multiple-frame blend; the problem appears at integer multiples too, and only at boundaries."},{"text":"The hand moved faster than the attention window could track, so the model produced inconsistent hand pixels that the interpolator then averaged together.","correct":false,"tempting":"Blames generation for an artefact that reappears when you interpolate real camera footage of the same move."}]},"prev":{"slug":"steps-guidance-and-samplers","title":"The four numbers, and which of them you should touch","url":"https://addaly.com/learn/ai-video/steps-guidance-and-samplers"},"next":{"slug":"choosing-a-model","title":"The ranking will be wrong by the time you read this","url":"https://addaly.com/learn/ai-video/choosing-a-model"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Generated at sixteen, delivered at twenty-four', in Video with AI. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/ai-video/frame-rate-and-interpolation (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Generated at sixteen, delivered at twenty-four","courseTitle":"Video with AI","module":{"index":1,"slug":"how-video-models-work","title":"What the machine is actually doing"},"answer":null,"keyIdea":"Many models generate at a low native frame rate and are interpolated up afterwards, which is cheap and usually invisible, except at occlusions and fast motion, where interpolation produces a specific smeared artefact worth recognising.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"the-frame-rates-you-are-actually-dealing-with","runs":[{"text":"The frame rates you are actually dealing with"}]},{"t":"p","runs":[{"text":"A video model has a native frame rate baked into training. Common values are 16, 24 and 30. A model trained at 16 fps that hands you a 24 fps file did not generate 24 frames per second: something interpolated the extra ones."}]},{"t":"p","runs":[{"text":"This is a good trade and worth understanding rather than resenting. Generating more frames costs quadratically through attention. Interpolating them costs a small, separate network run at a tiny fraction of the price. For most footage the result is indistinguishable."}]},{"t":"p","runs":[{"text":"The interpolators you will meet: "},{"text":"RIFE","b":true},{"text":" (fast, free, open, the default in most pipelines), "},{"text":"FILM","b":true},{"text":" (Google’s, handles large motion better, slower), and the optical-flow retimer inside DaVinci Resolve. All three estimate motion between two real frames and warp pixels along it."}]},{"t":"h2","id":"where-interpolation-gives-itself-away","runs":[{"text":"Where interpolation gives itself away"}]},{"t":"p","runs":[{"text":"Motion estimation fails in three specific places, and once you can name them you will see them in other people’s work constantly."}]},{"t":"ol","start":1,"items":[[{"text":"Occlusion boundaries.","b":true},{"text":" Where one object passes in front of another, some pixels exist in frame A and not in frame B. There is nothing to warp, so the interpolator smears or invents. You see a soft halo hugging the moving edge."}],[{"text":"Fast motion.","b":true},{"text":" If something moves more than the estimator’s search range between frames, the match is wrong and the intermediate frame tears. A hand crossing the frame quickly gets a ghost."}],[{"text":"Anything appearing or disappearing.","b":true},{"text":" A flash, a spark, a blink, a hard cut inside the clip. Interpolating across an event produces a half-existing frame."}]]},{"t":"p","runs":[{"text":"The practical rule: interpolate calm footage freely, and be suspicious of interpolated fast action. If a clip has one difficult second, interpolate the rest and let that second run at native rate rather than fixing it everywhere."}]},{"t":"h2","id":"motion-blur-which-generated-footage-often-lacks","runs":[{"text":"Motion blur, which generated footage often lacks"}]},{"t":"p","runs":[{"text":"A real camera exposes each frame for a fraction of the frame interval: the classic 180-degree shutter means the sensor is open for half of it. Anything moving smears across that exposure. Your eye expects it."}]},{"t":"p","runs":[{"text":"Generated frames are frequently too clean. Every frame is crisp, so motion reads as a sequence of sharp positions rather than as movement. The effect is subtle and it is one of the things that makes footage feel synthetic without anyone being able to say why."}]},{"t":"p","runs":[{"text":"Two fixes, both cheap:"}]},{"t":"ul","items":[[{"text":"Add a small amount of motion blur in the editor. Resolve, Kdenlive and most compositors have it. Keep it light; overdone blur is worse than none."}],[{"text":"Interpolate "},{"text":"up","i":true},{"text":" and then conform "},{"text":"down","i":true},{"text":", blending frames. Generating at 16, interpolating to 48, then rendering to 24 with frame blending gives a natural smear for free."}]]},{"t":"h2","id":"conform-the-project-rate-before-you-import-a-single-clip","runs":[{"text":"Conform the project rate before you import a single clip"}]},{"t":"p","runs":[{"text":"This is the mistake that costs an afternoon."}]},{"t":"p","runs":[{"text":"Mixed frame rates on one timeline judder, because frames are being duplicated or dropped to fit the project rate. A 30 fps clip on a 24 fps timeline drops one frame in five, and on a slow pan that reads as a stutter you cannot un-see."}]},{"t":"p","runs":[{"text":"Decide the project rate first:"}]},{"t":"ul","items":[[{"text":"24","b":true},{"text":" for anything meant to read as film."}],[{"text":"25","b":true},{"text":" if you are delivering for broadcast in a PAL region."}],[{"text":"30","b":true},{"text":" for most social platforms, which is also where 60 shows up for fast content."}]]},{"t":"p","runs":[{"text":"Set it before importing. In DaVinci Resolve, changing project frame rate after media is on the timeline ranges from awkward to blocked depending on version, and re-conforming a finished cut is a genuine nuisance."}]},{"t":"p","runs":[{"text":"If a clip arrives at the wrong rate, retime it properly with optical flow rather than letting the timeline drop frames."}]},{"t":"h2","id":"odd-durations","runs":[{"text":"Odd durations"}]},{"t":"p","runs":[{"text":"Models hand back clips at 5.1 or 4.8 seconds, because the latent frame count divided by the frame rate does not land on a round number. Nothing is wrong. Trim to what you need; you were going to trim the head and tail anyway."}]},{"t":"h2","id":"the-free-path","runs":[{"text":"The free path"}],"role":"free"},{"t":"p","runs":[{"text":"Everything here is free. RIFE ships inside ComfyUI and inside "},{"text":"Flowframes","b":true},{"text":" on Windows. "},{"text":"FFmpeg","b":true},{"text":" will interpolate, conform and blend from the command line on any machine, including a very old one:"}]},{"t":"code","lang":"bash","label":"Bash","text":"# conform 30 fps source to 24 fps with frame blending\nffmpeg -i in.mp4 -filter:v \"minterpolate=fps=24:mi_mode=blend\" out.mp4"},{"t":"p","runs":[{"text":"Resolve’s free tier includes optical-flow retiming. Kdenlive and Shotcut handle conforming. On a phone, CapCut will change frame rate on export, though with less control."}]},{"t":"rule"},{"t":"p","runs":[{"text":"Today: find out your model’s native frame rate from its documentation, then look at one of your own clips frame by frame at an occlusion edge and see whether the halo is there."}]}],"check":{"question":[{"text":"A clip generated at 16 fps and interpolated to 24 looks clean except for a soft halo hugging a hand as it passes in front of a torso. What produced the halo?"}],"options":[{"text":[{"text":"The autoencoder compressed the hand region more aggressively than the torso because it carried more motion."}],"correct":false,"tempting":[{"text":"Attributes a post-generation artefact to the VAE, which compresses uniformly and had finished long before interpolation ran."}]},{"text":[{"text":"At the occlusion boundary some pixels exist in one real frame and not the next, so the interpolator has nothing to warp and fills the gap by guessing."}],"correct":true,"tempting":null},{"text":[{"text":"Interpolation to a non-integer multiple of the native rate forces the estimator to blend three frames instead of two, softening edges."}],"correct":false,"tempting":[{"text":"Invents a multiple-frame blend; the problem appears at integer multiples too, and only at boundaries."}]},{"text":[{"text":"The hand moved faster than the attention window could track, so the model produced inconsistent hand pixels that the interpolator then averaged together."}],"correct":false,"tempting":[{"text":"Blames generation for an artefact that reappears when you interpolate real camera footage of the same move."}]}],"order":[2,0,1,3],"why":null},"prev":{"slug":"steps-guidance-and-samplers","title":"The four numbers, and which of them you should touch","minutes":9},"next":{"slug":"choosing-a-model","title":"The ranking will be wrong by the time you read this","minutes":8}}}