lavfi: mv vf_select.c -> f_select.c
The file now contains also an audio select implementation. Also move the aselect/select documentation from video filters to the multimedia filters section.
This commit is contained in:
268
doc/filters.texi
268
doc/filters.texi
@@ -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.
|
||||||
|
@@ -54,7 +54,7 @@ OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o
|
|||||||
OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o
|
OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o
|
||||||
OBJS-$(CONFIG_ANULL_FILTER) += af_anull.o
|
OBJS-$(CONFIG_ANULL_FILTER) += af_anull.o
|
||||||
OBJS-$(CONFIG_ARESAMPLE_FILTER) += af_aresample.o
|
OBJS-$(CONFIG_ARESAMPLE_FILTER) += af_aresample.o
|
||||||
OBJS-$(CONFIG_ASELECT_FILTER) += vf_select.o
|
OBJS-$(CONFIG_ASELECT_FILTER) += f_select.o
|
||||||
OBJS-$(CONFIG_ASENDCMD_FILTER) += f_sendcmd.o
|
OBJS-$(CONFIG_ASENDCMD_FILTER) += f_sendcmd.o
|
||||||
OBJS-$(CONFIG_ASETNSAMPLES_FILTER) += af_asetnsamples.o
|
OBJS-$(CONFIG_ASETNSAMPLES_FILTER) += af_asetnsamples.o
|
||||||
OBJS-$(CONFIG_ASETPTS_FILTER) += f_setpts.o
|
OBJS-$(CONFIG_ASETPTS_FILTER) += f_setpts.o
|
||||||
@@ -125,7 +125,7 @@ OBJS-$(CONFIG_PAD_FILTER) += vf_pad.o
|
|||||||
OBJS-$(CONFIG_PIXDESCTEST_FILTER) += vf_pixdesctest.o
|
OBJS-$(CONFIG_PIXDESCTEST_FILTER) += vf_pixdesctest.o
|
||||||
OBJS-$(CONFIG_REMOVELOGO_FILTER) += bbox.o lswsutils.o lavfutils.o vf_removelogo.o
|
OBJS-$(CONFIG_REMOVELOGO_FILTER) += bbox.o lswsutils.o lavfutils.o vf_removelogo.o
|
||||||
OBJS-$(CONFIG_SCALE_FILTER) += vf_scale.o
|
OBJS-$(CONFIG_SCALE_FILTER) += vf_scale.o
|
||||||
OBJS-$(CONFIG_SELECT_FILTER) += vf_select.o
|
OBJS-$(CONFIG_SELECT_FILTER) += f_select.o
|
||||||
OBJS-$(CONFIG_SENDCMD_FILTER) += f_sendcmd.o
|
OBJS-$(CONFIG_SENDCMD_FILTER) += f_sendcmd.o
|
||||||
OBJS-$(CONFIG_SETDAR_FILTER) += vf_aspect.o
|
OBJS-$(CONFIG_SETDAR_FILTER) += vf_aspect.o
|
||||||
OBJS-$(CONFIG_SETFIELD_FILTER) += vf_setfield.o
|
OBJS-$(CONFIG_SETFIELD_FILTER) += vf_setfield.o
|
||||||
|
Reference in New Issue
Block a user