提交 270d3c96 编写于 作者: M Michael Niedermayer

Merge remote-tracking branch 'ubitux/shorthand-cleanup'

* ubitux/shorthand-cleanup:
  lavfi/subtitles: switch to an AVOptions-based system.
  lavfi/pp: switch to an AVOptions-based system.
  lavfi/geq: switch to an AVOptions-based system.
  lavfi/edgedetect: switch to an AVOptions-based system.
  lavfi/curves: switch to an AVOptions-based system.
  lavfi/colormatrix: switch to an AVOptions-based system.
  lavfi/perms: switch to an AVOptions-based system.
  lavfi/ebur128: switch to an AVOptions-based system.
  lavfi/showspectrum: switch to an AVOptions-based system.
  lavfi/silencedetect: switch to an AVOptions-based system.
  lavfi/thumbnail: switch to an AVOptions-based system.
Merged-by: NMichael Niedermayer <michaelni@gmx.at>
......@@ -1117,6 +1117,8 @@ minimum detected noise duration.
The printed times and duration are expressed in seconds.
The filter accepts the following options:
@table @option
@item duration, d
Set silence duration until notification (default is 2 seconds).
......@@ -2100,12 +2102,8 @@ boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chrom
Convert color matrix.
The filter accepts parameters as a list of @var{key}=@var{value}
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to the syntax
@var{src}:@var{dst}.
The filter accepts the following options:
A description of the accepted options follows:
@table @option
@item src
@item dst
......@@ -2371,30 +2369,15 @@ If there is no key point defined in @code{x=0}, the filter will automatically
insert a @var{(0;0)} point. In the same way, if there is no key point defined
in @code{x=1}, the filter will automatically insert a @var{(1;1)} point.
The filter accepts parameters as a list of @var{key}=@var{value}
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to the syntax
curves[=@var{preset}].
A description of the accepted parameters follows.
The filter accepts the following options:
@table @option
@item red, r
Set the key points for the red component.
@item green, g
Set the key points for the green component.
@item blue, b
Set the key points for the blue component.
@item all
Set the key points for all components.
Can be used in addition to the other key points component
options. In this case, the unset component(s) will fallback on this
@option{all} setting.
@item preset
Select one of the available color presets. This option can not be used in
addition to the @option{r}, @option{g}, @option{b} parameters.
Available presets are:
@table @samp
@item none
@item color_negative
@item cross_process
@item darker
......@@ -2406,7 +2389,18 @@ Available presets are:
@item strong_contrast
@item vintage
@end table
Default is unset.
Default is @code{none}.
@item red, r
Set the key points for the red component.
@item green, g
Set the key points for the green component.
@item blue, b
Set the key points for the blue component.
@item all
Set the key points for all components.
Can be used in addition to the other key points component
options. In this case, the unset component(s) will fallback on this
@option{all} setting.
@end table
To avoid some filtergraph syntax conflicts, each key points list need to be
......@@ -3014,7 +3008,7 @@ For more information about fontconfig, check:
Detect and draw edges. The filter uses the Canny Edge Detection algorithm.
This filter accepts the following optional named parameters:
The filter accepts the following options:
@table @option
@item low, high
......@@ -3308,11 +3302,7 @@ For more information see:
@section geq
The filter takes one, two, three or four equations as parameter, separated by ':'.
The first equation is mandatory and applies to the luma plane. The two
following are respectively for chroma blue and chroma red planes.
The filter syntax allows named parameters:
The filter accepts the following options:
@table @option
@item lum_expr
......@@ -4615,6 +4605,13 @@ Subfilters must be separated by '/' and can be disabled by prepending a '-'.
Each subfilter and some options have a short and a long name that can be used
interchangeably, i.e. dr/dering are the same.
The filters accept the following options:
@table @option
@item subfilters
Set postprocessing subfilters string.
@end table
All subfilters share common options to determine their scope:
@table @option
......@@ -4631,12 +4628,12 @@ Do luminance filtering only (no chrominance).
Do chrominance filtering only (no luminance).
@end table
These options can be appended after the subfilter name, separated by a ':'.
These options can be appended after the subfilter name, separated by a '|'.
Available subfilters are:
@table @option
@item hb/hdeblock[:difference[:flatness]]
@item hb/hdeblock[|difference[|flatness]]
Horizontal deblocking filter
@table @option
@item difference
......@@ -4645,7 +4642,7 @@ Difference factor where higher values mean more deblocking (default: @code{32}).
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table
@item vb/vdeblock[:difference[:flatness]]
@item vb/vdeblock[|difference[|flatness]]
Vertical deblocking filter
@table @option
@item difference
......@@ -4654,7 +4651,7 @@ Difference factor where higher values mean more deblocking (default: @code{32}).
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table
@item ha/hadeblock[:difference[:flatness]]
@item ha/hadeblock[|difference[|flatness]]
Accurate horizontal deblocking filter
@table @option
@item difference
......@@ -4663,7 +4660,7 @@ Difference factor where higher values mean more deblocking (default: @code{32}).
Flatness threshold where lower values mean more deblocking (default: @code{39}).
@end table
@item va/vadeblock[:difference[:flatness]]
@item va/vadeblock[|difference[|flatness]]
Accurate vertical deblocking filter
@table @option
@item difference
......@@ -4687,7 +4684,7 @@ Experimental vertical deblocking filter
@item dr/dering
Deringing filter
@item tn/tmpnoise[:threshold1[:threshold2[:threshold3]]], temporal noise reducer
@item tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
@table @option
@item threshold1
larger -> stronger filtering
......@@ -4727,7 +4724,7 @@ second line with a @code{(-1 4 2 4 -1)} filter.
Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
block by filtering all lines with a @code{(-1 2 6 2 -1)} filter.
@item fq/forceQuant[:quantizer]
@item fq/forceQuant[|quantizer]
Overrides the quantizer table from the input with the constant quantizer you
specify.
@table @option
......@@ -4736,13 +4733,13 @@ Quantizer to use
@end table
@item de/default
Default pp filter combination (@code{hb:a,vb:a,dr:a})
Default pp filter combination (@code{hb|a,vb|a,dr|a})
@item fa/fast
Fast pp filter combination (@code{h1:a,v1:a,dr:a})
Fast pp filter combination (@code{h1|a,v1|a,dr|a})
@item ac
High quality pp filter combination (@code{ha:a:128:7,va:a,dr:a})
High quality pp filter combination (@code{ha|a|128|7,va|a,dr|a})
@end table
@subsection Examples
......@@ -4764,14 +4761,14 @@ pp=de/-al
@item
Apply default filters and temporal denoiser:
@example
pp=default/tmpnoise:1:2:3
pp=default/tmpnoise|1|2|3
@end example
@item
Apply deblocking on luminance only, and switch vertical deblocking on or off
automatically depending on available CPU time:
@example
pp=hb:y/vb:a
pp=hb|y/vb|a
@end example
@end itemize
......@@ -5325,8 +5322,7 @@ To enable compilation of this filter you need to configure FFmpeg with
libavformat to convert the passed subtitles file to ASS (Advanced Substation
Alpha) subtitles format.
This filter accepts the following named options, expressed as a
sequence of @var{key}=@var{value} pairs, separated by ":".
The filter accepts the following options:
@table @option
@item filename, f
......@@ -5392,10 +5388,7 @@ Swap U & V plane.
@section thumbnail
Select the most representative frame in a given sequence of consecutive frames.
The filter accepts parameters as a list of @var{key}=@var{value}
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to the syntax
thumbnail[=@var{n}].
The filter accepts the following options:
@table @option
@item n
......@@ -6345,11 +6338,7 @@ Set read/write permissions for the output frames.
These filters are mainly aimed at developers to test direct path in the
following filter in the filtergraph.
The filters accept parameters as a list of @var{key}=@var{value} pairs,
separated by ":". If the key of the first options is omitted, the argument is
assumed to be the @var{mode}.
A description of the accepted parameters follows.
The filters accept the following options:
@table @option
@item mode
......@@ -6848,7 +6837,7 @@ the momentary loudness (400 milliseconds).
More information about the Loudness Recommendation EBU R128 on
@url{http://tech.ebu.ch/loudness}.
The filter accepts the following named parameters:
The filter accepts the following options:
@table @option
......@@ -7036,7 +7025,8 @@ do not have exactly the same duration in the first file.
Convert input audio to a video output, representing the audio frequency
spectrum.
The filter accepts the following named parameters:
The filter accepts the following options:
@table @option
@item size, s
Specify the video size for the output. Default value is @code{640x512}.
......
......@@ -54,22 +54,6 @@ static const AVOption silencedetect_options[] = {
AVFILTER_DEFINE_CLASS(silencedetect);
static av_cold int init(AVFilterContext *ctx, const char *args)
{
int ret;
SilenceDetectContext *silence = ctx->priv;
silence->class = &silencedetect_class;
av_opt_set_defaults(silence);
if ((ret = av_set_options_string(silence, args, "=", ":")) < 0)
return ret;
av_opt_free(silence);
return 0;
}
static char *get_metadata_val(AVFrame *insamples, const char *key)
{
AVDictionaryEntry *e = av_dict_get(insamples->metadata, key, NULL, 0);
......@@ -176,7 +160,6 @@ AVFilter avfilter_af_silencedetect = {
.name = "silencedetect",
.description = NULL_IF_CONFIG_SMALL("Detect silence."),
.priv_size = sizeof(SilenceDetectContext),
.init = init,
.query_formats = query_formats,
.inputs = silencedetect_inputs,
.outputs = silencedetect_outputs,
......
......@@ -97,20 +97,6 @@ static const struct {
{ 1, 1, 0, 0 }
};
static av_cold int init(AVFilterContext *ctx, const char *args)
{
ShowSpectrumContext *showspectrum = ctx->priv;
int err;
showspectrum->class = &showspectrum_class;
av_opt_set_defaults(showspectrum);
if ((err = av_set_options_string(showspectrum, args, "=", ":")) < 0)
return err;
return 0;
}
static av_cold void uninit(AVFilterContext *ctx)
{
ShowSpectrumContext *showspectrum = ctx->priv;
......@@ -505,7 +491,6 @@ static const AVFilterPad showspectrum_outputs[] = {
AVFilter avfilter_avf_showspectrum = {
.name = "showspectrum",
.description = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."),
.init = init,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ShowSpectrumContext),
......
......@@ -657,18 +657,24 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
int ret=0;
int anton_options =
!strcmp(filter->filter->name, "aformat") ||
!strcmp(filter->filter->name, "ass") ||
!strcmp(filter->filter->name, "blackframe") ||
!strcmp(filter->filter->name, "boxblur" ) ||
!strcmp(filter->filter->name, "colormatrix") ||
!strcmp(filter->filter->name, "crop" ) ||
!strcmp(filter->filter->name, "cropdetect") ||
!strcmp(filter->filter->name, "curves" ) ||
!strcmp(filter->filter->name, "delogo" ) ||
!strcmp(filter->filter->name, "drawbox" ) ||
!strcmp(filter->filter->name, "drawtext" ) ||
!strcmp(filter->filter->name, "ebur128" ) ||
!strcmp(filter->filter->name, "edgedetect") ||
!strcmp(filter->filter->name, "fade" ) ||
!strcmp(filter->filter->name, "fieldorder") ||
!strcmp(filter->filter->name, "fps" ) ||
!strcmp(filter->filter->name, "frei0r" ) ||
!strcmp(filter->filter->name, "frei0r_src") ||
!strcmp(filter->filter->name, "geq" ) ||
!strcmp(filter->filter->name, "gradfun" ) ||
!strcmp(filter->filter->name, "hqdn3d" ) ||
!strcmp(filter->filter->name, "ocv" ) ||
......@@ -680,7 +686,14 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
!strcmp(filter->filter->name, "pad" ) ||
!strcmp(filter->filter->name, "format") ||
!strcmp(filter->filter->name, "noformat") ||
!strcmp(filter->filter->name, "perms") ||
!strcmp(filter->filter->name, "pp" ) ||
!strcmp(filter->filter->name, "aperms") ||
!strcmp(filter->filter->name, "resample") ||
!strcmp(filter->filter->name, "showspectrum") ||
!strcmp(filter->filter->name, "silencedetect") ||
!strcmp(filter->filter->name, "subtitles") ||
!strcmp(filter->filter->name, "thumbnail") ||
// !strcmp(filter->filter->name, "scale" ) ||
!strcmp(filter->filter->name, "select") ||
0
......
......@@ -405,16 +405,9 @@ static struct hist_entry *get_histogram(void)
static av_cold int init(AVFilterContext *ctx, const char *args)
{
int ret;
EBUR128Context *ebur128 = ctx->priv;
AVFilterPad pad;
ebur128->class = &ebur128_class;
av_opt_set_defaults(ebur128);
if ((ret = av_set_options_string(ebur128, args, "=", ":")) < 0)
return ret;
if (ebur128->loglevel != AV_LOG_INFO &&
ebur128->loglevel != AV_LOG_VERBOSE) {
if (ebur128->do_video || ebur128->metadata)
......
......@@ -111,8 +111,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
return ret;
}
static const char *const shorthand[] = { "mode", NULL };
#if CONFIG_APERMS_FILTER
#define aperms_options options
......@@ -143,7 +141,6 @@ AVFilter avfilter_af_aperms = {
.inputs = aperms_inputs,
.outputs = aperms_outputs,
.priv_class = &aperms_class,
.shorthand = shorthand,
};
#endif /* CONFIG_APERMS_FILTER */
......@@ -177,6 +174,5 @@ AVFilter avfilter_vf_perms = {
.inputs = perms_inputs,
.outputs = perms_outputs,
.priv_class = &perms_class,
.shorthand = shorthand,
};
#endif /* CONFIG_PERMS_FILTER */
......@@ -375,8 +375,6 @@ static const AVFilterPad colormatrix_outputs[] = {
{ NULL }
};
static const char *const shorthand[] = { "src", "dst", NULL };
AVFilter avfilter_vf_colormatrix = {
.name = "colormatrix",
.description = NULL_IF_CONFIG_SMALL("Convert color matrix."),
......@@ -387,5 +385,4 @@ AVFilter avfilter_vf_colormatrix = {
.inputs = colormatrix_inputs,
.outputs = colormatrix_outputs,
.priv_class = &colormatrix_class,
.shorthand = shorthand,
};
......@@ -59,14 +59,8 @@ typedef struct {
#define OFFSET(x) offsetof(CurvesContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
static const AVOption curves_options[] = {
{ "red", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "r", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "green", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "g", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "blue", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "b", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "all", "set points coordinates for all components", OFFSET(comp_points_str_all),AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "preset", "select a color curves preset", OFFSET(preset), AV_OPT_TYPE_INT, {.i64=PRESET_NONE}, PRESET_NONE, NB_PRESETS-1, FLAGS, "preset_name" },
{ "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NONE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "color_negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_COLOR_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "cross_process", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_CROSS_PROCESS}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "darker", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_DARKER}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
......@@ -77,6 +71,13 @@ static const AVOption curves_options[] = {
{ "negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "strong_contrast", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_STRONG_CONTRAST}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "vintage", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_VINTAGE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "red", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "r", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "green", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "g", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "blue", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "b", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "all", "set points coordinates for all components", OFFSET(comp_points_str_all),AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ NULL }
};
......@@ -447,8 +448,6 @@ static const AVFilterPad curves_outputs[] = {
{ NULL }
};
static const char *const shorthand[] = { "preset", NULL };
AVFilter avfilter_vf_curves = {
.name = "curves",
.description = NULL_IF_CONFIG_SMALL("Adjust components curves."),
......@@ -458,5 +457,4 @@ AVFilter avfilter_vf_curves = {
.inputs = curves_inputs,
.outputs = curves_outputs,
.priv_class = &curves_class,
.shorthand = shorthand,
};
......@@ -52,15 +52,8 @@ AVFILTER_DEFINE_CLASS(edgedetect);
static av_cold int init(AVFilterContext *ctx, const char *args)
{
int ret;
EdgeDetectContext *edgedetect = ctx->priv;
edgedetect->class = &edgedetect_class;
av_opt_set_defaults(edgedetect);
if ((ret = av_set_options_string(edgedetect, args, "=", ":")) < 0)
return ret;
edgedetect->low_u8 = edgedetect->low * 255. + .5;
edgedetect->high_u8 = edgedetect->high * 255. + .5;
return 0;
......
......@@ -228,8 +228,6 @@ static const AVFilterPad geq_outputs[] = {
{ NULL }
};
static const char *const shorthand[] = { "lum_expr", "cb_expr", "cr_expr", "alpha_expr", NULL };
AVFilter avfilter_vf_geq = {
.name = "geq",
.description = NULL_IF_CONFIG_SMALL("Apply generic equation to each pixel."),
......@@ -240,5 +238,4 @@ AVFilter avfilter_vf_geq = {
.inputs = geq_inputs,
.outputs = geq_outputs,
.priv_class = &geq_class,
.shorthand = shorthand,
};
......@@ -31,21 +31,29 @@
#include "libpostproc/postprocess.h"
typedef struct {
const AVClass *class;
char *subfilters;
int mode_id;
pp_mode *modes[PP_QUALITY_MAX + 1];
void *pp_ctx;
} PPFilterContext;
#define OFFSET(x) offsetof(PPFilterContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
static const AVOption pp_options[] = {
{ "subfilters", "set postprocess subfilters", OFFSET(subfilters), AV_OPT_TYPE_STRING, {.str="de"}, .flags = FLAGS },
{ NULL }
};
AVFILTER_DEFINE_CLASS(pp);
static av_cold int pp_init(AVFilterContext *ctx, const char *args)
{
int i;
PPFilterContext *pp = ctx->priv;
if (!args || !*args)
args = "de";
for (i = 0; i <= PP_QUALITY_MAX; i++) {
pp->modes[i] = pp_get_mode_by_name_and_quality(args, i);
pp->modes[i] = pp_get_mode_by_name_and_quality(pp->subfilters, i);
if (!pp->modes[i])
return AVERROR_EXTERNAL;
}
......@@ -171,4 +179,6 @@ AVFilter avfilter_vf_pp = {
.inputs = pp_inputs,
.outputs = pp_outputs,
.process_command = pp_process_command,
.priv_class = &pp_class,
};
......@@ -201,8 +201,6 @@ static const AVFilterPad ass_outputs[] = {
{ NULL }
};
static const char *const shorthand[] = { "filename", NULL };
#if CONFIG_ASS_FILTER
static const AVOption ass_options[] = {
......@@ -240,7 +238,6 @@ AVFilter avfilter_vf_ass = {
.inputs = ass_inputs,
.outputs = ass_outputs,
.priv_class = &ass_class,
.shorthand = shorthand,
};
#endif
......@@ -365,6 +362,5 @@ AVFilter avfilter_vf_subtitles = {
.inputs = ass_inputs,
.outputs = ass_outputs,
.priv_class = &subtitles_class,
.shorthand = shorthand,
};
#endif
......@@ -227,8 +227,6 @@ static const AVFilterPad thumbnail_outputs[] = {
{ NULL }
};
static const char *const shorthand[] = { "n", NULL };
AVFilter avfilter_vf_thumbnail = {
.name = "thumbnail",
.description = NULL_IF_CONFIG_SMALL("Select the most representative frame in a given sequence of consecutive frames."),
......@@ -239,5 +237,4 @@ AVFilter avfilter_vf_thumbnail = {
.inputs = thumbnail_inputs,
.outputs = thumbnail_outputs,
.priv_class = &thumbnail_class,
.shorthand = shorthand,
};
......@@ -666,7 +666,7 @@ pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality)
char temp[GET_MODE_BUFFER_SIZE];
char *p= temp;
static const char filterDelimiters[] = ",/";
static const char optionDelimiters[] = ":";
static const char optionDelimiters[] = ":|";
struct PPMode *ppMode;
char *filterToken;
......
......@@ -29,7 +29,7 @@
#include "libavutil/avutil.h"
#define LIBPOSTPROC_VERSION_MAJOR 52
#define LIBPOSTPROC_VERSION_MINOR 2
#define LIBPOSTPROC_VERSION_MINOR 3
#define LIBPOSTPROC_VERSION_MICRO 100
#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \
......
......@@ -52,8 +52,8 @@ do_lavfi "overlay_yuv420" "split[m],scale=88:72,pad=96:80:4:4[o2];[m]fifo[o1
do_lavfi "overlay_yuv444" "split[m],scale=88:72,pad=96:80:4:4[o2];[m]fifo[o1],[o1][o2]overlay=240:16:format=yuv444"
do_lavfi "pad" "pad=iw*1.5:ih*1.5:iw*0.3:ih*0.2"
do_lavfi "pp" "pp=be/hb/vb/tn/l5/al"
do_lavfi "pp2" "pp=be/fq:16/h1/v1/lb"
do_lavfi "pp3" "pp=be/fq:8/ha:128:7/va/li"
do_lavfi "pp2" "pp=be/fq|16/h1/v1/lb"
do_lavfi "pp3" "pp=be/fq|8/ha|128|7/va/li"
do_lavfi "pp4" "pp=be/ci"
do_lavfi "pp5" "pp=md"
do_lavfi "pp6" "pp=be/fd"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册