FFmpeg 0.11.5
Since* 0.7
#

Select frames to pass in output.

It accepts in input an expression, which is evaluated for each input frame. If the expression is evaluated to a non-zero value, the frame is selected and passed to the output, otherwise it is discarded.

The expression can contain the following constants:

n

the sequential number of the filtered frame, starting from 0

selected_n

the sequential number of the selected frame, starting from 0

prev_selected_n

the sequential number of the last selected frame, NAN if undefined

TB

timebase of the input timestamps

pts

the PTS (Presentation TimeStamp) of the filtered video frame, expressed in TB units, NAN if undefined

t

the PTS (Presentation TimeStamp) of the filtered video frame, expressed in seconds, NAN if undefined

prev_pts

the PTS of the previously filtered video frame, NAN if undefined

prev_selected_pts

the PTS of the last previously filtered video frame, NAN if undefined

prev_selected_t

the PTS of the last previously selected video frame, NAN if undefined

start_pts

the PTS of the first video frame in the video, NAN if undefined

start_t

the time of the first video frame in the video, NAN if undefined

pict_type

the type of the filtered frame, can assume one of the following values:

  • I
  • P
  • B
  • S
  • SI
  • SP
  • BI
interlace_type

the frame interlace type, can assume one of the following values:

PROGRESSIVE

the frame is progressive (not interlaced)

TOPFIRST

the frame is top-field-first

BOTTOMFIRST

the frame is bottom-field-first

key

1 if the filtered frame is a key-frame, 0 otherwise

pos

the position in the file of the filtered frame, -1 if the information is not available (e.g. for synthetic video)

The default value of the select expression is "1".

Some examples follow:

# select all frames in input
select

# the above is the same as:
select=1

# skip all frames:
select=0

# select only I-frames
select='eq(pict_type\,I)'

# select one frame every 100
select='not(mod(n\,100))'

# select only frames contained in the 10-20 time interval
select='gte(t\,10)*lte(t\,20)'

# select only I frames contained in the 10-20 time interval
select='gte(t\,10)*lte(t\,20)*eq(pict_type\,I)'

# select frames with a minimum distance of 10 seconds
select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'