diff --git a/libavformat/utils.c b/libavformat/utils.c
index 4e75bc157d4aca12d026f538dbe4eec0a295057d..010d8c3100c2304532095ec34017e461f24bb049 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -1993,8 +1993,8 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){
     next_point = &s->packet_buffer;
     while(*next_point){
         AVStream *st2= s->streams[ (*next_point)->pkt.stream_index];
-        int64_t left=  st2->time_base.num * st ->time_base.den;
-        int64_t right= st ->time_base.num * st2->time_base.den;
+        int64_t left=  st2->time_base.num * (int64_t)st ->time_base.den;
+        int64_t right= st ->time_base.num * (int64_t)st2->time_base.den;
         if((*next_point)->pkt.dts * left > pkt->dts * right) //FIXME this can overflow
             break;
         next_point= &(*next_point)->next;