> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of > Gyan Doshi > Sent: Tuesday, February 18, 2020 02:10 > 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 11:29 pm, Fu, Linjie wrote: > >> -----Original Message----- > >> From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf Of > >> Gyan Doshi > >> Sent: Tuesday, February 18, 2020 01:44 > >> 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 11:07 pm, Fu, Linjie wrote: > >>>> -----Original Message----- > >>>> From: ffmpeg-devel <ffmpeg-devel-boun...@ffmpeg.org> On Behalf > Of > >>>> Gyan Doshi > >>>> Sent: Tuesday, February 18, 2020 01:33 > >>>> 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 10:57 pm, Fu, Linjie wrote: > >>>>>> -----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. > >>>> Is this patch intended to be applied first, before the codec flag is > >>>> added and checked? > >>> Considering it won't impact the default behavior, IMHO yes it could be. > >> So, my question still stands. If it is applied tomorrow, and a user > >> disables autoscale, and ends up feeding frames of varying sizes to, say, > >> x264 or aom, what happens? > >> > > Failed without specific notifications for wrongly disabling autoscale. > > > > Taking x264 as an example to transcode clips with resolution changing > > from 352x288 to 240x196: > > > > [libx264 @ 0x5559143d51c0] Input picture width (352) is greater than stride > (256) > > Video encoding failed > > (This differs according to the encoder.) > > > > BTW, it would be great if the patch set for codec flag and check could be > applied at > > the same time. > > The flag should be added first, then this patch updated to check and > abort if encoder doesn't have the capability. > Actually the patches for codec flags and capability check are pending for some time. Please also help to review. (and apply if it's ok) _______________________________________________ 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".