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.
pull/8/head
Stefano Sabatini 12 years ago
parent f5461face5
commit c51f090ff9
  1. 268
      doc/filters.texi
  2. 4
      libavfilter/Makefile
  3. 0
      libavfilter/f_select.c

@ -3506,140 +3506,6 @@ scale='min(500\, iw*3/2):-1'
@end example
@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
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.
@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
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_ANULL_FILTER) += af_anull.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_ASETNSAMPLES_FILTER) += af_asetnsamples.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_REMOVELOGO_FILTER) += bbox.o lswsutils.o lavfutils.o vf_removelogo.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_SETDAR_FILTER) += vf_aspect.o
OBJS-$(CONFIG_SETFIELD_FILTER) += vf_setfield.o

Loading…
Cancel
Save