Export SI and TI Values Per Frame with FFmpeg

This article provides a straightforward, step-by-step guide on how to calculate and export Spatial Information (SI) and Temporal Information (TI) values for every frame of a video using FFmpeg. By leveraging FFmpeg’s built-in siti filter and ffprobe, you can extract these quality metrics directly into a structured text or CSV file for further analysis.

Step 1: Use the SITI Filter with FFprobe

FFmpeg includes a dedicated siti video filter that calculates Spatial Information (SI) and Temporal Information (TI) based on the ITU-T P.910 standard. To extract these values frame-by-frame and save them to a text file, you should use ffprobe combined with the lavfi (Libavfilter) input virtual device.

Run the following command in your terminal:

ffprobe -f lavfi -i "movie=input.mp4,siti" -show_entries frame=pkt_pts_time:frame_tags=lavfi.siti.si,lavfi.siti.ti -of csv=p=0 > siti_values.txt

Command Breakdown

Output Structure

The resulting siti_values.txt file will contain one line per frame, structured as follows:

0.000000,74.125341,0.000000
0.040000,74.155120,4.124512
0.080000,74.010245,3.987514

In this output: * The first column represents the frame timestamp in seconds. * The second column represents the Spatial Information (SI) value. * The third column represents the Temporal Information (TI) value (which is 0 for the very first frame).

Exporting to JSON Format

If you plan to parse this data using Python, R, or another programming language, you may prefer exporting the data in JSON format. You can do this by changing the output writer parameter:

ffprobe -f lavfi -i "movie=input.mp4,siti" -show_entries frame=pkt_pts_time:frame_tags=lavfi.siti.si,lavfi.siti.ti -of json > siti_values.json