diff --git a/ffmpeg.c b/ffmpeg.c index 909dd68600..0a392747cd 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -895,6 +895,7 @@ static void do_video_out(AVFormatContext *s, double duration = 0; int frame_size = 0; InputStream *ist = NULL; + AVFilterContext *filter = ost->filter->filter; if (ost->source_index >= 0) ist = input_streams[ost->source_index]; @@ -902,6 +903,13 @@ static void do_video_out(AVFormatContext *s, if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num) duration = 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base)); + // We take the conservative approuch here and take the minimum even though + // this should be correct on its own but a value too small is harmless, one + // too big can lead to errors + if (filter->inputs[0]->frame_rate.num > 0 && + filter->inputs[0]->frame_rate.den > 0) + duration = FFMIN(duration, 1/(av_q2d(filter->inputs[0]->frame_rate) * av_q2d(enc->time_base))); + if (!ost->filters_script && !ost->filters && next_picture &&