diff --git a/avconv.c b/avconv.c
index a44267c9c41d175d43aa78655980f97842ac0bdc..0394a86047878ed25a3ac3b6917f3dbb5295dc82 100644
--- a/avconv.c
+++ b/avconv.c
@@ -1774,10 +1774,6 @@ static int transcode_init(void)
                 goto dump_format;
             }
 
-            if (ist)
-                ist->decoding_needed = 1;
-            ost->encoding_needed = 1;
-
             set_encoder_id(output_files[ost->file_index], ost);
 
             /*
diff --git a/avconv_opt.c b/avconv_opt.c
index 74307bfeb60dc90a2a28b43bf6b6c61c17b88932..7adf05197848be41019a0c4b7bd01898badadb46 100644
--- a/avconv_opt.c
+++ b/avconv_opt.c
@@ -1621,6 +1621,17 @@ loop_end:
     }
     av_dict_free(&unused_opts);
 
+    /* set the encoding/decoding_needed flags */
+    for (i = of->ost_index; i < nb_output_streams; i++) {
+        OutputStream *ost = output_streams[i];
+
+        ost->encoding_needed = !ost->stream_copy;
+        if (ost->encoding_needed && ost->source_index >= 0) {
+            InputStream *ist = input_streams[ost->source_index];
+            ist->decoding_needed = 1;
+        }
+    }
+
     /* check filename in case of an image number is expected */
     if (oc->oformat->flags & AVFMT_NEEDNUMBER) {
         if (!av_filename_number_test(oc->filename)) {