From 109b54fd66d3ae24b3f4477b07928f7df441710f Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 7 Feb 2022 13:09:43 -0800 Subject: [PATCH] obs-ffmpeg: Fix svt-av1 rate control settings For SVT-AV1, rate control is explicitly set via an "rc" option, so set those options manually for SVT-AV1. CBR doesn't seem to be fully supported, but it's sort of supported via CVBR (constrained variable bitrate), which seems to be specific to each GOP size, which is about as close to CBR as we can get. --- plugins/obs-ffmpeg/obs-ffmpeg-av1.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-av1.c b/plugins/obs-ffmpeg/obs-ffmpeg-av1.c index 3a5224735..a511a3139 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-av1.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-av1.c @@ -157,15 +157,24 @@ static bool av1_update(struct av1_encoder *enc, obs_data_t *settings) av_opt_set_int(enc->context->priv_data, "row-mt", 1, 0); } + if (enc->svtav1) + av_opt_set(enc->context->priv_data, "rc", "vbr", 0); + if (astrcmpi(rc, "cqp") == 0) { bitrate = 0; enc->context->global_quality = cqp; + if (enc->svtav1) + av_opt_set(enc->context->priv_data, "rc", "cqp", 0); + } else if (astrcmpi(rc, "vbr") != 0) { /* CBR by default */ const int64_t rate = bitrate * INT64_C(1000); enc->context->rc_max_rate = rate; enc->context->rc_min_rate = rate; cqp = 0; + + if (enc->svtav1) + av_opt_set(enc->context->priv_data, "rc", "cvbr", 0); } const int rate = bitrate * 1000;