> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of > Gyan Doshi > Sent: Tuesday, February 18, 2020 00:53 > To: ffmpeg-devel@ffmpeg.org > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale > to disable/enable the default scale > > > > On 17-02-2020 09:13 pm, Fu, Linjie wrote: > >> -----Original Message----- > >> From: Fu, Linjie <linjie...@intel.com> > >> Sent: Sunday, February 16, 2020 00:13 > >> To: ffmpeg-devel@ffmpeg.org > >> Cc: Fu, Linjie <linjie...@intel.com>; Eoff, Ullysses A > >> <ullysses.a.e...@intel.com> > >> Subject: [PATCH] fftools/ffmpeg_filter: add -autoscale to disable/enable > the > >> default scale > >> > >> 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.e...@intel.com> > >> Signed-off-by: Linjie Fu <linjie...@intel.com> > >> --- > >> doc/ffmpeg.texi | 16 ++++++++++++---- > >> fftools/ffmpeg.h | 3 +++ > >> fftools/ffmpeg_filter.c | 2 +- > >> fftools/ffmpeg_opt.c | 5 +++++ > >> 4 files changed, 21 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. > >> - > >> -@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}. > >> + > >> +@item -autorotate > >> +Automatically rotate the video according to file metadata. Enabled by > >> +default, use @option{-noautorotate} to disable it. > >> + > >> +@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..a6f4216 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,9 @@ 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" }, > >> > >> /* audio options */ > >> { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | > OPT_OUTPUT, > >> { .func_arg = opt_audio_frames }, > >> -- > >> 2.7.4 > > What happens if user disables autoscale and the frame sizes do vary but > the encoder doesn't support changing props?
That's the point. Currently they would fail without specific notifications for this usage. One of the solutions is to declare AV_CODEC_CAP_VARIABLE_DIMENSIONS capability for encoders [1], and prompt an error information [2] to indicate " Dynamic resolution encode is not supported by this encoder." The further work would be providing dynamic encoding support for some encoders [3]. So this patch is the first step. [1] https://patchwork.ffmpeg.org/project/ffmpeg/patch/1564461924-4772-1-git-send-email-linjie...@intel.com/ [2] https://patchwork.ffmpeg.org/project/ffmpeg/patch/1564461944-4820-1-git-send-email-linjie...@intel.com/ [3] https://patchwork.ffmpeg.org/project/ffmpeg/patch/1565688544-9043-1-git-send-email-linjie...@intel.com/ > Gyan > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".