diff --git a/ffmpeg.c b/ffmpeg.c index 844034e7e7..73792ed44f 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -2925,10 +2925,6 @@ static int transcode_init(void) goto dump_format; } - if (ist) - ist->decoding_needed |= DECODING_FOR_OST; - ost->encoding_needed = 1; - set_encoder_id(output_files[ost->file_index], ost); if (!ost->filter && diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 31171b1bf7..b04e319630 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -2156,6 +2156,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 |= DECODING_FOR_OST; + } + } + /* check filename in case of an image number is expected */ if (oc->oformat->flags & AVFMT_NEEDNUMBER) { if (!av_filename_number_test(oc->filename)) {