diff --git a/ffmpeg.c b/ffmpeg.c index 093d7cc9fc..f5025b0be0 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1132,8 +1132,14 @@ static int encode_audio_frame(AVFormatContext *s, OutputStream *ost, if (got_packet) { if (pkt.pts != AV_NOPTS_VALUE) pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base); - if (pkt.dts != AV_NOPTS_VALUE) + if (pkt.dts != AV_NOPTS_VALUE) { + int64_t max = ost->st->cur_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT); pkt.dts = av_rescale_q(pkt.dts, enc->time_base, ost->st->time_base); + if (ost->st->cur_dts && ost->st->cur_dts != AV_NOPTS_VALUE && max > pkt.dts) { + av_log(s, max - pkt.dts > 2 ? AV_LOG_WARNING : AV_LOG_DEBUG, "Audio timestamp %"PRId64" < %"PRId64" invalid, cliping\n", pkt.dts, max); + pkt.pts = pkt.dts = max; + } + } if (pkt.duration > 0) pkt.duration = av_rescale_q(pkt.duration, enc->time_base, ost->st->time_base);