FFmpeg 1.1.16
Since* 1.1
#

Select frames to pass in output.

These filters accept a single option expr or e specifying the select expression, which can be specified either by specyfing expr=VALUE or specifying the expression alone.

The select expression is evaluated for each input frame. If the evaluation result is 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 (video only)

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

  • I
  • P
  • B
  • S
  • SI
  • SP
  • BI
interlace_type (video only)

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

consumed_sample_n (audio only)

the number of selected samples before the current frame

samples_n (audio only)

the number of samples in the current frame

sample_rate (audio only)

the input sample rate

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)

scene (video only)

value between 0 and 1 to indicate a new scene; a low value reflects a low probability for the current frame to introduce a new scene, while a higher value means the current frame is more likely to be one (see the example below)

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

#

Examples

  • Select all frames in input:

    select
    

    The example 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)'
  • Use aselect to select only audio frames with samples number > 100:

    aselect='gt(samples_n\,100)'
  • Create a mosaic of the first scenes:

    ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png

    Comparing scene against a value between 0.3 and 0.5 is generally a sane choice.