To inspect the GOP pattern I have used Avidemux and checked the frame type just by right/left arrow keys (frame to frame) or up/down arrow keys (I frame to I frame) or the corresponding buttons.
ffprobe can show the same info but the overwhelming output must usually be somehow filtered or the user can search a certain pattern like "[FRAME]" in the Terminal.
For example: QuickTime Player may show image artifacts when you scrub the timeline unless every I-frame is also an IDR (Instantaneous Decoder Refresh) frame i.e. pict_type=I and key_frame=1.
You can install ffmpeg and the bundled ffprobe with either Homebrew (faster to install and maybe more user friendly) or MacPorts (might be more robust and kosher for the purists). Both have good installation instructions although some basic UNIX skills might be needed.
https://brew.sh
https://www.macports.org/
ffprobe experts can chime in but I have stumbled on the following related commands:
Long output, frames separated by [FRAME] and [/FRAME] tags:
ffprobe -i movie.m4v -select_streams v:0 -show_frames
Save all I frames as .png. If the framerate is 30 then an image name of "out75.png" corresponds to a timestamp of 75/30 = 2.50 seconds. You can add -r 1000 if you want numbers to represent milliseconds:
ffmpeg -skip_frame nokey -i movie.m4v -vsync 0 -frame_pts true out%d.png
Display the timestamp for each keyframe:
ffprobe -loglevel error -select_streams v:0 -show_entries packet=pts_time,flags -of csv=print_section=0 movie.m4v | awk -F',' '/K/ {print $1}'
ffprobe -loglevel error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 movie.m4v
Show keyframes:
ffprobe -show_entries frame=pict_type movie.m4v -of flat | grep I
Show key_frame=1/0 -- long output:
ffprobe -show_frames movie.m4v | grep key_frame