|
|
@@ -3506,140 +3506,6 @@ scale='min(500\, iw*3/2):-1' |
|
|
@end example |
|
|
@end example |
|
|
@end itemize |
|
|
@end itemize |
|
|
|
|
|
|
|
|
@section aselect, select |
|
|
|
|
|
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: |
|
|
|
|
|
|
|
|
|
|
|
@table @option |
|
|
|
|
|
@item n |
|
|
|
|
|
the sequential number of the filtered frame, starting from 0 |
|
|
|
|
|
|
|
|
|
|
|
@item selected_n |
|
|
|
|
|
the sequential number of the selected frame, starting from 0 |
|
|
|
|
|
|
|
|
|
|
|
@item prev_selected_n |
|
|
|
|
|
the sequential number of the last selected frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item TB |
|
|
|
|
|
timebase of the input timestamps |
|
|
|
|
|
|
|
|
|
|
|
@item pts |
|
|
|
|
|
the PTS (Presentation TimeStamp) of the filtered video frame, |
|
|
|
|
|
expressed in @var{TB} units, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item t |
|
|
|
|
|
the PTS (Presentation TimeStamp) of the filtered video frame, |
|
|
|
|
|
expressed in seconds, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item prev_pts |
|
|
|
|
|
the PTS of the previously filtered video frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item prev_selected_pts |
|
|
|
|
|
the PTS of the last previously filtered video frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item prev_selected_t |
|
|
|
|
|
the PTS of the last previously selected video frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item start_pts |
|
|
|
|
|
the PTS of the first video frame in the video, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item start_t |
|
|
|
|
|
the time of the first video frame in the video, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item pict_type @emph{(video only)} |
|
|
|
|
|
the type of the filtered frame, can assume one of the following |
|
|
|
|
|
values: |
|
|
|
|
|
@table @option |
|
|
|
|
|
@item I |
|
|
|
|
|
@item P |
|
|
|
|
|
@item B |
|
|
|
|
|
@item S |
|
|
|
|
|
@item SI |
|
|
|
|
|
@item SP |
|
|
|
|
|
@item BI |
|
|
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@item interlace_type @emph{(video only)} |
|
|
|
|
|
the frame interlace type, can assume one of the following values: |
|
|
|
|
|
@table @option |
|
|
|
|
|
@item PROGRESSIVE |
|
|
|
|
|
the frame is progressive (not interlaced) |
|
|
|
|
|
@item TOPFIRST |
|
|
|
|
|
the frame is top-field-first |
|
|
|
|
|
@item BOTTOMFIRST |
|
|
|
|
|
the frame is bottom-field-first |
|
|
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@item consumed_sample_n @emph{(audio only)} |
|
|
|
|
|
the number of selected samples before the current frame |
|
|
|
|
|
|
|
|
|
|
|
@item samples_n @emph{(audio only)} |
|
|
|
|
|
the number of samples in the current frame |
|
|
|
|
|
|
|
|
|
|
|
@item sample_rate @emph{(audio only)} |
|
|
|
|
|
the input sample rate |
|
|
|
|
|
|
|
|
|
|
|
@item key |
|
|
|
|
|
1 if the filtered frame is a key-frame, 0 otherwise |
|
|
|
|
|
|
|
|
|
|
|
@item pos |
|
|
|
|
|
the position in the file of the filtered frame, -1 if the information |
|
|
|
|
|
is not available (e.g. for synthetic video) |
|
|
|
|
|
|
|
|
|
|
|
@item scene @emph{(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) |
|
|
|
|
|
|
|
|
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
The default value of the select expression is "1". |
|
|
|
|
|
|
|
|
|
|
|
Some examples follow: |
|
|
|
|
|
|
|
|
|
|
|
@example |
|
|
|
|
|
# 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)' |
|
|
|
|
|
|
|
|
|
|
|
# use aselect to select only audio frames with samples number > 100 |
|
|
|
|
|
aselect='gt(samples_n\,100)' |
|
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
Complete example to create a mosaic of the first scenes: |
|
|
|
|
|
|
|
|
|
|
|
@example |
|
|
|
|
|
ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png |
|
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
Comparing @var{scene} against a value between 0.3 and 0.5 is generally a sane |
|
|
|
|
|
choice. |
|
|
|
|
|
|
|
|
|
|
|
@section setdar, setsar |
|
|
@section setdar, setsar |
|
|
|
|
|
|
|
|
The @code{setdar} filter sets the Display Aspect Ratio for the filter |
|
|
The @code{setdar} filter sets the Display Aspect Ratio for the filter |
|
|
@@ -4768,6 +4634,140 @@ tools. |
|
|
|
|
|
|
|
|
Below is a description of the currently available multimedia filters. |
|
|
Below is a description of the currently available multimedia filters. |
|
|
|
|
|
|
|
|
|
|
|
@section aselect, select |
|
|
|
|
|
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: |
|
|
|
|
|
|
|
|
|
|
|
@table @option |
|
|
|
|
|
@item n |
|
|
|
|
|
the sequential number of the filtered frame, starting from 0 |
|
|
|
|
|
|
|
|
|
|
|
@item selected_n |
|
|
|
|
|
the sequential number of the selected frame, starting from 0 |
|
|
|
|
|
|
|
|
|
|
|
@item prev_selected_n |
|
|
|
|
|
the sequential number of the last selected frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item TB |
|
|
|
|
|
timebase of the input timestamps |
|
|
|
|
|
|
|
|
|
|
|
@item pts |
|
|
|
|
|
the PTS (Presentation TimeStamp) of the filtered video frame, |
|
|
|
|
|
expressed in @var{TB} units, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item t |
|
|
|
|
|
the PTS (Presentation TimeStamp) of the filtered video frame, |
|
|
|
|
|
expressed in seconds, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item prev_pts |
|
|
|
|
|
the PTS of the previously filtered video frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item prev_selected_pts |
|
|
|
|
|
the PTS of the last previously filtered video frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item prev_selected_t |
|
|
|
|
|
the PTS of the last previously selected video frame, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item start_pts |
|
|
|
|
|
the PTS of the first video frame in the video, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item start_t |
|
|
|
|
|
the time of the first video frame in the video, NAN if undefined |
|
|
|
|
|
|
|
|
|
|
|
@item pict_type @emph{(video only)} |
|
|
|
|
|
the type of the filtered frame, can assume one of the following |
|
|
|
|
|
values: |
|
|
|
|
|
@table @option |
|
|
|
|
|
@item I |
|
|
|
|
|
@item P |
|
|
|
|
|
@item B |
|
|
|
|
|
@item S |
|
|
|
|
|
@item SI |
|
|
|
|
|
@item SP |
|
|
|
|
|
@item BI |
|
|
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@item interlace_type @emph{(video only)} |
|
|
|
|
|
the frame interlace type, can assume one of the following values: |
|
|
|
|
|
@table @option |
|
|
|
|
|
@item PROGRESSIVE |
|
|
|
|
|
the frame is progressive (not interlaced) |
|
|
|
|
|
@item TOPFIRST |
|
|
|
|
|
the frame is top-field-first |
|
|
|
|
|
@item BOTTOMFIRST |
|
|
|
|
|
the frame is bottom-field-first |
|
|
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
@item consumed_sample_n @emph{(audio only)} |
|
|
|
|
|
the number of selected samples before the current frame |
|
|
|
|
|
|
|
|
|
|
|
@item samples_n @emph{(audio only)} |
|
|
|
|
|
the number of samples in the current frame |
|
|
|
|
|
|
|
|
|
|
|
@item sample_rate @emph{(audio only)} |
|
|
|
|
|
the input sample rate |
|
|
|
|
|
|
|
|
|
|
|
@item key |
|
|
|
|
|
1 if the filtered frame is a key-frame, 0 otherwise |
|
|
|
|
|
|
|
|
|
|
|
@item pos |
|
|
|
|
|
the position in the file of the filtered frame, -1 if the information |
|
|
|
|
|
is not available (e.g. for synthetic video) |
|
|
|
|
|
|
|
|
|
|
|
@item scene @emph{(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) |
|
|
|
|
|
|
|
|
|
|
|
@end table |
|
|
|
|
|
|
|
|
|
|
|
The default value of the select expression is "1". |
|
|
|
|
|
|
|
|
|
|
|
Some examples follow: |
|
|
|
|
|
|
|
|
|
|
|
@example |
|
|
|
|
|
# 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)' |
|
|
|
|
|
|
|
|
|
|
|
# use aselect to select only audio frames with samples number > 100 |
|
|
|
|
|
aselect='gt(samples_n\,100)' |
|
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
Complete example to create a mosaic of the first scenes: |
|
|
|
|
|
|
|
|
|
|
|
@example |
|
|
|
|
|
ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png |
|
|
|
|
|
@end example |
|
|
|
|
|
|
|
|
|
|
|
Comparing @var{scene} against a value between 0.3 and 0.5 is generally a sane |
|
|
|
|
|
choice. |
|
|
|
|
|
|
|
|
@section asendcmd, sendcmd |
|
|
@section asendcmd, sendcmd |
|
|
|
|
|
|
|
|
Send commands to filters in the filtergraph. |
|
|
Send commands to filters in the filtergraph. |
|
|
|