diff --git a/tools/output/output.c b/tools/output/output.c
index f8910d4894be06b16339d6d432a0393ecb0796da..887d450b45193989e07c76a432b30c5243eeea76 100644
--- a/tools/output/output.c
+++ b/tools/output/output.c
@@ -39,6 +39,11 @@
 #include "output/output.h"
 #include "output/muxer.h"
 
+#ifdef _WIN32
+#include <fcntl.h>
+#include <io.h>
+#endif
+
 struct MuxerContext {
     MuxerPriv *data;
     const Muxer *impl;
@@ -141,6 +146,11 @@ int output_open(MuxerContext **const c_out,
     }
     c->one_file_per_frame = name_offset || (!name && have_num_pattern);
 
+#ifdef _WIN32
+    if (impl != muxers[0] && !strcmp(filename, "-"))
+        _setmode(_fileno(stdout), _O_BINARY);
+#endif
+
     if (c->one_file_per_frame) {
         c->fps[0] = fps[0];
         c->fps[1] = fps[1];