diff --git a/ffmpeg.c b/ffmpeg.c
index dfef64f3444707ae866cfd55b3ea6d7b685b4450..c48aec71160a67a087fa799af64737b28bb79941 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -202,13 +202,14 @@ static void sub2video_push_ref(InputStream *ist, int64_t pts)
                              AV_BUFFERSRC_FLAG_PUSH);
 }
 
-static void sub2video_update(InputStream *ist, AVSubtitle *sub, int64_t pts)
+static void sub2video_update(InputStream *ist, AVSubtitle *sub)
 {
     int w = ist->sub2video.w, h = ist->sub2video.h;
     AVFilterBufferRef *ref = ist->sub2video.ref;
     int8_t *dst;
     int     dst_linesize;
     int i;
+    int64_t pts = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ist->st->time_base);
 
     if (!ref)
         return;
@@ -1680,7 +1681,7 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
         FFSWAP(AVSubtitle, subtitle,    ist->prev_sub.subtitle);
     }
 
-    sub2video_update(ist, &subtitle, pkt->pts);
+    sub2video_update(ist, &subtitle);
 
     if (!*got_output || !subtitle.num_rects)
         return ret;