Message ID | 1581326823-26655-1-git-send-email-linjie.fu@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | [FFmpeg-devel] fftools/ffmpeg_filter: add -autoscale to disable/enable the default scale | expand |
Context | Check | Description |
---|---|---|
andriy/ffmpeg-patchwork | success | Make fate finished |
On Mon, Feb 10, 2020 at 17:27:03 +0800, Linjie Fu wrote: > + { "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."}, Have you checked the output of "ffmpeg -h"? Your C strings merge directly together, and are therefore missing spaces, e.g. in "resolutionchange" and "as the first framewhen they leave", Moritz
> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Moritz Barsnick > Sent: Tuesday, February 11, 2020 19:04 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale > to disable/enable the default scale > > On Mon, Feb 10, 2020 at 17:27:03 +0800, Linjie Fu wrote: > > + { "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."}, > > Have you checked the output of "ffmpeg -h"? Your C strings merge > directly together, and are therefore missing spaces, e.g. in > "resolutionchange" and "as the first framewhen they leave", > Yes, spaces should be added, thanks for pointing this out :). I'll fix this in next version together with other suggestions if there is any.
> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Fu, > Linjie > Sent: Tuesday, February 11, 2020 20:58 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale > to disable/enable the default scale > > > -----Original Message----- > > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > > Moritz Barsnick > > Sent: Tuesday, February 11, 2020 19:04 > > To: FFmpeg development discussions and patches <ffmpeg- > > devel@ffmpeg.org> > > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale > > to disable/enable the default scale > > > > On Mon, Feb 10, 2020 at 17:27:03 +0800, Linjie Fu wrote: > > > + { "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."}, > > > > Have you checked the output of "ffmpeg -h"? Your C strings merge > > directly together, and are therefore missing spaces, e.g. in > > "resolutionchange" and "as the first framewhen they leave", > > > Yes, spaces should be added, thanks for pointing this out :). > > I'll fix this in next version together with other suggestions if there is any. > Ping, any suggestions?
On 2/14/20, Fu, Linjie <linjie.fu@intel.com> wrote: >> -----Original Message----- >> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Fu, >> Linjie >> Sent: Tuesday, February 11, 2020 20:58 >> To: FFmpeg development discussions and patches <ffmpeg- >> devel@ffmpeg.org> >> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale >> to disable/enable the default scale >> >> > -----Original Message----- >> > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of >> > Moritz Barsnick >> > Sent: Tuesday, February 11, 2020 19:04 >> > To: FFmpeg development discussions and patches <ffmpeg- >> > devel@ffmpeg.org> >> > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add >> > -autoscale >> > to disable/enable the default scale >> > >> > On Mon, Feb 10, 2020 at 17:27:03 +0800, Linjie Fu wrote: >> > > + { "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."}, >> > >> > Have you checked the output of "ffmpeg -h"? Your C strings merge >> > directly together, and are therefore missing spaces, e.g. in >> > "resolutionchange" and "as the first framewhen they leave", >> > >> Yes, spaces should be added, thanks for pointing this out :). >> >> I'll fix this in next version together with other suggestions if there is >> any. >> > Ping, any suggestions? Send updated patch with spaces fixed. > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Paul B Mahol > Sent: Friday, February 14, 2020 16:55 > To: FFmpeg development discussions and patches <ffmpeg- > devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add -autoscale > to disable/enable the default scale > > On 2/14/20, Fu, Linjie <linjie.fu@intel.com> wrote: > >> -----Original Message----- > >> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Fu, > >> Linjie > >> Sent: Tuesday, February 11, 2020 20:58 > >> To: FFmpeg development discussions and patches <ffmpeg- > >> devel@ffmpeg.org> > >> Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add - > autoscale > >> to disable/enable the default scale > >> > >> > -----Original Message----- > >> > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf > Of > >> > Moritz Barsnick > >> > Sent: Tuesday, February 11, 2020 19:04 > >> > To: FFmpeg development discussions and patches <ffmpeg- > >> > devel@ffmpeg.org> > >> > Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffmpeg_filter: add > >> > -autoscale > >> > to disable/enable the default scale > >> > > >> > On Mon, Feb 10, 2020 at 17:27:03 +0800, Linjie Fu wrote: > >> > > + { "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."}, > >> > > >> > Have you checked the output of "ffmpeg -h"? Your C strings merge > >> > directly together, and are therefore missing spaces, e.g. in > >> > "resolutionchange" and "as the first framewhen they leave", > >> > > >> Yes, spaces should be added, thanks for pointing this out :). > >> > >> I'll fix this in next version together with other suggestions if there is > >> any. > >> > > Ping, any suggestions? > > Send updated patch with spaces fixed. > Updated and resend the patch, thanks for review.
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..9bbd8cd 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."}, /* audio options */ { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames },