Codec, size and frame rate of the video
ffprobe -v error -select_streams v:0 -show_entries "stream=codec_name,profile,width,height,pix_fmt,r_frame_rate,avg_frame_rate" -of json clip.mov
r_frame_rate is the lowest rate that can represent every timestamp, while avg_frame_rate is frames divided by duration. On a constant-rate file they match. When they differ, as they often do on phone footage, the file is probably variable frame rate; the frame rate checker measures the real spread.
Just the duration, as a bare number
ffprobe -v error -show_entries format=duration -of default=nokey=1:noprint_wrappers=1 clip.mov
nokey=1 drops the field name and noprint_wrappers=1 drops the section header and footer, so the output is a single value you can use in a script.
Every tag in the file
ffprobe -v error -show_entries "format_tags:stream_tags" -of json clip.mov
This is the quickest privacy check. Look for location, location-eng or com.apple.quicktime.location.ISO6709 (where it was filmed), make and model keys, encoder (the app that wrote the file) and creation_time. MKV files keep their tags here too, including per-track DURATION and title.
Rotation and Dolby Vision (side data)
ffprobe -v error -select_streams v:0 -show_streams -of json clip.mov
In the stream’s side_data_list, an entry with "side_data_type": "Display Matrix" carries a rotation value such as -90: the picture is stored landscape and players turn it. An entry of type DOVI configuration record carries dv_profile and dv_level. HDR10 files may also carry Mastering display metadata and Content light level metadata entries; the HDR checker explains what those numbers mean.
Count frames and packets
ffprobe -v error -select_streams v:0 -count_packets -show_entries stream=nb_read_packets -of csv=p=0 clip.mov
ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of csv=p=0 clip.mov
-count_packets reads the file without decoding and is fast. -count_frames decodes every frame, which is exact but slow on a long 4K file. For video the two numbers are normally the same. csv=p=0 prints the bare value without the section name.
Frame timestamps for the first five seconds
ffprobe -v error -select_streams v:0 -read_intervals %+5 -show_entries packet=pts_time,duration_time -of csv=p=0 clip.mov
-read_intervals %+5 reads only from the start to five seconds in. Uneven gaps between the pts_time values are what variable frame rate looks like in raw form.
Chapters
ffprobe -v error -show_chapters -of json clip.mp4