diff mbox series

[FFmpeg-devel] avfilter/vf_cropdetect: add ability to change limit/reset at runtime

Message ID 5d535508-ed43-d90a-3673-f3b9e98c40a0@gmail.com
State New
Headers show
Series [FFmpeg-devel] avfilter/vf_cropdetect: add ability to change limit/reset at runtime | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch
yinshiyou/configure_loongarch64 warning Failed to apply patch

Commit Message

Jeffrey Chapuis Dec. 27, 2022, 11:46 a.m. UTC
Hello, first attempt to contribute.

Related to https://trac.ffmpeg.org/ticket/9851.

Tested with ffmpeg and mpv, amazing results.

Signed-off-by: Ashyni <jeffrey.c@tuta.io>
---
  doc/filters.texi                           | 13 +++++
  libavfilter/vf_cropdetect.c                | 42 +++++++++++++--
  tests/ref/fate/filter-metadata-cropdetect  | 60 +++++++++++-----------
  tests/ref/fate/filter-metadata-cropdetect1 | 14 ++---
  tests/ref/fate/filter-metadata-cropdetect2 | 14 ++---
  5 files changed, 94 insertions(+), 49 deletions(-)

Comments

James Almer Dec. 27, 2022, 12:34 p.m. UTC | #1
On 12/27/2022 8:46 AM, Jeffrey CHAPUIS wrote:
> Hello, first attempt to contribute.
> 
> Related to https://trac.ffmpeg.org/ticket/9851.
> 
> Tested with ffmpeg and mpv, amazing results.
> 
> Signed-off-by: Ashyni <jeffrey.c@tuta.io>
> ---
>   doc/filters.texi                           | 13 +++++
>   libavfilter/vf_cropdetect.c                | 42 +++++++++++++--
>   tests/ref/fate/filter-metadata-cropdetect  | 60 +++++++++++-----------
>   tests/ref/fate/filter-metadata-cropdetect1 | 14 ++---
>   tests/ref/fate/filter-metadata-cropdetect2 | 14 ++---
>   5 files changed, 94 insertions(+), 49 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index ceab0ea0f..bbb778368 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -10552,6 +10552,19 @@ ffmpeg -flags2 +export_mvs -i file.mp4 -vf 
> cropdetect=mode=mvedges,metadata=mode
>   @end example
>   @end itemize
>   +@subsection Commands
> +
> +This filter supports the following commands:
> +@table @option
> +@item limit
> +@item reset, reset_count
> +
> +The command accepts the same syntax of the corresponding option.
> +
> +If the specified expression is not valid, it is kept at its current
> +value.
> +@end table
> +
>   @anchor{cue}
>   @section cue
>   diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
> index 7e985fb27..fda803651 100644
> --- a/libavfilter/vf_cropdetect.c
> +++ b/libavfilter/vf_cropdetect.c
> @@ -422,26 +422,57 @@ static int filter_frame(AVFilterLink *inlink, 
> AVFrame *frame)
>           SET_META("lavfi.cropdetect.h",  h);
>           SET_META("lavfi.cropdetect.x",  x);
>           SET_META("lavfi.cropdetect.y",  y);
> +        SET_META("lavfi.cropdetect.pts", frame->pts);
> +        SET_META("lavfi.cropdetect.limit", limit);
> +        SET_META("lavfi.cropdetect.reset", s->reset_count);
>            av_log(ctx, AV_LOG_INFO,
> -               "x1:%d x2:%d y1:%d y2:%d w:%d h:%d x:%d y:%d 
> pts:%"PRId64" t:%f crop=%d:%d:%d:%d\n",
> +               "x1:%d x2:%d y1:%d y2:%d w:%d h:%d x:%d y:%d 
> pts:%"PRId64" t:%f limit:%d crop=%d:%d:%d:%d\n",
>                  s->x1, s->x2, s->y1, s->y2, w, h, x, y, frame->pts,
>                  frame->pts == AV_NOPTS_VALUE ? -1 : frame->pts * 
> av_q2d(inlink->time_base),
> -               w, h, x, y);
> +               limit, w, h, x, y);
>       }
>        return ff_filter_frame(inlink->dst->outputs[0], frame);
>   }
>   +static int process_command(AVFilterContext *ctx, const char *cmd, 
> const char *args,
> +                           char *res, int res_len, int flags)
> +{
> +    CropDetectContext *s = ctx->priv;
> +    int ret;
> +
> +    if (!strcmp(cmd, "limit") || !strcmp(cmd, "reset") || !strcmp(cmd, 
> "reset_count")) {

You could just call ff_filter_process_command() instead of hardcoding 
supported commands here. It will ignore any option without the 
AV_OPT_FLAG_RUNTIME_PARAM flag.

> +
> +        int old_limit = s->limit;
> +        int old_reset_count = s->reset_count;
> +
> +        AVFilterLink *inlink = ctx->inputs[0];
> +
> +        av_opt_set(s, cmd, args, 0);
> +
> +        if ((ret = config_input(inlink)) < 0) {

This is going to generate memleaks, and needlessly reallocate unrelated 
buffers.
You should instead av_realloc all four s->bboxes buffers here, and reset 
s->limit.

> +            s->limit = old_limit;
> +            s->reset_count = old_reset_count;
> +            return ret;
> +        }
> +    }
> +    else
> +        ret = AVERROR(ENOSYS);
> +
> +    return ret;
> +}
> +
>   #define OFFSET(x) offsetof(CropDetectContext, x)
>   #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
> +#define TFLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM | 
> AV_OPT_FLAG_RUNTIME_PARAM
>    static const AVOption cropdetect_options[] = {
> -    { "limit", "Threshold below which the pixel is considered black", 
> OFFSET(limit),       AV_OPT_TYPE_FLOAT, { .dbl = 24.0/255 }, 0, 65535, 
> FLAGS },
> +    { "limit", "Threshold below which the pixel is considered black", 
> OFFSET(limit),       AV_OPT_TYPE_FLOAT, { .dbl = 24.0/255 }, 0, 65535, 
> TFLAGS },
>       { "round", "Value by which the width/height should be divisible", 
> OFFSET(round),       AV_OPT_TYPE_INT, { .i64 = 16 }, 0, INT_MAX, FLAGS },
> -    { "reset", "Recalculate the crop area after this many frames", 
> OFFSET(reset_count), AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, FLAGS },
> +    { "reset", "Recalculate the crop area after this many frames", 
> OFFSET(reset_count), AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, TFLAGS },
>       { "skip",  "Number of initial frames to skip", 
> OFFSET(skip),        AV_OPT_TYPE_INT, { .i64 = 2 },  0, INT_MAX, FLAGS },
> -    { "reset_count", "Recalculate the crop area after this many 
> frames",OFFSET(reset_count),AV_OPT_TYPE_INT,{ .i64 = 0 },  0, INT_MAX, 
> FLAGS },
> +    { "reset_count", "Recalculate the crop area after this many 
> frames",OFFSET(reset_count),AV_OPT_TYPE_INT,{ .i64 = 0 },  0, INT_MAX, 
> TFLAGS },
>       { "max_outliers", "Threshold count of outliers", 
> OFFSET(max_outliers),AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, FLAGS },
>       { "mode", "set mode", OFFSET(mode), AV_OPT_TYPE_INT, 
> {.i64=MODE_BLACK}, 0, MODE_NB-1, FLAGS, "mode" },
>           { "black",    "detect black pixels surrounding the video", 0, 
> AV_OPT_TYPE_CONST, {.i64=MODE_BLACK},    INT_MIN, INT_MAX, FLAGS, "mode" },
> @@ -481,4 +512,5 @@ const AVFilter ff_vf_cropdetect = {
>       FILTER_OUTPUTS(avfilter_vf_cropdetect_outputs),
>       FILTER_PIXFMTS_ARRAY(pix_fmts),
>       .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
> AVFILTER_FLAG_METADATA_ONLY,
> +    .process_command = process_command,
>   };
Jeffrey Chapuis Dec. 27, 2022, 12:57 p.m. UTC | #2
> You could just call ff_filter_process_command() instead of hardcoding 
> supported commands here. It will ignore any option without the 
> AV_OPT_FLAG_RUNTIME_PARAM flag.


> This is going to generate memleaks, and needlessly reallocate 
> unrelated buffers.
> You should instead av_realloc all four s->bboxes buffers here, and 
> reset s->limit.

I don't have knowledge in c/c++, I based my changes on vf_crop.c, but i 
will look into your suggestions.
diff mbox series

Patch

diff --git a/doc/filters.texi b/doc/filters.texi
index ceab0ea0f..bbb778368 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -10552,6 +10552,19 @@  ffmpeg -flags2 +export_mvs -i file.mp4 -vf 
cropdetect=mode=mvedges,metadata=mode
  @end example
  @end itemize
  +@subsection Commands
+
+This filter supports the following commands:
+@table @option
+@item limit
+@item reset, reset_count
+
+The command accepts the same syntax of the corresponding option.
+
+If the specified expression is not valid, it is kept at its current
+value.
+@end table
+
  @anchor{cue}
  @section cue
  diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
index 7e985fb27..fda803651 100644
--- a/libavfilter/vf_cropdetect.c
+++ b/libavfilter/vf_cropdetect.c
@@ -422,26 +422,57 @@  static int filter_frame(AVFilterLink *inlink, 
AVFrame *frame)
          SET_META("lavfi.cropdetect.h",  h);
          SET_META("lavfi.cropdetect.x",  x);
          SET_META("lavfi.cropdetect.y",  y);
+        SET_META("lavfi.cropdetect.pts", frame->pts);
+        SET_META("lavfi.cropdetect.limit", limit);
+        SET_META("lavfi.cropdetect.reset", s->reset_count);
           av_log(ctx, AV_LOG_INFO,
-               "x1:%d x2:%d y1:%d y2:%d w:%d h:%d x:%d y:%d 
pts:%"PRId64" t:%f crop=%d:%d:%d:%d\n",
+               "x1:%d x2:%d y1:%d y2:%d w:%d h:%d x:%d y:%d 
pts:%"PRId64" t:%f limit:%d crop=%d:%d:%d:%d\n",
                 s->x1, s->x2, s->y1, s->y2, w, h, x, y, frame->pts,
                 frame->pts == AV_NOPTS_VALUE ? -1 : frame->pts * 
av_q2d(inlink->time_base),
-               w, h, x, y);
+               limit, w, h, x, y);
      }
       return ff_filter_frame(inlink->dst->outputs[0], frame);
  }
  +static int process_command(AVFilterContext *ctx, const char *cmd, 
const char *args,
+                           char *res, int res_len, int flags)
+{
+    CropDetectContext *s = ctx->priv;
+    int ret;
+
+    if (!strcmp(cmd, "limit") || !strcmp(cmd, "reset") || !strcmp(cmd, 
"reset_count")) {
+
+        int old_limit = s->limit;
+        int old_reset_count = s->reset_count;
+
+        AVFilterLink *inlink = ctx->inputs[0];
+
+        av_opt_set(s, cmd, args, 0);
+
+        if ((ret = config_input(inlink)) < 0) {
+            s->limit = old_limit;
+            s->reset_count = old_reset_count;
+            return ret;
+        }
+    }
+    else
+        ret = AVERROR(ENOSYS);
+
+    return ret;
+}
+
  #define OFFSET(x) offsetof(CropDetectContext, x)
  #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
+#define TFLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM | 
AV_OPT_FLAG_RUNTIME_PARAM
   static const AVOption cropdetect_options[] = {
-    { "limit", "Threshold below which the pixel is considered black", 
OFFSET(limit),       AV_OPT_TYPE_FLOAT, { .dbl = 24.0/255 }, 0, 65535, 
FLAGS },
+    { "limit", "Threshold below which the pixel is considered black", 
OFFSET(limit),       AV_OPT_TYPE_FLOAT, { .dbl = 24.0/255 }, 0, 65535, 
TFLAGS },
      { "round", "Value by which the width/height should be divisible", 
OFFSET(round),       AV_OPT_TYPE_INT, { .i64 = 16 }, 0, INT_MAX, FLAGS },
-    { "reset", "Recalculate the crop area after this many frames", 
OFFSET(reset_count), AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, FLAGS },
+    { "reset", "Recalculate the crop area after this many frames", 
OFFSET(reset_count), AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, TFLAGS },
      { "skip",  "Number of initial frames to skip", 
OFFSET(skip),        AV_OPT_TYPE_INT, { .i64 = 2 },  0, INT_MAX, FLAGS },
-    { "reset_count", "Recalculate the crop area after this many 
frames",OFFSET(reset_count),AV_OPT_TYPE_INT,{ .i64 = 0 },  0, INT_MAX, 
FLAGS },
+    { "reset_count", "Recalculate the crop area after this many 
frames",OFFSET(reset_count),AV_OPT_TYPE_INT,{ .i64 = 0 },  0, INT_MAX, 
TFLAGS },
      { "max_outliers", "Threshold count of outliers", 
OFFSET(max_outliers),AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, FLAGS },
      { "mode", "set mode", OFFSET(mode), AV_OPT_TYPE_INT, 
{.i64=MODE_BLACK}, 0, MODE_NB-1, FLAGS, "mode" },
          { "black",    "detect black pixels surrounding the video", 
0, AV_OPT_TYPE_CONST, {.i64=MODE_BLACK},    INT_MIN, INT_MAX, FLAGS, 
"mode" },
@@ -481,4 +512,5 @@  const AVFilter ff_vf_cropdetect = {
      FILTER_OUTPUTS(avfilter_vf_cropdetect_outputs),
      FILTER_PIXFMTS_ARRAY(pix_fmts),
      .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_METADATA_ONLY,
+    .process_command = process_command,
  };
diff --git a/tests/ref/fate/filter-metadata-cropdetect 
b/tests/ref/fate/filter-metadata-cropdetect
index f3e1865ab..00b02c400 100644
--- a/tests/ref/fate/filter-metadata-cropdetect
+++ b/tests/ref/fate/filter-metadata-cropdetect
@@ -1,33 +1,33 @@ 
  pts=0|
   pts=400
-pts=800|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=1200|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=1600|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=2000|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=2400|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=2800|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=3200|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=3600|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=4000|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=4400|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=4800|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=5200|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=5600|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=6000|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=6400|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=6800|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=7200|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=7600|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=8000|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=8400|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=8800|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=9200|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=9600|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=10000|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=10400|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=10800|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=11200|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=11600|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=12000|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
-pts=12400|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.y=68
+pts=800|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=800|tag:lavfi.cropdetect.reset=0
+pts=1200|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=1200|tag:lavfi.cropdetect.reset=0
+pts=1600|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=1600|tag:lavfi.cropdetect.reset=0
+pts=2000|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=2000|tag:lavfi.cropdetect.reset=0
+pts=2400|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=2400|tag:lavfi.cropdetect.reset=0
+pts=2800|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=2800|tag:lavfi.cropdetect.reset=0
+pts=3200|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=3200|tag:lavfi.cropdetect.reset=0
+pts=3600|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=3600|tag:lavfi.cropdetect.reset=0
+pts=4000|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=4000|tag:lavfi.cropdetect.reset=0
+pts=4400|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=4400|tag:lavfi.cropdetect.reset=0
+pts=4800|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=4800|tag:lavfi.cropdetect.reset=0
+pts=5200|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=5200|tag:lavfi.cropdetect.reset=0
+pts=5600|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=5600|tag:lavfi.cropdetect.reset=0
+pts=6000|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=6000|tag:lavfi.cropdetect.reset=0
+pts=6400|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=6400|tag:lavfi.cropdetect.reset=0
+pts=6800|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=6800|tag:lavfi.cropdetect.reset=0
+pts=7200|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=7200|tag:lavfi.cropdetect.reset=0
+pts=7600|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=7600|tag:lavfi.cropdetect.reset=0
+pts=8000|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=8000|tag:lavfi.cropdetect.reset=0
+pts=8400|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=8400|tag:lavfi.cropdetect.reset=0
+pts=8800|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=8800|tag:lavfi.cropdetect.reset=0
+pts=9200|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=9200|tag:lavfi.cropdetect.reset=0
+pts=9600|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=9600|tag:lavfi.cropdetect.reset=0
+pts=10000|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=10000|tag:lavfi.cropdetect.reset=0
+pts=10400|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=10400|tag:lavfi.cropdetect.reset=0
+pts=10800|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=10800|tag:lavfi.cropdetect.reset=0
+pts=11200|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=11200|tag:lavfi.cropdetect.reset=0
+pts=11600|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=11600|tag:lavfi.cropdetect.reset=0
+pts=12000|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=12000|tag:lavfi.cropdetect.reset=0
+pts=12400|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=719|tag:lavfi.cropdetect.y1=61|tag:lavfi.cropdetect.y2=424|tag:lavfi.cropdetect.w=720|tag:lavfi.cropdetect.h=352|tag:lavfi.cropdetect.x=0|tag:lavfi.cropdetect.y=68|tag:lavfi.cropdetect.pts=12400|tag:lavfi.cropdetect.reset=0
diff --git a/tests/ref/fate/filter-metadata-cropdetect1 
b/tests/ref/fate/filter-metadata-cropdetect1
index 78fbefd85..1a99862f8 100644
--- a/tests/ref/fate/filter-metadata-cropdetect1
+++ b/tests/ref/fate/filter-metadata-cropdetect1
@@ -2,10 +2,10 @@  pts=0|
   pts=1001|
 
-pts=2002|tag:lavfi.cropdetect.x=20|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=851|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=601|tag:lavfi.cropdetect.w=832|tag:lavfi.cropdetect.h=288|tag:lavfi.cropdetect.y=314|
-pts=3003|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=864|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.y=316|
-pts=4004|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.y=122|
-pts=5005|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=864|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.y=316|
-pts=6006|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.y=122|
-pts=7007|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.y=122|
-pts=8008|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.y=122|
+pts=2002|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=851|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=601|tag:lavfi.cropdetect.w=832|tag:lavfi.cropdetect.h=288|tag:lavfi.cropdetect.x=20|tag:lavfi.cropdetect.y=314|tag:lavfi.cropdetect.pts=2002|tag:lavfi.cropdetect.reset=0|
+pts=3003|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=864|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.y=316|tag:lavfi.cropdetect.pts=3003|tag:lavfi.cropdetect.reset=0|
+pts=4004|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.pts=4004|tag:lavfi.cropdetect.reset=0|
+pts=5005|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=20|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=311|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=864|tag:lavfi.cropdetect.h=304|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.y=316|tag:lavfi.cropdetect.pts=5005|tag:lavfi.cropdetect.reset=0|
+pts=6006|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.pts=6006|tag:lavfi.cropdetect.reset=0|
+pts=7007|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.pts=7007|tag:lavfi.cropdetect.reset=0|
+pts=8008|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=0|tag:lavfi.cropdetect.x2=885|tag:lavfi.cropdetect.y1=115|tag:lavfi.cropdetect.y2=621|tag:lavfi.cropdetect.w=880|tag:lavfi.cropdetect.h=496|tag:lavfi.cropdetect.x=4|tag:lavfi.cropdetect.y=122|tag:lavfi.cropdetect.pts=8008|tag:lavfi.cropdetect.reset=0|
diff --git a/tests/ref/fate/filter-metadata-cropdetect2 
b/tests/ref/fate/filter-metadata-cropdetect2
index e58f00770..514a198ed 100644
--- a/tests/ref/fate/filter-metadata-cropdetect2
+++ b/tests/ref/fate/filter-metadata-cropdetect2
@@ -3,10 +3,10 @@  pts=0|
   pts=512|
 
-pts=1024|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.y=22|
-pts=1536|tag:lavfi.cropdetect.x=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1257|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1232|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.y=22|
-pts=2048|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.y=22|
-pts=2560|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.y=22|
-pts=3072|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=912|tag:lavfi.cropdetect.y=22|
-pts=3584|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=38|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=896|tag:lavfi.cropdetect.y=40|
-pts=4096|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=912|tag:lavfi.cropdetect.y=22|
+pts=1024|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.pts=1024|tag:lavfi.cropdetect.reset=0|
+pts=1536|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1257|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1232|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=24|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.pts=1536|tag:lavfi.cropdetect.reset=0|
+pts=2048|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.pts=2048|tag:lavfi.cropdetect.reset=0|
+pts=2560|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=1221|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=1116|tag:lavfi.cropdetect.w=1200|tag:lavfi.cropdetect.h=1088|tag:lavfi.cropdetect.x=22|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.pts=2560|tag:lavfi.cropdetect.reset=0|
+pts=3072|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=912|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.pts=3072|tag:lavfi.cropdetect.reset=0|
+pts=3584|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=38|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=896|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.y=40|tag:lavfi.cropdetect.pts=3584|tag:lavfi.cropdetect.reset=0|
+pts=4096|tag:lavfi.cropdetect.limit=24|tag:lavfi.cropdetect.x1=21|tag:lavfi.cropdetect.x2=817|tag:lavfi.cropdetect.y1=15|tag:lavfi.cropdetect.y2=937|tag:lavfi.cropdetect.w=784|tag:lavfi.cropdetect.h=912|tag:lavfi.cropdetect.x=28|tag:lavfi.cropdetect.y=22|tag:lavfi.cropdetect.pts=4096|tag:lavfi.cropdetect.reset=0|
-- 
2.34.1