diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
index d7af1cf..86c219d 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -65,7 +65,7 @@ struct ogg_stream {
     unsigned int pstart;
     unsigned int psize;
     unsigned int pflags;
-    unsigned int pduration;
+    int64_t pduration;
     uint32_t serial;
     uint64_t granule;
     uint64_t start_granule;
diff --git a/libavformat/oggparseopus.c b/libavformat/oggparseopus.c
index f45ad84..076be7a 100644
--- a/libavformat/oggparseopus.c
+++ b/libavformat/oggparseopus.c
@@ -168,7 +168,7 @@ static int opus_packet(AVFormatContext *avf, int idx)
             os->pduration = skip < os->pduration ? os->pduration - skip : 1;
             os->end_trimming = skip;
             av_log(avf, AV_LOG_DEBUG,
-                   "Last packet was truncated to %d due to end trimming.\n",
+                   "Last packet was truncated to %" PRId64 " due to end trimming.\n",
                    os->pduration);
         }
     }
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index 65b1998..6b2be27 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -217,7 +217,7 @@ struct oggvorbis_private {
     unsigned char *packet[3];
     AVVorbisParseContext *vp;
     int64_t final_pts;
-    int final_duration;
+    int64_t final_duration;
 };
 
 static int fixup_vorbis_headers(AVFormatContext *as,
