ping, it's another approach to discard frozen frame, please comments.
On Thu, Oct 10, 2019 at 11:48:40AM +0800, lance.lmw...@gmail.com wrote: > 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".