From: Limin Wang <lance.lmw...@gmail.com> As suggested by Paul to support frozen frames discard, please refer to: https://patchwork.ffmpeg.org/patch/15423/
You can tested with below commands: ./ffmpeg -f lavfi -i "smptebars=duration=5:size=1280x720:rate=30,freezedetect,metadata=mode=select:key=lavfi.freezedetect.mafd:value=0.01:function=greater" -f null - frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.03 bitrate=N/A speed=2.14x Signed-off-by: Limin Wang <lance.lmw...@gmail.com> --- doc/filters.texi | 9 +++++++++ libavfilter/vf_freezedetect.c | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/doc/filters.texi b/doc/filters.texi index 55a8ebae56..cfc10c8479 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -10800,6 +10800,15 @@ timestamp of the first frame of the freeze. The @code{lavfi.freezedetect.freeze_end} metadata keys are set on the first frame after the freeze. +The @code{lavfi.freezedetect.mafd} metadata key is set for all frames except the +first reference frame. You can use it to drop frozen frames by metadata select +mode. Note that in this way the first few frozen frames(the detection interval) +are dropped also. An example is as follows: +@example +freezedetect,metadata=mode=select:key=lavfi.freezedetect.mafd:value=0.001:function=greater +@end example + + The filter accepts the following options: @table @option diff --git a/libavfilter/vf_freezedetect.c b/libavfilter/vf_freezedetect.c index cc086afee6..3931bcfa2e 100644 --- a/libavfilter/vf_freezedetect.c +++ b/libavfilter/vf_freezedetect.c @@ -124,11 +124,14 @@ static av_cold void uninit(AVFilterContext *ctx) av_frame_free(&s->reference_frame); } +static int set_meta(FreezeDetectContext *s, AVFrame *frame, const char *key, const char *value); static int is_frozen(FreezeDetectContext *s, AVFrame *reference, AVFrame *frame) { uint64_t sad = 0; uint64_t count = 0; double mafd; + char buf[64]; + for (int plane = 0; plane < 4; plane++) { if (s->width[plane]) { uint64_t plane_sad; @@ -141,6 +144,10 @@ static int is_frozen(FreezeDetectContext *s, AVFrame *reference, AVFrame *frame) } emms_c(); mafd = (double)sad / count / (1ULL << s->bitdepth); + + snprintf(buf, sizeof(buf), "%0.5f", mafd); + set_meta(s, frame, "lavfi.freezedetect.mafd", buf); + return (mafd <= s->noise); } -- 2.21.0 _______________________________________________ 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".