diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 6a43ce4c32..fadbb0c591 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -668,6 +668,11 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
         return 0;
     }
 
+    if (st->codec->codec_id == CODEC_ID_DIRAC) {
+        /* for Dirac, a single PES packet must be generated */
+        mpegts_write_pes(s, st, buf, size, pkt->pts, pkt->dts);
+        return 0;
+    }
     max_payload_size = DEFAULT_PES_PAYLOAD_SIZE;
     while (size > 0) {
         len = max_payload_size - ts_st->payload_index;