[FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale to disable/enable the default scale

Paul B Mahol onemda at gmail.com
Sat Feb 15 13:49:00 EET 2020


On 2/15/20, Fu, Linjie <linjie.fu at intel.com> wrote:
>> -----Original Message-----
>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
>> Nicolas George
>> Sent: Saturday, February 15, 2020 19:01
>> To: FFmpeg development discussions and patches <ffmpeg-
>> devel at ffmpeg.org>
>> Cc: Fu, Linjie <linjie.fu at intel.com>; Eoff, Ullysses A
>> <ullysses.a.eoff at intel.com>
>> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale
>> to disable/enable the default scale
>>
>> Linjie Fu (12020-02-15):
>> > Currently, ffmpeg inserts scale filter by default in the filter graph
>> > to force the whole decoded stream to scale into the same size with the
>> > first frame. It's not quite make sense in resolution changing cases if
>> > user wants the rawvideo without any scale.
>> >
>> > Using autoscale/noautoscale as an output option to indicate whether auto
>> > inserting the scale filter in the filter graph:
>> >     -noautoscale or -autoscale 0:
>> >     disable the default auto scale filter inserting.
>> >
>> > ffmpeg -y input.mp4 out1.yuv -noautoscale out2.yuv -autoscale 0 out3.yuv
>> >
>> > Update docs.
>> >
>> > Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
>> > Signed-off-by: Linjie Fu <linjie.fu at intel.com>
>> > ---
>> >
>> > Using autoscale as an output option and fix the missing spaces.
>> >
>> >  doc/ffmpeg.texi         | 16 ++++++++++++----
>> >  fftools/ffmpeg.h        |  3 +++
>> >  fftools/ffmpeg_filter.c |  2 +-
>> >  fftools/ffmpeg_opt.c    |  8 ++++++++
>> >  4 files changed, 24 insertions(+), 5 deletions(-)
>> >
>> > diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
>> > index 29753f0..aebafb3 100644
>> > --- a/doc/ffmpeg.texi
>> > +++ b/doc/ffmpeg.texi
>> > @@ -734,10 +734,6 @@ ffmpeg -dump_attachment:t "" -i INPUT
>> >  Technical note -- attachments are implemented as codec extradata, so
>> > this
>> >  option can actually be used to extract extradata from any stream, not
>> > just
>> >  attachments.
>> > -
>> > - at item -noautorotate
>> > -Disable automatically rotating video based on file metadata.
>> > -
>> >  @end table
>> >
>> >  @section Video Options
>> > @@ -819,6 +815,18 @@ Create the filtergraph specified by
>> @var{filtergraph} and use it to
>> >  filter the stream.
>> >
>> >  This is an alias for @code{-filter:v}, see the
>> > @ref{filter_option,,-filter
>> option}.
>> > +
>> > + at item -autorotate
>> > +Automatically rotate the video according to file metadata. Enabled by
>> > +default, use @option{-noautorotate} to disable it.
>> > +
>> > + at item -autoscale
>> > +Automatically scale the video according to the resolution of first
>> > frame.
>> > +Enabled by default, use @option{-noautoscale} to disable it. When
>> autoscale is
>> > +disabled, all output frames of filter graph might not be in the same
>> resolution
>> > +and may be inadequate for some encoder/muxer. Therefore, it is not
>> recommended
>> > +to disable it unless you really know what you are doing.
>> > +Disable autoscale at your own risk.
>> >  @end table
>> >
>> >  @section Advanced Video options
>> > diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
>> > index 7b6f802..8beba6c 100644
>> > --- a/fftools/ffmpeg.h
>> > +++ b/fftools/ffmpeg.h
>> > @@ -230,6 +230,8 @@ typedef struct OptionsContext {
>> >      int        nb_time_bases;
>> >      SpecifierOpt *enc_time_bases;
>> >      int        nb_enc_time_bases;
>> > +    SpecifierOpt *autoscale;
>> > +    int        nb_autoscale;
>> >  } OptionsContext;
>> >
>> >  typedef struct InputFilter {
>> > @@ -479,6 +481,7 @@ typedef struct OutputStream {
>> >      int force_fps;
>> >      int top_field_first;
>> >      int rotate_overridden;
>> > +    int autoscale;
>> >      double rotate_override_value;
>> >
>> >      AVRational frame_aspect_ratio;
>> > diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
>> > index 40cc4c1..46c8ea8 100644
>> > --- a/fftools/ffmpeg_filter.c
>> > +++ b/fftools/ffmpeg_filter.c
>> > @@ -469,7 +469,7 @@ static int configure_output_video_filter(FilterGraph
>> *fg, OutputFilter *ofilter,
>> >      if (ret < 0)
>> >          return ret;
>> >
>> > -    if (ofilter->width || ofilter->height) {
>> > +    if ((ofilter->width || ofilter->height) && ofilter->ost->autoscale)
>> > {
>> >          char args[255];
>> >          AVFilterContext *filter;
>> >          AVDictionaryEntry *e = NULL;
>> > diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
>> > index 12d4488..62bcfc1 100644
>> > --- a/fftools/ffmpeg_opt.c
>> > +++ b/fftools/ffmpeg_opt.c
>> > @@ -1405,6 +1405,8 @@ static OutputStream
>> *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
>> >          ost->encoder_opts  = filter_codec_opts(o->g->codec_opts,
>> > ost->enc-
>> >id, oc, st, ost->enc);
>> >
>> >          MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
>> > +        ost->autoscale = 1;
>> > +        MATCH_PER_STREAM_OPT(autoscale, i, ost->autoscale, oc, st);
>> >          if (preset && (!(ret = get_preset_file_2(preset,
>> > ost->enc->name, &s))))
>> {
>> >              do  {
>> >                  buf = get_line(s);
>> > @@ -3650,6 +3652,12 @@ const OptionDef options[] = {
>> >      { "autorotate",       HAS_ARG | OPT_BOOL | OPT_SPEC |
>> >                            OPT_EXPERT | OPT_INPUT,
>> >          { .off =
>> OFFSET(autorotate) },
>> >          "automatically insert correct rotate filters" },
>>
>> > +    { "autoscale",        HAS_ARG | OPT_BOOL | OPT_SPEC |
>> > +                          OPT_EXPERT | OPT_OUTPUT,
>> >          { .off =
>> OFFSET(autoscale) },
>> > +        "automatically insert a scale filter at the end of the filter
>> > graph if a
>> resolution "
>> > +        "change is detected. This ensures all frames are the same
>> > resolution
>> as the first frame "
>> > +        "when they leave the filter chain (this option is enabled by
>> > default). "
>> > +        "If disabled, some encoders/muxers may not support this
>> > mode."},
>>
>> The help text for most options is half a line. This one is four long
>> lines. Maybe this is misusing the field: a short summary here, the full
>> explanation in the doc.
>
> How about shortening into
> "automatically insert a scale filter at the end of the filter graph if a
> resolution change is detected (enabled by default)."
> in the help message and keep the current explanation unchanged in doc?

last part in () is redundant.

>
>> Regards,
>>
>> --
>>   Nicolas George
>
> Thanks for pointing this out.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list