diff --git a/src/media/media_encoder.cpp b/src/media/media_encoder.cpp
index 7fc1e020f7a5ca79495123313a461d1a0c34cdc2..ccbae447efd747f06fa16a62ef80eb17abd51a96 100644
--- a/src/media/media_encoder.cpp
+++ b/src/media/media_encoder.cpp
@@ -530,11 +530,11 @@ void MediaEncoder::prepareEncoderContext(bool is_video)
         encoderCtx_->width = device_.width;
         encoderCtx_->height = device_.height;
 
+        // satisfy ffmpeg: denominator must be 16bit or less value
         // time base = 1/FPS
-        encoderCtx_->time_base = AVRational {
-            (int) device_.framerate.denominator(),
-            (int) device_.framerate.numerator()
-        };
+        av_reduce(&encoderCtx_->time_base.den, &encoderCtx_->time_base.num,
+                  device_.framerate.numerator(), device_.framerate.denominator(),
+                  (1U << 16) - 1);
 
         // emit one intra frame every gop_size frames
         encoderCtx_->max_b_frames = 0;