avconv: make the -pass option per-stream.

This commit is contained in:
Anton Khirnov 2012-08-19 08:29:44 +02:00
parent e2785fa728
commit 038c0b1e06
4 changed files with 8 additions and 12 deletions

View File

@ -42,7 +42,8 @@ version <next>:
- RTMPE protocol support - RTMPE protocol support
- RTMPTE protocol support - RTMPTE protocol support
- Canopus Lossless Codec decoder - Canopus Lossless Codec decoder
- avconv -shortest option is now per-output file - avconv -shortest option is now per-output file,
-pass is now per-output stream
- Ut Video encoder - Ut Video encoder

View File

@ -158,6 +158,8 @@ typedef struct OptionsContext {
int nb_copy_initial_nonkeyframes; int nb_copy_initial_nonkeyframes;
SpecifierOpt *filters; SpecifierOpt *filters;
int nb_filters; int nb_filters;
SpecifierOpt *pass;
int nb_pass;
} OptionsContext; } OptionsContext;
typedef struct InputFilter { typedef struct InputFilter {

View File

@ -77,7 +77,6 @@ int same_quant = 0;
static int file_overwrite = 0; static int file_overwrite = 0;
static int video_discard = 0; static int video_discard = 0;
static int intra_dc_precision = 8; static int intra_dc_precision = 8;
static int do_pass = 0;
static int using_stdin = 0; static int using_stdin = 0;
static int input_sync; static int input_sync;
@ -886,6 +885,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
char *frame_aspect_ratio = NULL, *frame_pix_fmt = NULL; char *frame_aspect_ratio = NULL, *frame_pix_fmt = NULL;
char *intra_matrix = NULL, *inter_matrix = NULL; char *intra_matrix = NULL, *inter_matrix = NULL;
const char *filters = "null"; const char *filters = "null";
int do_pass = 0;
int i; int i;
MATCH_PER_STREAM_OPT(frame_rates, str, frame_rate, oc, st); MATCH_PER_STREAM_OPT(frame_rates, str, frame_rate, oc, st);
@ -958,6 +958,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
video_enc->intra_dc_precision = intra_dc_precision - 8; video_enc->intra_dc_precision = intra_dc_precision - 8;
/* two pass mode */ /* two pass mode */
MATCH_PER_STREAM_OPT(pass, i, do_pass, oc, st);
if (do_pass) { if (do_pass) {
if (do_pass == 1) { if (do_pass == 1) {
video_enc->flags |= CODEC_FLAG_PASS1; video_enc->flags |= CODEC_FLAG_PASS1;
@ -1495,14 +1496,6 @@ loop_end:
reset_options(o); reset_options(o);
} }
/* same option as mencoder */
static int opt_pass(const char *opt, const char *arg)
{
do_pass = parse_number_or_die(opt, arg, OPT_INT, 1, 2);
return 0;
}
static int opt_target(void *optctx, const char *opt, const char *arg) static int opt_target(void *optctx, const char *opt, const char *arg)
{ {
OptionsContext *o = optctx; OptionsContext *o = optctx;
@ -1972,7 +1965,7 @@ const OptionDef options[] = {
"force video codec ('copy' to copy stream)", "codec" }, "force video codec ('copy' to copy stream)", "codec" },
{ "same_quant", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &same_quant }, { "same_quant", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &same_quant },
"use same quantizer as source (implies VBR)" }, "use same quantizer as source (implies VBR)" },
{ "pass", OPT_VIDEO | HAS_ARG , { opt_pass }, { "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT, { .off = OFFSET(pass) },
"select the pass number (1 or 2)", "n" }, "select the pass number (1 or 2)", "n" },
{ "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT, { &pass_logfilename_prefix }, { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT, { &pass_logfilename_prefix },
"select two pass log file name prefix", "prefix" }, "select two pass log file name prefix", "prefix" },

View File

@ -479,7 +479,7 @@ Use same quantizer as source (implies VBR).
Note that this is NOT SAME QUALITY. Do not use this option unless you know you Note that this is NOT SAME QUALITY. Do not use this option unless you know you
need it. need it.
@item -pass @var{n} @item -pass[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
Select the pass number (1 or 2). It is used to do two-pass Select the pass number (1 or 2). It is used to do two-pass
video encoding. The statistics of the video are recorded in the first video encoding. The statistics of the video are recorded in the first
pass into a log file (see also the option -passlogfile), pass into a log file (see also the option -passlogfile),