diff --git a/libavformat/riff.c b/libavformat/riff.c
index 0df5c8c7e3eb9170ba6354766c01548833154413..352bb561e9644878a7a1b1bc5be792f09134ccdc 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -428,9 +428,11 @@ void ff_end_tag(AVIOContext *pb, int64_t start)
     int64_t pos;
 
     pos = avio_tell(pb);
+    if (pos & 1)
+        avio_w8(pb, 0);
     avio_seek(pb, start - 4, SEEK_SET);
     avio_wl32(pb, (uint32_t)(pos - start));
-    avio_seek(pb, pos, SEEK_SET);
+    avio_seek(pb, FFALIGN(pos, 2), SEEK_SET);
 }
 
 /* WAVEFORMATEX header */