From c51f090ff9658d6acc83e7ee7a507032b58cd07e Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Tue, 11 Dec 2012 23:26:01 +0100 Subject: [PATCH] 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. --- doc/filters.texi | 268 ++++++++++++------------ libavfilter/Makefile | 4 +- libavfilter/{vf_select.c => f_select.c} | 0 3 files changed, 136 insertions(+), 136 deletions(-) rename libavfilter/{vf_select.c => f_select.c} (100%) diff --git a/doc/filters.texi b/doc/filters.texi index d7af64a81c..1043911f2c 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -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. diff --git a/libavfilter/Makefile b/libavfilter/Makefile index 3480b42e0d..58f89549fb 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -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 diff --git a/libavfilter/vf_select.c b/libavfilter/f_select.c similarity index 100% rename from libavfilter/vf_select.c rename to libavfilter/f_select.c