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.