From a973b9703686b4dd3aa83786e2c6988c01d96bfa Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Mon, 3 Apr 2023 17:35:49 -0400 Subject: [PATCH] obs-ffmpeg: Set framerate for AVCodecContext outputs In avcodec.h, the docs for AVCodecContext->framerate say: encoding: May be used to signal the framerate of CFR content to an encoder. OBS is designed to always output Constant Frame Rate (CFR) content. Instead of letting this be implied, let's explicitly set the framerate per the docs. --- plugins/obs-ffmpeg/obs-ffmpeg-output.c | 1 + plugins/obs-ffmpeg/obs-ffmpeg-video-encoders.c | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.c b/plugins/obs-ffmpeg/obs-ffmpeg-output.c index 9f3a807d0..41d72dd39 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-output.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.c @@ -256,6 +256,7 @@ static bool create_video_stream(struct ffmpeg_data *data) context->width = data->config.scale_width; context->height = data->config.scale_height; context->time_base = (AVRational){ovi.fps_den, ovi.fps_num}; + context->framerate = (AVRational){ovi.fps_num, ovi.fps_den}; context->gop_size = data->config.gop_size; context->pix_fmt = closest_format; context->color_range = data->config.color_range; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-video-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-video-encoders.c index 47cc0c876..872818cef 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-video-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-video-encoders.c @@ -75,6 +75,7 @@ void ffmpeg_video_encoder_update(struct ffmpeg_video_encoder *enc, int bitrate, enc->context->width = obs_encoder_get_width(enc->encoder); enc->context->height = obs_encoder_get_height(enc->encoder); enc->context->time_base = (AVRational){voi->fps_den, voi->fps_num}; + enc->context->framerate = (AVRational){voi->fps_num, voi->fps_den}; enc->context->pix_fmt = pix_fmt; enc->context->color_range = info->range == VIDEO_RANGE_FULL ? AVCOL_RANGE_JPEG