From 613b75ffec8da806d10b030649a564a19c16bdb7 Mon Sep 17 00:00:00 2001 From: k4yt3x Date: Mon, 28 Oct 2024 00:00:00 +0000 Subject: [PATCH] fix(encoder): fixed incorrect encoded video frame rate Signed-off-by: k4yt3x --- src/encoder.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/encoder.cpp b/src/encoder.cpp index 29fdeb8..2f622bf 100644 --- a/src/encoder.cpp +++ b/src/encoder.cpp @@ -85,12 +85,20 @@ int init_encoder( } } - // Set the time base - codec_ctx->time_base = av_inv_q(dec_ctx->framerate); - if (codec_ctx->time_base.num == 0 || codec_ctx->time_base.den == 0) { + // Set the output video's time base + if (dec_ctx->time_base.num > 0 && dec_ctx->time_base.den > 0) { + codec_ctx->time_base = dec_ctx->time_base; + } else { codec_ctx->time_base = av_inv_q(av_guess_frame_rate(ifmt_ctx, out_stream, NULL)); } + // Set the output video's frame rate + if (dec_ctx->framerate.num > 0 && dec_ctx->framerate.den > 0) { + codec_ctx->framerate = dec_ctx->framerate; + } else { + codec_ctx->framerate = av_guess_frame_rate(ifmt_ctx, out_stream, NULL); + } + // Set the CRF and preset for any codecs that support it char crf_str[16]; snprintf(crf_str, sizeof(crf_str), "%.f", static_cast(encoder_config->crf)); @@ -113,6 +121,8 @@ int init_encoder( } out_stream->time_base = codec_ctx->time_base; + out_stream->avg_frame_rate = codec_ctx->framerate; + out_stream->r_frame_rate = codec_ctx->framerate; if (encoder_config->copy_streams) { // Allocate the stream map