This skill should be used when the user asks "check frame rate", "is this CFR or VFR", "video has duplicate frames", "video stutters", "frame rate issues", "why does video judder", or wants to...
Analyze video frame rate characteristics, detect CFR vs VFR, find duplicate frames, and diagnose timing issues.
CFR (Constant Frame Rate):
VFR (Variable Frame Rate):
| Rate | Actual Value | Use Case |
|---|---|---|
| 23.976 fps | 24000/1001 | Film, most streaming |
| 24 fps | 24/1 | True film rate (rare digital) |
| 25 fps | 25/1 | PAL video |
| 29.97 fps | 30000/1001 | NTSC video |
| 30 fps | 30/1 | Some digital content |
| 59.94 fps | 60000/1001 | High frame rate NTSC |
| 60 fps | 60/1 | Gaming, high frame rate |
23.976 vs 24: Nearly identical visually. The fractional rate exists for NTSC broadcast compatibility from analog TV era.
mediainfo video.mkv
Look for:
Frame rate mode : Constant or Variable
Frame rate : 23.976 (24000/1001) FPS
Frame rate mode tells you CFR vs VFR.
For deeper analysis:
# Check frame rate mode specifically
mediainfo --Inform="Video;%FrameRate_Mode%" video.mkv
# Get frame count
ffprobe -v error -count_packets -select_streams v:0 \
-show_entries stream=nb_read_packets -of csv=p=0 video.mkv
Using ffmpeg:
# Detect duplicate frames (mpdecimate filter)
ffmpeg -i video.mkv -vf "mpdecimate,setpts=N/FRAME_RATE/TB" \
-f null - 2>&1 | grep "drop"
Manual inspection with mpv:
. and ,Judder causes:
Visual test:
Symptoms:
Solution: Convert to CFR before editing:
ffmpeg -i vfr_video.mkv -vsync cfr -r 30 cfr_video.mkv
Symptoms:
Causes:
Detection: Step through video frame-by-frame. If two adjacent frames are identical, you have duplicates.
Symptoms:
Solution: Retag without reencoding:
# Change frame rate metadata only
ffmpeg -i video.mkv -c copy -video_track_timescale 24000 output.mkv
Symptoms:
Cause: Frame interpolation (RIFE, SVP, TV motion smoothing) generating fake frames.
Why it's bad:
Requirements:
Before importing:
Standard remux may preserve VFR timestamps:
# May not fix VFR
ffmpeg -i input.mkv -c copy output.mp4
Force true CFR:
# Step 1: Set timescale
ffmpeg -i input.mkv -c copy -video_track_timescale 24000 temp.mp4
# Step 2: Round timestamps (for 23.976 fps)
ffmpeg -i temp.mp4 -c copy \
-bsf:v "setts=dts=1001*round(DTS/1001):pts=1001*round(PTS/1001)" output.mp4
| Issue | MediaInfo Shows | Solution |
|---|---|---|
| VFR video | Frame rate mode: Variable | Convert to CFR |
| Duplicate frames | N/A (visual inspection) | Re-encode or accept |
| Wrong rate tag | Unexpected frame rate | Retag with ffmpeg |
| Interpolated | Higher fps than source | Use original |
. and , keys)${CLAUDE_PLUGIN_ROOT}/references/encoding-commands.md - Frame rate conversion commands${CLAUDE_PLUGIN_ROOT}/references/tools.md - Tool recommendations