diff --git a/src/utils/Obs_NumberHelper.cpp b/src/utils/Obs_NumberHelper.cpp index 74b032be..39e41a3f 100644 --- a/src/utils/Obs_NumberHelper.cpp +++ b/src/utils/Obs_NumberHelper.cpp @@ -32,7 +32,17 @@ uint64_t Utils::Obs::NumberHelper::GetOutputDuration(obs_output_t *output) uint64_t frameTimeNs = video_output_get_frame_time(video); int totalFrames = obs_output_get_total_frames(output); - return util_mul_div64(totalFrames, frameTimeNs, 1000000ULL); + // calculating the divisor is a hack to support multiple video encoders, someone please improve this in the future + uint64_t divisor = 0ULL; + for (size_t i = 0; i < MAX_OUTPUT_VIDEO_ENCODERS; i++) { + obs_encoder_t *encoder = obs_output_get_video_encoder2(output, i); + if (!encoder) + continue; + uint32_t encoder_divisor = obs_encoder_get_frame_rate_divisor(encoder); + divisor += encoder_divisor <= 1 ? 1000000ULL : 1000000ULL / encoder_divisor; + } + + return util_mul_div64(totalFrames, frameTimeNs, divisor ? divisor : 1000000ULL); } size_t Utils::Obs::NumberHelper::GetSceneCount()