X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ffmpeg_opt.c;h=1962cf48cb270a1eb62c12deff1f6635e818c880;hb=9f61d6d8fb658ec5156f323d5c2264de5383b951;hp=99182e0914cb20bdb8187473dfc986ff71064dbe;hpb=2b9044a6f0b0a6acebf24dbcb988d09c2a30f56f;p=ffmpeg diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 99182e0914c..1962cf48cb2 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -872,6 +872,7 @@ static int open_input_file(OptionsContext *o, const char *filename) print_error(filename, err); exit_program(1); } + remove_avoptions(&o->g->format_opts, o->g->codec_opts); assert_avoptions(o->g->format_opts); /* apply forced codec ids */ @@ -1869,8 +1870,27 @@ static int open_output_file(OptionsContext *o, const char *filename) if (!o->subtitle_disable && (avcodec_find_encoder(oc->oformat->subtitle_codec) || subtitle_codec_name)) { for (i = 0; i < nb_input_streams; i++) if (input_streams[i]->st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) { - new_subtitle_stream(o, oc, i); - break; + AVCodecDescriptor const *input_descriptor = + avcodec_descriptor_get(input_streams[i]->st->codec->codec_id); + AVCodecDescriptor const *output_descriptor = NULL; + AVCodec const *output_codec = + avcodec_find_encoder(oc->oformat->subtitle_codec); + int input_props = 0, output_props = 0; + if (output_codec) + output_descriptor = avcodec_descriptor_get(output_codec->id); + if (input_descriptor) + input_props = input_descriptor->props & (AV_CODEC_PROP_TEXT_SUB | AV_CODEC_PROP_BITMAP_SUB); + if (output_descriptor) + output_props = output_descriptor->props & (AV_CODEC_PROP_TEXT_SUB | AV_CODEC_PROP_BITMAP_SUB); + if (subtitle_codec_name || + input_props & output_props || + // Map dvb teletext which has neither property to any output subtitle encoder + input_descriptor && output_descriptor && + (!input_descriptor->props || + !output_descriptor->props)) { + new_subtitle_stream(o, oc, i); + break; + } } } /* do something with data? */