X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ffmpeg_opt.c;h=23e1c4039753b2c95d2fd65c33b5b4499bb213ff;hb=28031404571bb69a1d685341cfc1cd737ecb9681;hp=36e4845368ae0568dcee1d293749f816de021c57;hpb=ab71be091206a2264f3a8862215fc284bb8e6274;p=ffmpeg diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 36e4845368a..23e1c403975 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -1151,21 +1151,17 @@ static char *get_ost_filters(OptionsContext *o, AVFormatContext *oc, OutputStream *ost) { AVStream *st = ost->st; - char *filter = NULL, *filter_script = NULL; - MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, st); - MATCH_PER_STREAM_OPT(filters, str, filter, oc, st); - - if (filter_script && filter) { + if (ost->filters_script && ost->filters) { av_log(NULL, AV_LOG_ERROR, "Both -filter and -filter_script set for " "output stream #%d:%d.\n", nb_output_files, st->index); exit_program(1); } - if (filter_script) - return read_file(filter_script); - else if (filter) - return av_strdup(filter); + if (ost->filters_script) + return read_file(ost->filters_script); + else if (ost->filters) + return av_strdup(ost->filters); return av_strdup(st->codec->codec_type == AVMEDIA_TYPE_VIDEO ? "null" : "anull"); @@ -1174,18 +1170,13 @@ static char *get_ost_filters(OptionsContext *o, AVFormatContext *oc, static void check_streamcopy_filters(OptionsContext *o, AVFormatContext *oc, const OutputStream *ost, enum AVMediaType type) { - char *filter_script = NULL, *filter = NULL; - MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, ost->st); - MATCH_PER_STREAM_OPT(filters, str, filter, oc, ost->st); - if (filter_script || filter) { + if (ost->filters_script || ost->filters) { av_log(NULL, AV_LOG_ERROR, - "Filtergraph '%s' or filter_script '%s' was defined for %s output stream " - "%d:%d but codec copy was selected.\n" + "%s '%s' was defined for %s output stream %d:%d but codec copy was selected.\n" "Filtering and streamcopy cannot be used together.\n", - (char *)av_x_if_null(filter, "(none)"), - (char *)av_x_if_null(filter_script, "(none)"), - av_get_media_type_string(type), - ost->file_index, ost->index); + ost->filters ? "Filtergraph" : "Filtergraph script", + ost->filters ? ost->filters : ost->filters_script, + av_get_media_type_string(type), ost->file_index, ost->index); exit_program(1); } } @@ -1218,6 +1209,9 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in ost->frame_aspect_ratio = q; } + MATCH_PER_STREAM_OPT(filter_scripts, str, ost->filters_script, oc, st); + MATCH_PER_STREAM_OPT(filters, str, ost->filters, oc, st); + if (!ost->stream_copy) { const char *p = NULL; char *frame_size = NULL; @@ -1349,6 +1343,9 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, in audio_enc = st->codec; audio_enc->codec_type = AVMEDIA_TYPE_AUDIO; + MATCH_PER_STREAM_OPT(filter_scripts, str, ost->filters_script, oc, st); + MATCH_PER_STREAM_OPT(filters, str, ost->filters, oc, st); + if (!ost->stream_copy) { char *sample_fmt = NULL; @@ -1573,21 +1570,16 @@ static void init_output_filter(OutputFilter *ofilter, OptionsContext *o, exit_program(1); } - if (ost->avfilter) { - char *filter_script = NULL, *filter = NULL; - MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, ost->st); - MATCH_PER_STREAM_OPT(filters, str, filter, oc, ost->st); - - if (filter || filter_script) { - av_log(NULL, AV_LOG_ERROR, - "Filter graph '%s' or filter script '%s' was specified through the -filter/-filter_script/-vf/-af option " - "for output stream %d:%d, which is fed from a complex filtergraph.\n" - "-filter/-filter_script and -filter_complex cannot be used together for the same stream.\n", - (char *)av_x_if_null(filter, "(none)"), - (char *)av_x_if_null(filter_script, "(none)"), - ost->file_index, ost->index); - exit_program(1); - } + if (ost->avfilter && (ost->filters || ost->filters_script)) { + const char *opt = ost->filters ? "-vf/-af/-filter" : "-filter_script"; + av_log(NULL, AV_LOG_ERROR, + "%s '%s' was specified through the %s option " + "for output stream %d:%d, which is fed from a complex filtergraph.\n" + "%s and -filter_complex cannot be used together for the same stream.\n", + ost->filters ? "Filtergraph" : "Filtergraph script", + ost->filters ? ost->filters : ost->filters_script, + opt, ost->file_index, ost->index, opt); + exit_program(1); } if (configure_output_filter(ofilter->graph, ofilter, ofilter->out_tmp) < 0) { @@ -2097,23 +2089,23 @@ static int opt_target(void *optctx, const char *opt, const char *arg) opt_video_codec(o, "c:v", "mpeg1video"); opt_audio_codec(o, "c:a", "mp2"); parse_option(o, "f", "vcd", options); - av_dict_set(&o->g->codec_opts, "b:v", arg, 0); + av_dict_set(&o->g->codec_opts, "b:v", arg, AV_DICT_DONT_OVERWRITE); parse_option(o, "s", norm == PAL ? "352x288" : "352x240", options); parse_option(o, "r", frame_rates[norm], options); - av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", 0); + av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", AV_DICT_DONT_OVERWRITE); - av_dict_set(&o->g->codec_opts, "b:v", "1150000", 0); - av_dict_set(&o->g->codec_opts, "maxrate", "1150000", 0); - av_dict_set(&o->g->codec_opts, "minrate", "1150000", 0); - av_dict_set(&o->g->codec_opts, "bufsize", "327680", 0); // 40*1024*8; + av_dict_set(&o->g->codec_opts, "b:v", "1150000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "maxrate", "1150000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "minrate", "1150000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "bufsize", "327680", AV_DICT_DONT_OVERWRITE); // 40*1024*8; - av_dict_set(&o->g->codec_opts, "b:a", "224000", 0); + av_dict_set(&o->g->codec_opts, "b:a", "224000", AV_DICT_DONT_OVERWRITE); parse_option(o, "ar", "44100", options); parse_option(o, "ac", "2", options); - av_dict_set(&o->g->format_opts, "packetsize", "2324", 0); - av_dict_set(&o->g->format_opts, "muxrate", "1411200", 0); // 2352 * 75 * 8; + av_dict_set(&o->g->format_opts, "packetsize", "2324", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->format_opts, "muxrate", "1411200", AV_DICT_DONT_OVERWRITE); // 2352 * 75 * 8; /* We have to offset the PTS, so that it is consistent with the SCR. SCR starts at 36000, but the first two packs contain only padding @@ -2130,18 +2122,18 @@ static int opt_target(void *optctx, const char *opt, const char *arg) parse_option(o, "s", norm == PAL ? "480x576" : "480x480", options); parse_option(o, "r", frame_rates[norm], options); parse_option(o, "pix_fmt", "yuv420p", options); - av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", 0); + av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", AV_DICT_DONT_OVERWRITE); - av_dict_set(&o->g->codec_opts, "b:v", "2040000", 0); - av_dict_set(&o->g->codec_opts, "maxrate", "2516000", 0); - av_dict_set(&o->g->codec_opts, "minrate", "0", 0); // 1145000; - av_dict_set(&o->g->codec_opts, "bufsize", "1835008", 0); // 224*1024*8; - av_dict_set(&o->g->codec_opts, "scan_offset", "1", 0); + av_dict_set(&o->g->codec_opts, "b:v", "2040000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "maxrate", "2516000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "minrate", "0", AV_DICT_DONT_OVERWRITE); // 1145000; + av_dict_set(&o->g->codec_opts, "bufsize", "1835008", AV_DICT_DONT_OVERWRITE); // 224*1024*8; + av_dict_set(&o->g->codec_opts, "scan_offset", "1", AV_DICT_DONT_OVERWRITE); - av_dict_set(&o->g->codec_opts, "b:a", "224000", 0); + av_dict_set(&o->g->codec_opts, "b:a", "224000", AV_DICT_DONT_OVERWRITE); parse_option(o, "ar", "44100", options); - av_dict_set(&o->g->format_opts, "packetsize", "2324", 0); + av_dict_set(&o->g->format_opts, "packetsize", "2324", AV_DICT_DONT_OVERWRITE); } else if (!strcmp(arg, "dvd")) { @@ -2152,17 +2144,17 @@ static int opt_target(void *optctx, const char *opt, const char *arg) parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options); parse_option(o, "r", frame_rates[norm], options); parse_option(o, "pix_fmt", "yuv420p", options); - av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", 0); + av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", AV_DICT_DONT_OVERWRITE); - av_dict_set(&o->g->codec_opts, "b:v", "6000000", 0); - av_dict_set(&o->g->codec_opts, "maxrate", "9000000", 0); - av_dict_set(&o->g->codec_opts, "minrate", "0", 0); // 1500000; - av_dict_set(&o->g->codec_opts, "bufsize", "1835008", 0); // 224*1024*8; + av_dict_set(&o->g->codec_opts, "b:v", "6000000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "maxrate", "9000000", AV_DICT_DONT_OVERWRITE); + av_dict_set(&o->g->codec_opts, "minrate", "0", AV_DICT_DONT_OVERWRITE); // 1500000; + av_dict_set(&o->g->codec_opts, "bufsize", "1835008", AV_DICT_DONT_OVERWRITE); // 224*1024*8; - av_dict_set(&o->g->format_opts, "packetsize", "2048", 0); // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack. - av_dict_set(&o->g->format_opts, "muxrate", "10080000", 0); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8 + av_dict_set(&o->g->format_opts, "packetsize", "2048", AV_DICT_DONT_OVERWRITE); // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack. + av_dict_set(&o->g->format_opts, "muxrate", "10080000", AV_DICT_DONT_OVERWRITE); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8 - av_dict_set(&o->g->codec_opts, "b:a", "448000", 0); + av_dict_set(&o->g->codec_opts, "b:a", "448000", AV_DICT_DONT_OVERWRITE); parse_option(o, "ar", "48000", options); } else if (!strncmp(arg, "dv", 2)) {