diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c index b8b1b4f8f1..b0ff60d8c7 100644 --- a/libavcodec/librav1e.c +++ b/libavcodec/librav1e.c @@ -186,10 +186,21 @@ static av_cold int librav1e_encode_init(AVCodecContext *avctx) return AVERROR_EXTERNAL; } - rav1e_config_set_time_base(cfg, (RaRational) { - avctx->time_base.num * avctx->ticks_per_frame, - avctx->time_base.den - }); + /* + * Rav1e currently uses the time base given to it only for ratecontrol... where + * the inverse is taken and used as a framerate. So, do what we do in other wrappers + * and use the framerate if we can. + */ + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { + rav1e_config_set_time_base(cfg, (RaRational) { + avctx->framerate.den, avctx->framerate.num + }); + } else { + rav1e_config_set_time_base(cfg, (RaRational) { + avctx->time_base.num * avctx->ticks_per_frame, + avctx->time_base.den + }); + } if (avctx->flags & AV_CODEC_FLAG_PASS2) { if (!avctx->stats_in) {