Use the mpdecimate filter, whose purpose is to “Drop frames that do not differ greatly from the previous frame in order to reduce frame rate.”
-
This will generate a console readout showing which frames the filter thinks are duplicates.
ffmpeg -i input.mp4 -vf mpdecimate -loglevel debug -f null -
-
To generate a video with the duplicates removed
ffmpeg -i input.mp4 -vf mpdecimate,setpts=N/FRAME_RATE/TB out.mp4
The setpts filter expression generates smooth timestamps for a video at FRAME_RATE
FPS. See an explanation for timestamps at What is video timescale, timebase, or timestamp in ffmpeg?