ffmpeg_opt.c
Go to the documentation of this file.
1 /*
2  * ffmpeg option parsing
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include <stdint.h>
22 
23 #include "ffmpeg.h"
24 #include "cmdutils.h"
25 
26 #include "libavformat/avformat.h"
27 
28 #include "libavcodec/avcodec.h"
29 
30 #include "libavfilter/avfilter.h"
31 
32 #include "libavutil/avassert.h"
33 #include "libavutil/avstring.h"
34 #include "libavutil/avutil.h"
36 #include "libavutil/intreadwrite.h"
37 #include "libavutil/fifo.h"
38 #include "libavutil/mathematics.h"
39 #include "libavutil/opt.h"
40 #include "libavutil/parseutils.h"
41 #include "libavutil/pixdesc.h"
42 #include "libavutil/pixfmt.h"
43 
44 #define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\
45 {\
46  int i, ret;\
47  for (i = 0; i < o->nb_ ## name; i++) {\
48  char *spec = o->name[i].specifier;\
49  if ((ret = check_stream_specifier(fmtctx, st, spec)) > 0)\
50  outvar = o->name[i].u.type;\
51  else if (ret < 0)\
52  exit(1);\
53  }\
54 }
55 
56 #define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)\
57 {\
58  int i;\
59  for (i = 0; i < o->nb_ ## name; i++) {\
60  char *spec = o->name[i].specifier;\
61  if (!strcmp(spec, mediatype))\
62  outvar = o->name[i].u.type;\
63  }\
64 }
66 
69 float dts_error_threshold = 3600*30;
70 
71 int audio_volume = 256;
75 int do_benchmark = 0;
77 int do_hex_dump = 0;
78 int do_pkt_dump = 0;
79 int copy_ts = 0;
80 int copy_tb = -1;
81 int debug_ts = 0;
82 int exit_on_error = 0;
83 int print_stats = -1;
84 int qp_hist = 0;
87 
88 
89 static int intra_only = 0;
90 static int file_overwrite = 0;
91 static int no_file_overwrite = 0;
92 static int video_discard = 0;
93 static int intra_dc_precision = 8;
94 static int do_psnr = 0;
95 static int input_sync;
96 
97 static int64_t recording_time = INT64_MAX;
98 
99 static void uninit_options(OptionsContext *o, int is_input)
100 {
101  const OptionDef *po = options;
102  int i;
103 
104  /* all OPT_SPEC and OPT_STRING can be freed in generic way */
105  while (po->name) {
106  void *dst = (uint8_t*)o + po->u.off;
107 
108  if (po->flags & OPT_SPEC) {
109  SpecifierOpt **so = dst;
110  int i, *count = (int*)(so + 1);
111  for (i = 0; i < *count; i++) {
112  av_freep(&(*so)[i].specifier);
113  if (po->flags & OPT_STRING)
114  av_freep(&(*so)[i].u.str);
115  }
116  av_freep(so);
117  *count = 0;
118  } else if (po->flags & OPT_OFFSET && po->flags & OPT_STRING)
119  av_freep(dst);
120  po++;
121  }
122 
123  for (i = 0; i < o->nb_stream_maps; i++)
125  av_freep(&o->stream_maps);
127  av_freep(&o->streamid_map);
128  av_freep(&o->attachments);
129 
130  if (is_input)
132  else
133  recording_time = INT64_MAX;
134 }
135 
136 static void init_options(OptionsContext *o, int is_input)
137 {
138  memset(o, 0, sizeof(*o));
139 
140  if (!is_input && recording_time != INT64_MAX) {
143  "-t is not an input option, keeping it for the next output;"
144  " consider fixing your command line.\n");
145  } else
146  o->recording_time = INT64_MAX;
147  o->stop_time = INT64_MAX;
148  o->mux_max_delay = 0.7;
149  o->limit_filesize = UINT64_MAX;
150  o->chapters_input_file = INT_MAX;
151 }
152 
153 /* return a copy of the input with the stream specifiers removed from the keys */
155 {
156  AVDictionaryEntry *e = NULL;
157  AVDictionary *ret = NULL;
158 
159  while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX))) {
160  char *p = strchr(e->key, ':');
161 
162  if (p)
163  *p = 0;
164  av_dict_set(&ret, e->key, e->value, 0);
165  if (p)
166  *p = ':';
167  }
168  return ret;
169 }
170 
171 static int opt_sameq(void *optctx, const char *opt, const char *arg)
172 {
173  av_log(NULL, AV_LOG_ERROR, "Option '%s' was removed. "
174  "If you are looking for an option to preserve the quality (which is not "
175  "what -%s was for), use -qscale 0 or an equivalent quality factor option.\n",
176  opt, opt);
177  return AVERROR(EINVAL);
178 }
179 
180 static int opt_video_channel(void *optctx, const char *opt, const char *arg)
181 {
182  av_log(NULL, AV_LOG_WARNING, "This option is deprecated, use -channel.\n");
183  return opt_default(optctx, "channel", arg);
184 }
185 
186 static int opt_video_standard(void *optctx, const char *opt, const char *arg)
187 {
188  av_log(NULL, AV_LOG_WARNING, "This option is deprecated, use -standard.\n");
189  return opt_default(optctx, "standard", arg);
190 }
191 
192 static int opt_audio_codec(void *optctx, const char *opt, const char *arg)
193 {
194  OptionsContext *o = optctx;
195  return parse_option(o, "codec:a", arg, options);
196 }
197 
198 static int opt_video_codec(void *optctx, const char *opt, const char *arg)
199 {
200  OptionsContext *o = optctx;
201  return parse_option(o, "codec:v", arg, options);
202 }
203 
204 static int opt_subtitle_codec(void *optctx, const char *opt, const char *arg)
205 {
206  OptionsContext *o = optctx;
207  return parse_option(o, "codec:s", arg, options);
208 }
209 
210 static int opt_data_codec(void *optctx, const char *opt, const char *arg)
211 {
212  OptionsContext *o = optctx;
213  return parse_option(o, "codec:d", arg, options);
214 }
215 
216 static int opt_map(void *optctx, const char *opt, const char *arg)
217 {
218  OptionsContext *o = optctx;
219  StreamMap *m = NULL;
220  int i, negative = 0, file_idx;
221  int sync_file_idx = -1, sync_stream_idx = 0;
222  char *p, *sync;
223  char *map;
224 
225  if (*arg == '-') {
226  negative = 1;
227  arg++;
228  }
229  map = av_strdup(arg);
230 
231  /* parse sync stream first, just pick first matching stream */
232  if (sync = strchr(map, ',')) {
233  *sync = 0;
234  sync_file_idx = strtol(sync + 1, &sync, 0);
235  if (sync_file_idx >= nb_input_files || sync_file_idx < 0) {
236  av_log(NULL, AV_LOG_FATAL, "Invalid sync file index: %d.\n", sync_file_idx);
237  exit(1);
238  }
239  if (*sync)
240  sync++;
241  for (i = 0; i < input_files[sync_file_idx]->nb_streams; i++)
242  if (check_stream_specifier(input_files[sync_file_idx]->ctx,
243  input_files[sync_file_idx]->ctx->streams[i], sync) == 1) {
244  sync_stream_idx = i;
245  break;
246  }
247  if (i == input_files[sync_file_idx]->nb_streams) {
248  av_log(NULL, AV_LOG_FATAL, "Sync stream specification in map %s does not "
249  "match any streams.\n", arg);
250  exit(1);
251  }
252  }
253 
254 
255  if (map[0] == '[') {
256  /* this mapping refers to lavfi output */
257  const char *c = map + 1;
259  m = &o->stream_maps[o->nb_stream_maps - 1];
260  m->linklabel = av_get_token(&c, "]");
261  if (!m->linklabel) {
262  av_log(NULL, AV_LOG_ERROR, "Invalid output link label: %s.\n", map);
263  exit(1);
264  }
265  } else {
266  file_idx = strtol(map, &p, 0);
267  if (file_idx >= nb_input_files || file_idx < 0) {
268  av_log(NULL, AV_LOG_FATAL, "Invalid input file index: %d.\n", file_idx);
269  exit(1);
270  }
271  if (negative)
272  /* disable some already defined maps */
273  for (i = 0; i < o->nb_stream_maps; i++) {
274  m = &o->stream_maps[i];
275  if (file_idx == m->file_index &&
278  *p == ':' ? p + 1 : p) > 0)
279  m->disabled = 1;
280  }
281  else
282  for (i = 0; i < input_files[file_idx]->nb_streams; i++) {
283  if (check_stream_specifier(input_files[file_idx]->ctx, input_files[file_idx]->ctx->streams[i],
284  *p == ':' ? p + 1 : p) <= 0)
285  continue;
287  m = &o->stream_maps[o->nb_stream_maps - 1];
288 
289  m->file_index = file_idx;
290  m->stream_index = i;
291 
292  if (sync_file_idx >= 0) {
293  m->sync_file_index = sync_file_idx;
294  m->sync_stream_index = sync_stream_idx;
295  } else {
296  m->sync_file_index = file_idx;
297  m->sync_stream_index = i;
298  }
299  }
300  }
301 
302  if (!m) {
303  av_log(NULL, AV_LOG_FATAL, "Stream map '%s' matches no streams.\n", arg);
304  exit(1);
305  }
306 
307  av_freep(&map);
308  return 0;
309 }
310 
311 static int opt_attach(void *optctx, const char *opt, const char *arg)
312 {
313  OptionsContext *o = optctx;
315  o->attachments[o->nb_attachments - 1] = arg;
316  return 0;
317 }
318 
319 static int opt_map_channel(void *optctx, const char *opt, const char *arg)
320 {
321  OptionsContext *o = optctx;
322  int n;
323  AVStream *st;
325 
328 
329  /* muted channel syntax */
330  n = sscanf(arg, "%d:%d.%d", &m->channel_idx, &m->ofile_idx, &m->ostream_idx);
331  if ((n == 1 || n == 3) && m->channel_idx == -1) {
332  m->file_idx = m->stream_idx = -1;
333  if (n == 1)
334  m->ofile_idx = m->ostream_idx = -1;
335  return 0;
336  }
337 
338  /* normal syntax */
339  n = sscanf(arg, "%d.%d.%d:%d.%d",
340  &m->file_idx, &m->stream_idx, &m->channel_idx,
341  &m->ofile_idx, &m->ostream_idx);
342 
343  if (n != 3 && n != 5) {
344  av_log(NULL, AV_LOG_FATAL, "Syntax error, mapchan usage: "
345  "[file.stream.channel|-1][:syncfile:syncstream]\n");
346  exit(1);
347  }
348 
349  if (n != 5) // only file.stream.channel specified
350  m->ofile_idx = m->ostream_idx = -1;
351 
352  /* check input */
353  if (m->file_idx < 0 || m->file_idx >= nb_input_files) {
354  av_log(NULL, AV_LOG_FATAL, "mapchan: invalid input file index: %d\n",
355  m->file_idx);
356  exit(1);
357  }
358  if (m->stream_idx < 0 ||
360  av_log(NULL, AV_LOG_FATAL, "mapchan: invalid input file stream index #%d.%d\n",
361  m->file_idx, m->stream_idx);
362  exit(1);
363  }
364  st = input_files[m->file_idx]->ctx->streams[m->stream_idx];
365  if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO) {
366  av_log(NULL, AV_LOG_FATAL, "mapchan: stream #%d.%d is not an audio stream.\n",
367  m->file_idx, m->stream_idx);
368  exit(1);
369  }
370  if (m->channel_idx < 0 || m->channel_idx >= st->codec->channels) {
371  av_log(NULL, AV_LOG_FATAL, "mapchan: invalid audio channel #%d.%d.%d\n",
372  m->file_idx, m->stream_idx, m->channel_idx);
373  exit(1);
374  }
375  return 0;
376 }
377 
378 /**
379  * Parse a metadata specifier passed as 'arg' parameter.
380  * @param arg metadata string to parse
381  * @param type metadata type is written here -- g(lobal)/s(tream)/c(hapter)/p(rogram)
382  * @param index for type c/p, chapter/program index is written here
383  * @param stream_spec for type s, the stream specifier is written here
384  */
385 static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
386 {
387  if (*arg) {
388  *type = *arg;
389  switch (*arg) {
390  case 'g':
391  break;
392  case 's':
393  if (*(++arg) && *arg != ':') {
394  av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\n", arg);
395  exit(1);
396  }
397  *stream_spec = *arg == ':' ? arg + 1 : "";
398  break;
399  case 'c':
400  case 'p':
401  if (*(++arg) == ':')
402  *index = strtol(++arg, NULL, 0);
403  break;
404  default:
405  av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\n", *arg);
406  exit(1);
407  }
408  } else
409  *type = 'g';
410 }
411 
412 static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
413 {
414  AVDictionary **meta_in = NULL;
415  AVDictionary **meta_out = NULL;
416  int i, ret = 0;
417  char type_in, type_out;
418  const char *istream_spec = NULL, *ostream_spec = NULL;
419  int idx_in = 0, idx_out = 0;
420 
421  parse_meta_type(inspec, &type_in, &idx_in, &istream_spec);
422  parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
423 
424  if (!ic) {
425  if (type_out == 'g' || !*outspec)
426  o->metadata_global_manual = 1;
427  if (type_out == 's' || !*outspec)
429  if (type_out == 'c' || !*outspec)
431  return 0;
432  }
433 
434  if (type_in == 'g' || type_out == 'g')
435  o->metadata_global_manual = 1;
436  if (type_in == 's' || type_out == 's')
438  if (type_in == 'c' || type_out == 'c')
440 
441  /* ic is NULL when just disabling automatic mappings */
442  if (!ic)
443  return 0;
444 
445 #define METADATA_CHECK_INDEX(index, nb_elems, desc)\
446  if ((index) < 0 || (index) >= (nb_elems)) {\
447  av_log(NULL, AV_LOG_FATAL, "Invalid %s index %d while processing metadata maps.\n",\
448  (desc), (index));\
449  exit(1);\
450  }
451 
452 #define SET_DICT(type, meta, context, index)\
453  switch (type) {\
454  case 'g':\
455  meta = &context->metadata;\
456  break;\
457  case 'c':\
458  METADATA_CHECK_INDEX(index, context->nb_chapters, "chapter")\
459  meta = &context->chapters[index]->metadata;\
460  break;\
461  case 'p':\
462  METADATA_CHECK_INDEX(index, context->nb_programs, "program")\
463  meta = &context->programs[index]->metadata;\
464  break;\
465  case 's':\
466  break; /* handled separately below */ \
467  default: av_assert0(0);\
468  }\
469 
470  SET_DICT(type_in, meta_in, ic, idx_in);
471  SET_DICT(type_out, meta_out, oc, idx_out);
472 
473  /* for input streams choose first matching stream */
474  if (type_in == 's') {
475  for (i = 0; i < ic->nb_streams; i++) {
476  if ((ret = check_stream_specifier(ic, ic->streams[i], istream_spec)) > 0) {
477  meta_in = &ic->streams[i]->metadata;
478  break;
479  } else if (ret < 0)
480  exit(1);
481  }
482  if (!meta_in) {
483  av_log(NULL, AV_LOG_FATAL, "Stream specifier %s does not match any streams.\n", istream_spec);
484  exit(1);
485  }
486  }
487 
488  if (type_out == 's') {
489  for (i = 0; i < oc->nb_streams; i++) {
490  if ((ret = check_stream_specifier(oc, oc->streams[i], ostream_spec)) > 0) {
491  meta_out = &oc->streams[i]->metadata;
492  av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
493  } else if (ret < 0)
494  exit(1);
495  }
496  } else
497  av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
498 
499  return 0;
500 }
501 
502 static int opt_recording_timestamp(void *optctx, const char *opt, const char *arg)
503 {
504  OptionsContext *o = optctx;
505  char buf[128];
506  int64_t recording_timestamp = parse_time_or_die(opt, arg, 0) / 1E6;
507  struct tm time = *gmtime((time_t*)&recording_timestamp);
508  strftime(buf, sizeof(buf), "creation_time=%FT%T%z", &time);
509  parse_option(o, "metadata", buf, options);
510 
511  av_log(NULL, AV_LOG_WARNING, "%s is deprecated, set the 'creation_time' metadata "
512  "tag instead.\n", opt);
513  return 0;
514 }
515 
516 static AVCodec *find_codec_or_die(const char *name, enum AVMediaType type, int encoder)
517 {
518  const AVCodecDescriptor *desc;
519  const char *codec_string = encoder ? "encoder" : "decoder";
520  AVCodec *codec;
521 
522  codec = encoder ?
525 
526  if (!codec && (desc = avcodec_descriptor_get_by_name(name))) {
527  codec = encoder ? avcodec_find_encoder(desc->id) :
528  avcodec_find_decoder(desc->id);
529  if (codec)
530  av_log(NULL, AV_LOG_VERBOSE, "Matched %s '%s' for codec '%s'.\n",
531  codec_string, codec->name, desc->name);
532  }
533 
534  if (!codec) {
535  av_log(NULL, AV_LOG_FATAL, "Unknown %s '%s'\n", codec_string, name);
536  exit(1);
537  }
538  if (codec->type != type) {
539  av_log(NULL, AV_LOG_FATAL, "Invalid %s type '%s'\n", codec_string, name);
540  exit(1);
541  }
542  return codec;
543 }
544 
546 {
547  char *codec_name = NULL;
548 
549  MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st);
550  if (codec_name) {
551  AVCodec *codec = find_codec_or_die(codec_name, st->codec->codec_type, 0);
552  st->codec->codec_id = codec->id;
553  return codec;
554  } else
555  return avcodec_find_decoder(st->codec->codec_id);
556 }
557 
558 /* Add all the streams from the given input file to the global
559  * list of input streams. */
561 {
562  int i;
563  char *next, *codec_tag = NULL;
564 
565  for (i = 0; i < ic->nb_streams; i++) {
566  AVStream *st = ic->streams[i];
567  AVCodecContext *dec = st->codec;
568  InputStream *ist = av_mallocz(sizeof(*ist));
569  char *framerate = NULL;
570 
571  if (!ist)
572  exit(1);
573 
575  input_streams[nb_input_streams - 1] = ist;
576 
577  ist->st = st;
578  ist->file_index = nb_input_files;
579  ist->discard = 1;
580  st->discard = AVDISCARD_ALL;
581 
582  ist->ts_scale = 1.0;
583  MATCH_PER_STREAM_OPT(ts_scale, dbl, ist->ts_scale, ic, st);
584 
585  MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, ic, st);
586  if (codec_tag) {
587  uint32_t tag = strtol(codec_tag, &next, 0);
588  if (*next)
589  tag = AV_RL32(codec_tag);
590  st->codec->codec_tag = tag;
591  }
592 
593  ist->dec = choose_decoder(o, ic, st);
594  ist->opts = filter_codec_opts(o->g->codec_opts, ist->st->codec->codec_id, ic, st, ist->dec);
595 
596  ist->reinit_filters = -1;
597  MATCH_PER_STREAM_OPT(reinit_filters, i, ist->reinit_filters, ic, st);
598 
600 
601  switch (dec->codec_type) {
602  case AVMEDIA_TYPE_VIDEO:
603  if(!ist->dec)
604  ist->dec = avcodec_find_decoder(dec->codec_id);
605  if (dec->lowres) {
606  dec->flags |= CODEC_FLAG_EMU_EDGE;
607  }
608 
609  ist->resample_height = dec->height;
610  ist->resample_width = dec->width;
611  ist->resample_pix_fmt = dec->pix_fmt;
612 
613  MATCH_PER_STREAM_OPT(frame_rates, str, framerate, ic, st);
614  if (framerate && av_parse_video_rate(&ist->framerate,
615  framerate) < 0) {
616  av_log(NULL, AV_LOG_ERROR, "Error parsing framerate %s.\n",
617  framerate);
618  exit(1);
619  }
620 
621  ist->top_field_first = -1;
622  MATCH_PER_STREAM_OPT(top_field_first, i, ist->top_field_first, ic, st);
623 
624  break;
625  case AVMEDIA_TYPE_AUDIO:
626  ist->guess_layout_max = INT_MAX;
627  MATCH_PER_STREAM_OPT(guess_layout_max, i, ist->guess_layout_max, ic, st);
629 
630  ist->resample_sample_fmt = dec->sample_fmt;
631  ist->resample_sample_rate = dec->sample_rate;
632  ist->resample_channels = dec->channels;
634 
635  break;
636  case AVMEDIA_TYPE_DATA:
637  case AVMEDIA_TYPE_SUBTITLE: {
638  char *canvas_size = NULL;
639  if(!ist->dec)
640  ist->dec = avcodec_find_decoder(dec->codec_id);
641  MATCH_PER_STREAM_OPT(fix_sub_duration, i, ist->fix_sub_duration, ic, st);
642  MATCH_PER_STREAM_OPT(canvas_sizes, str, canvas_size, ic, st);
643  if (canvas_size &&
644  av_parse_video_size(&dec->width, &dec->height, canvas_size) < 0) {
645  av_log(NULL, AV_LOG_FATAL, "Invalid canvas size: %s.\n", canvas_size);
646  exit(1);
647  }
648  break;
649  }
652  break;
653  default:
654  abort();
655  }
656  }
657 }
658 
659 static void assert_file_overwrite(const char *filename)
660 {
661  if ((!file_overwrite || no_file_overwrite) &&
662  (strchr(filename, ':') == NULL || filename[1] == ':' ||
663  av_strstart(filename, "file:", NULL))) {
664  if (avio_check(filename, 0) == 0) {
666  fprintf(stderr,"File '%s' already exists. Overwrite ? [y/N] ", filename);
667  fflush(stderr);
668  term_exit();
669  signal(SIGINT, SIG_DFL);
670  if (!read_yesno()) {
671  av_log(NULL, AV_LOG_FATAL, "Not overwriting - exiting\n");
672  exit(1);
673  }
674  term_init();
675  }
676  else {
677  av_log(NULL, AV_LOG_FATAL, "File '%s' already exists. Exiting.\n", filename);
678  exit(1);
679  }
680  }
681  }
682 }
683 
684 static void dump_attachment(AVStream *st, const char *filename)
685 {
686  int ret;
687  AVIOContext *out = NULL;
689 
690  if (!st->codec->extradata_size) {
691  av_log(NULL, AV_LOG_WARNING, "No extradata to dump in stream #%d:%d.\n",
692  nb_input_files - 1, st->index);
693  return;
694  }
695  if (!*filename && (e = av_dict_get(st->metadata, "filename", NULL, 0)))
696  filename = e->value;
697  if (!*filename) {
698  av_log(NULL, AV_LOG_FATAL, "No filename specified and no 'filename' tag"
699  "in stream #%d:%d.\n", nb_input_files - 1, st->index);
700  exit(1);
701  }
702 
703  assert_file_overwrite(filename);
704 
705  if ((ret = avio_open2(&out, filename, AVIO_FLAG_WRITE, &int_cb, NULL)) < 0) {
706  av_log(NULL, AV_LOG_FATAL, "Could not open file %s for writing.\n",
707  filename);
708  exit(1);
709  }
710 
711  avio_write(out, st->codec->extradata, st->codec->extradata_size);
712  avio_flush(out);
713  avio_close(out);
714 }
715 
716 static int open_input_file(OptionsContext *o, const char *filename)
717 {
718  InputFile *f;
719  AVFormatContext *ic;
721  int err, i, ret;
722  int64_t timestamp;
723  uint8_t buf[128];
724  AVDictionary **opts;
725  AVDictionary *unused_opts = NULL;
726  AVDictionaryEntry *e = NULL;
727  int orig_nb_streams; // number of streams before avformat_find_stream_info
728  char * video_codec_name = NULL;
729  char * audio_codec_name = NULL;
730  char *subtitle_codec_name = NULL;
731 
732  if (o->format) {
733  if (!(file_iformat = av_find_input_format(o->format))) {
734  av_log(NULL, AV_LOG_FATAL, "Unknown input format: '%s'\n", o->format);
735  exit(1);
736  }
737  }
738 
739  if (!strcmp(filename, "-"))
740  filename = "pipe:";
741 
742  stdin_interaction &= strncmp(filename, "pipe:", 5) &&
743  strcmp(filename, "/dev/stdin");
744 
745  /* get default parameters from command line */
746  ic = avformat_alloc_context();
747  if (!ic) {
748  print_error(filename, AVERROR(ENOMEM));
749  exit(1);
750  }
751  if (o->nb_audio_sample_rate) {
752  snprintf(buf, sizeof(buf), "%d", o->audio_sample_rate[o->nb_audio_sample_rate - 1].u.i);
753  av_dict_set(&o->g->format_opts, "sample_rate", buf, 0);
754  }
755  if (o->nb_audio_channels) {
756  /* because we set audio_channels based on both the "ac" and
757  * "channel_layout" options, we need to check that the specified
758  * demuxer actually has the "channels" option before setting it */
759  if (file_iformat && file_iformat->priv_class &&
760  av_opt_find(&file_iformat->priv_class, "channels", NULL, 0,
762  snprintf(buf, sizeof(buf), "%d",
763  o->audio_channels[o->nb_audio_channels - 1].u.i);
764  av_dict_set(&o->g->format_opts, "channels", buf, 0);
765  }
766  }
767  if (o->nb_frame_rates) {
768  /* set the format-level framerate option;
769  * this is important for video grabbers, e.g. x11 */
770  if (file_iformat && file_iformat->priv_class &&
771  av_opt_find(&file_iformat->priv_class, "framerate", NULL, 0,
773  av_dict_set(&o->g->format_opts, "framerate",
774  o->frame_rates[o->nb_frame_rates - 1].u.str, 0);
775  }
776  }
777  if (o->nb_frame_sizes) {
778  av_dict_set(&o->g->format_opts, "video_size", o->frame_sizes[o->nb_frame_sizes - 1].u.str, 0);
779  }
780  if (o->nb_frame_pix_fmts)
781  av_dict_set(&o->g->format_opts, "pixel_format", o->frame_pix_fmts[o->nb_frame_pix_fmts - 1].u.str, 0);
782 
783  MATCH_PER_TYPE_OPT(codec_names, str, video_codec_name, ic, "v");
784  MATCH_PER_TYPE_OPT(codec_names, str, audio_codec_name, ic, "a");
785  MATCH_PER_TYPE_OPT(codec_names, str, subtitle_codec_name, ic, "s");
786 
787  ic->video_codec_id = video_codec_name ?
788  find_codec_or_die(video_codec_name , AVMEDIA_TYPE_VIDEO , 0)->id : AV_CODEC_ID_NONE;
789  ic->audio_codec_id = audio_codec_name ?
790  find_codec_or_die(audio_codec_name , AVMEDIA_TYPE_AUDIO , 0)->id : AV_CODEC_ID_NONE;
791  ic->subtitle_codec_id= subtitle_codec_name ?
792  find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0)->id : AV_CODEC_ID_NONE;
793  ic->flags |= AVFMT_FLAG_NONBLOCK;
795 
796  /* open the input file with generic avformat function */
797  err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts);
798  if (err < 0) {
799  print_error(filename, err);
800  exit(1);
801  }
803 
804  /* apply forced codec ids */
805  for (i = 0; i < ic->nb_streams; i++)
806  choose_decoder(o, ic, ic->streams[i]);
807 
808  /* Set AVCodecContext options for avformat_find_stream_info */
809  opts = setup_find_stream_info_opts(ic, o->g->codec_opts);
810  orig_nb_streams = ic->nb_streams;
811 
812  /* If not enough info to get the stream parameters, we decode the
813  first frames to get it. (used in mpeg case for example) */
814  ret = avformat_find_stream_info(ic, opts);
815  if (ret < 0) {
816  av_log(NULL, AV_LOG_FATAL, "%s: could not find codec parameters\n", filename);
818  exit(1);
819  }
820 
821  timestamp = o->start_time;
822  /* add the stream start time */
823  if (ic->start_time != AV_NOPTS_VALUE)
824  timestamp += ic->start_time;
825 
826  /* if seeking requested, we execute it */
827  if (o->start_time != 0) {
828  ret = avformat_seek_file(ic, -1, INT64_MIN, timestamp, timestamp, 0);
829  if (ret < 0) {
830  av_log(NULL, AV_LOG_WARNING, "%s: could not seek to position %0.3f\n",
831  filename, (double)timestamp / AV_TIME_BASE);
832  }
833  }
834 
835  /* update the current parameters so that they match the one of the input stream */
836  add_input_streams(o, ic);
837 
838  /* dump the file content */
839  av_dump_format(ic, nb_input_files, filename, 0);
840 
842  f = av_mallocz(sizeof(*f));
843  if (!f)
844  exit(1);
846 
847  f->ctx = ic;
849  f->ts_offset = o->input_ts_offset - (copy_ts ? 0 : timestamp);
850  f->nb_streams = ic->nb_streams;
851  f->rate_emu = o->rate_emu;
852 
853  /* check if all codec options have been used */
854  unused_opts = strip_specifiers(o->g->codec_opts);
855  for (i = f->ist_index; i < nb_input_streams; i++) {
856  e = NULL;
857  while ((e = av_dict_get(input_streams[i]->opts, "", e,
859  av_dict_set(&unused_opts, e->key, NULL, 0);
860  }
861 
862  e = NULL;
863  while ((e = av_dict_get(unused_opts, "", e, AV_DICT_IGNORE_SUFFIX))) {
864  const AVClass *class = avcodec_get_class();
865  const AVOption *option = av_opt_find(&class, e->key, NULL, 0,
867  if (!option)
868  continue;
869  if (!(option->flags & AV_OPT_FLAG_DECODING_PARAM)) {
870  av_log(NULL, AV_LOG_ERROR, "Codec AVOption %s (%s) specified for "
871  "input file #%d (%s) is not a decoding option.\n", e->key,
872  option->help ? option->help : "", nb_input_files - 1,
873  filename);
874  exit(1);
875  }
876 
877  av_log(NULL, AV_LOG_WARNING, "Codec AVOption %s (%s) specified for "
878  "input file #%d (%s) has not been used for any stream. The most "
879  "likely reason is either wrong type (e.g. a video option with "
880  "no video streams) or that it is a private option of some decoder "
881  "which was not actually used for any stream.\n", e->key,
882  option->help ? option->help : "", nb_input_files - 1, filename);
883  }
884  av_dict_free(&unused_opts);
885 
886  for (i = 0; i < o->nb_dump_attachment; i++) {
887  int j;
888 
889  for (j = 0; j < ic->nb_streams; j++) {
890  AVStream *st = ic->streams[j];
891 
892  if (check_stream_specifier(ic, st, o->dump_attachment[i].specifier) == 1)
894  }
895  }
896 
897  for (i = 0; i < orig_nb_streams; i++)
898  av_dict_free(&opts[i]);
899  av_freep(&opts);
900 
901  return 0;
902 }
903 
905 {
906  AVIOContext *line;
907  uint8_t *buf;
908  char c;
909 
910  if (avio_open_dyn_buf(&line) < 0) {
911  av_log(NULL, AV_LOG_FATAL, "Could not alloc buffer for reading preset.\n");
912  exit(1);
913  }
914 
915  while ((c = avio_r8(s)) && c != '\n')
916  avio_w8(line, c);
917  avio_w8(line, 0);
918  avio_close_dyn_buf(line, &buf);
919 
920  return buf;
921 }
922 
923 static int get_preset_file_2(const char *preset_name, const char *codec_name, AVIOContext **s)
924 {
925  int i, ret = 1;
926  char filename[1000];
927  const char *base[3] = { getenv("AVCONV_DATADIR"),
928  getenv("HOME"),
930  };
931 
932  for (i = 0; i < FF_ARRAY_ELEMS(base) && ret; i++) {
933  if (!base[i])
934  continue;
935  if (codec_name) {
936  snprintf(filename, sizeof(filename), "%s%s/%s-%s.avpreset", base[i],
937  i != 1 ? "" : "/.avconv", codec_name, preset_name);
938  ret = avio_open2(s, filename, AVIO_FLAG_READ, &int_cb, NULL);
939  }
940  if (ret) {
941  snprintf(filename, sizeof(filename), "%s%s/%s.avpreset", base[i],
942  i != 1 ? "" : "/.avconv", preset_name);
943  ret = avio_open2(s, filename, AVIO_FLAG_READ, &int_cb, NULL);
944  }
945  }
946  return ret;
947 }
948 
950 {
951  char *codec_name = NULL;
952 
953  MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, ost->st);
954  if (!codec_name) {
956  NULL, ost->st->codec->codec_type);
957  ost->enc = avcodec_find_encoder(ost->st->codec->codec_id);
958  } else if (!strcmp(codec_name, "copy"))
959  ost->stream_copy = 1;
960  else {
961  ost->enc = find_codec_or_die(codec_name, ost->st->codec->codec_type, 1);
962  ost->st->codec->codec_id = ost->enc->id;
963  }
964 }
965 
967 {
968  OutputStream *ost;
969  AVStream *st = avformat_new_stream(oc, NULL);
970  int idx = oc->nb_streams - 1, ret = 0;
971  char *bsf = NULL, *next, *codec_tag = NULL;
972  AVBitStreamFilterContext *bsfc, *bsfc_prev = NULL;
973  double qscale = -1;
974  int i;
975 
976  if (!st) {
977  av_log(NULL, AV_LOG_FATAL, "Could not alloc stream.\n");
978  exit(1);
979  }
980 
981  if (oc->nb_streams - 1 < o->nb_streamid_map)
982  st->id = o->streamid_map[oc->nb_streams - 1];
983 
985  if (!(ost = av_mallocz(sizeof(*ost))))
986  exit(1);
988 
990  ost->index = idx;
991  ost->st = st;
992  st->codec->codec_type = type;
993  choose_encoder(o, oc, ost);
994  if (ost->enc) {
995  AVIOContext *s = NULL;
996  char *buf = NULL, *arg = NULL, *preset = NULL;
997 
998  ost->opts = filter_codec_opts(o->g->codec_opts, ost->enc->id, oc, st, ost->enc);
999 
1000  MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
1001  if (preset && (!(ret = get_preset_file_2(preset, ost->enc->name, &s)))) {
1002  do {
1003  buf = get_line(s);
1004  if (!buf[0] || buf[0] == '#') {
1005  av_free(buf);
1006  continue;
1007  }
1008  if (!(arg = strchr(buf, '='))) {
1009  av_log(NULL, AV_LOG_FATAL, "Invalid line found in the preset file.\n");
1010  exit(1);
1011  }
1012  *arg++ = 0;
1013  av_dict_set(&ost->opts, buf, arg, AV_DICT_DONT_OVERWRITE);
1014  av_free(buf);
1015  } while (!s->eof_reached);
1016  avio_close(s);
1017  }
1018  if (ret) {
1020  "Preset %s specified for stream %d:%d, but could not be opened.\n",
1021  preset, ost->file_index, ost->index);
1022  exit(1);
1023  }
1024  } else {
1025  ost->opts = filter_codec_opts(o->g->codec_opts, AV_CODEC_ID_NONE, oc, st, NULL);
1026  }
1027 
1029  st->codec->codec_type = type; // XXX hack, avcodec_get_context_defaults2() sets type to unknown for stream copy
1030 
1031  ost->max_frames = INT64_MAX;
1032  MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
1033  for (i = 0; i<o->nb_max_frames; i++) {
1034  char *p = o->max_frames[i].specifier;
1035  if (!*p && type != AVMEDIA_TYPE_VIDEO) {
1036  av_log(NULL, AV_LOG_WARNING, "Applying unspecific -frames to non video streams, maybe you meant -vframes ?\n");
1037  break;
1038  }
1039  }
1040 
1041  ost->copy_prior_start = -1;
1042  MATCH_PER_STREAM_OPT(copy_prior_start, i, ost->copy_prior_start, oc ,st);
1043 
1044  MATCH_PER_STREAM_OPT(bitstream_filters, str, bsf, oc, st);
1045  while (bsf) {
1046  if (next = strchr(bsf, ','))
1047  *next++ = 0;
1048  if (!(bsfc = av_bitstream_filter_init(bsf))) {
1049  av_log(NULL, AV_LOG_FATAL, "Unknown bitstream filter %s\n", bsf);
1050  exit(1);
1051  }
1052  if (bsfc_prev)
1053  bsfc_prev->next = bsfc;
1054  else
1055  ost->bitstream_filters = bsfc;
1056 
1057  bsfc_prev = bsfc;
1058  bsf = next;
1059  }
1060 
1061  MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, oc, st);
1062  if (codec_tag) {
1063  uint32_t tag = strtol(codec_tag, &next, 0);
1064  if (*next)
1065  tag = AV_RL32(codec_tag);
1066  st->codec->codec_tag = tag;
1067  }
1068 
1069  MATCH_PER_STREAM_OPT(qscale, dbl, qscale, oc, st);
1070  if (qscale >= 0) {
1071  st->codec->flags |= CODEC_FLAG_QSCALE;
1072  st->codec->global_quality = FF_QP2LAMBDA * qscale;
1073  }
1074 
1075  if (oc->oformat->flags & AVFMT_GLOBALHEADER)
1077 
1078  av_opt_get_int(o->g->sws_opts, "sws_flags", 0, &ost->sws_flags);
1079 
1080  av_dict_copy(&ost->swr_opts, o->g->swr_opts, 0);
1081  if (ost->enc && av_get_exact_bits_per_sample(ost->enc->id) == 24)
1082  av_dict_set(&ost->swr_opts, "output_sample_bits", "24", 0);
1083 
1084  av_dict_copy(&ost->resample_opts, o->g->resample_opts, 0);
1085 
1086  ost->source_index = source_index;
1087  if (source_index >= 0) {
1088  ost->sync_ist = input_streams[source_index];
1089  input_streams[source_index]->discard = 0;
1090  input_streams[source_index]->st->discard = AVDISCARD_NONE;
1091  }
1092 
1093  return ost;
1094 }
1095 
1096 static void parse_matrix_coeffs(uint16_t *dest, const char *str)
1097 {
1098  int i;
1099  const char *p = str;
1100  for (i = 0;; i++) {
1101  dest[i] = atoi(p);
1102  if (i == 63)
1103  break;
1104  p = strchr(p, ',');
1105  if (!p) {
1106  av_log(NULL, AV_LOG_FATAL, "Syntax error in matrix \"%s\" at coeff %d\n", str, i);
1107  exit(1);
1108  }
1109  p++;
1110  }
1111 }
1112 
1113 /* read file contents into a string */
1114 static uint8_t *read_file(const char *filename)
1115 {
1116  AVIOContext *pb = NULL;
1117  AVIOContext *dyn_buf = NULL;
1118  int ret = avio_open(&pb, filename, AVIO_FLAG_READ);
1119  uint8_t buf[1024], *str;
1120 
1121  if (ret < 0) {
1122  av_log(NULL, AV_LOG_ERROR, "Error opening file %s.\n", filename);
1123  return NULL;
1124  }
1125 
1126  ret = avio_open_dyn_buf(&dyn_buf);
1127  if (ret < 0) {
1128  avio_closep(&pb);
1129  return NULL;
1130  }
1131  while ((ret = avio_read(pb, buf, sizeof(buf))) > 0)
1132  avio_write(dyn_buf, buf, ret);
1133  avio_w8(dyn_buf, 0);
1134  avio_closep(&pb);
1135 
1136  ret = avio_close_dyn_buf(dyn_buf, &str);
1137  if (ret < 0)
1138  return NULL;
1139  return str;
1140 }
1141 
1143  OutputStream *ost)
1144 {
1145  AVStream *st = ost->st;
1146  char *filter = NULL, *filter_script = NULL;
1147 
1148  MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, st);
1149  MATCH_PER_STREAM_OPT(filters, str, filter, oc, st);
1150 
1151  if (filter_script && filter) {
1152  av_log(NULL, AV_LOG_ERROR, "Both -filter and -filter_script set for "
1153  "output stream #%d:%d.\n", nb_output_files, st->index);
1154  exit(1);
1155  }
1156 
1157  if (filter_script)
1158  return read_file(filter_script);
1159  else if (filter)
1160  return av_strdup(filter);
1161 
1162  return av_strdup(st->codec->codec_type == AVMEDIA_TYPE_VIDEO ?
1163  "null" : "anull");
1164 }
1165 
1167 {
1168  AVStream *st;
1169  OutputStream *ost;
1170  AVCodecContext *video_enc;
1171  char *frame_rate = NULL, *frame_aspect_ratio = NULL;
1172 
1173  ost = new_output_stream(o, oc, AVMEDIA_TYPE_VIDEO, source_index);
1174  st = ost->st;
1175  video_enc = st->codec;
1176 
1177  MATCH_PER_STREAM_OPT(frame_rates, str, frame_rate, oc, st);
1178  if (frame_rate && av_parse_video_rate(&ost->frame_rate, frame_rate) < 0) {
1179  av_log(NULL, AV_LOG_FATAL, "Invalid framerate value: %s\n", frame_rate);
1180  exit(1);
1181  }
1182 
1183  MATCH_PER_STREAM_OPT(frame_aspect_ratios, str, frame_aspect_ratio, oc, st);
1184  if (frame_aspect_ratio) {
1185  AVRational q;
1186  if (av_parse_ratio(&q, frame_aspect_ratio, 255, 0, NULL) < 0 ||
1187  q.num <= 0 || q.den <= 0) {
1188  av_log(NULL, AV_LOG_FATAL, "Invalid aspect ratio: %s\n", frame_aspect_ratio);
1189  exit(1);
1190  }
1191  ost->frame_aspect_ratio = q;
1192  }
1193 
1194  if (!ost->stream_copy) {
1195  const char *p = NULL;
1196  char *frame_size = NULL;
1197  char *frame_pix_fmt = NULL;
1198  char *intra_matrix = NULL, *inter_matrix = NULL;
1199  int do_pass = 0;
1200  int i;
1201 
1202  MATCH_PER_STREAM_OPT(frame_sizes, str, frame_size, oc, st);
1203  if (frame_size && av_parse_video_size(&video_enc->width, &video_enc->height, frame_size) < 0) {
1204  av_log(NULL, AV_LOG_FATAL, "Invalid frame size: %s.\n", frame_size);
1205  exit(1);
1206  }
1207 
1209  MATCH_PER_STREAM_OPT(frame_pix_fmts, str, frame_pix_fmt, oc, st);
1210  if (frame_pix_fmt && *frame_pix_fmt == '+') {
1211  ost->keep_pix_fmt = 1;
1212  if (!*++frame_pix_fmt)
1213  frame_pix_fmt = NULL;
1214  }
1215  if (frame_pix_fmt && (video_enc->pix_fmt = av_get_pix_fmt(frame_pix_fmt)) == AV_PIX_FMT_NONE) {
1216  av_log(NULL, AV_LOG_FATAL, "Unknown pixel format requested: %s.\n", frame_pix_fmt);
1217  exit(1);
1218  }
1219  st->sample_aspect_ratio = video_enc->sample_aspect_ratio;
1220 
1221  if (intra_only)
1222  video_enc->gop_size = 0;
1223  MATCH_PER_STREAM_OPT(intra_matrices, str, intra_matrix, oc, st);
1224  if (intra_matrix) {
1225  if (!(video_enc->intra_matrix = av_mallocz(sizeof(*video_enc->intra_matrix) * 64))) {
1226  av_log(NULL, AV_LOG_FATAL, "Could not allocate memory for intra matrix.\n");
1227  exit(1);
1228  }
1229  parse_matrix_coeffs(video_enc->intra_matrix, intra_matrix);
1230  }
1231  MATCH_PER_STREAM_OPT(inter_matrices, str, inter_matrix, oc, st);
1232  if (inter_matrix) {
1233  if (!(video_enc->inter_matrix = av_mallocz(sizeof(*video_enc->inter_matrix) * 64))) {
1234  av_log(NULL, AV_LOG_FATAL, "Could not allocate memory for inter matrix.\n");
1235  exit(1);
1236  }
1237  parse_matrix_coeffs(video_enc->inter_matrix, inter_matrix);
1238  }
1239 
1240  MATCH_PER_STREAM_OPT(rc_overrides, str, p, oc, st);
1241  for (i = 0; p; i++) {
1242  int start, end, q;
1243  int e = sscanf(p, "%d,%d,%d", &start, &end, &q);
1244  if (e != 3) {
1245  av_log(NULL, AV_LOG_FATAL, "error parsing rc_override\n");
1246  exit(1);
1247  }
1248  /* FIXME realloc failure */
1249  video_enc->rc_override =
1250  av_realloc(video_enc->rc_override,
1251  sizeof(RcOverride) * (i + 1));
1252  video_enc->rc_override[i].start_frame = start;
1253  video_enc->rc_override[i].end_frame = end;
1254  if (q > 0) {
1255  video_enc->rc_override[i].qscale = q;
1256  video_enc->rc_override[i].quality_factor = 1.0;
1257  }
1258  else {
1259  video_enc->rc_override[i].qscale = 0;
1260  video_enc->rc_override[i].quality_factor = -q/100.0;
1261  }
1262  p = strchr(p, '/');
1263  if (p) p++;
1264  }
1265  video_enc->rc_override_count = i;
1266  video_enc->intra_dc_precision = intra_dc_precision - 8;
1267 
1268  if (do_psnr)
1269  video_enc->flags|= CODEC_FLAG_PSNR;
1270 
1271  /* two pass mode */
1272  MATCH_PER_STREAM_OPT(pass, i, do_pass, oc, st);
1273  if (do_pass) {
1274  if (do_pass & 1) {
1275  video_enc->flags |= CODEC_FLAG_PASS1;
1276  av_dict_set(&ost->opts, "flags", "+pass1", AV_DICT_APPEND);
1277  }
1278  if (do_pass & 2) {
1279  video_enc->flags |= CODEC_FLAG_PASS2;
1280  av_dict_set(&ost->opts, "flags", "+pass2", AV_DICT_APPEND);
1281  }
1282  }
1283 
1284  MATCH_PER_STREAM_OPT(passlogfiles, str, ost->logfile_prefix, oc, st);
1285  if (ost->logfile_prefix &&
1286  !(ost->logfile_prefix = av_strdup(ost->logfile_prefix)))
1287  exit(1);
1288 
1289  MATCH_PER_STREAM_OPT(forced_key_frames, str, ost->forced_keyframes, oc, st);
1290  if (ost->forced_keyframes)
1292 
1293  MATCH_PER_STREAM_OPT(force_fps, i, ost->force_fps, oc, st);
1294 
1295  ost->top_field_first = -1;
1296  MATCH_PER_STREAM_OPT(top_field_first, i, ost->top_field_first, oc, st);
1297 
1298 
1299  ost->avfilter = get_ost_filters(o, oc, ost);
1300  if (!ost->avfilter)
1301  exit(1);
1302  } else {
1303  MATCH_PER_STREAM_OPT(copy_initial_nonkeyframes, i, ost->copy_initial_nonkeyframes, oc ,st);
1304  }
1305 
1306  return ost;
1307 }
1308 
1310 {
1311  int n;
1312  AVStream *st;
1313  OutputStream *ost;
1314  AVCodecContext *audio_enc;
1315 
1316  ost = new_output_stream(o, oc, AVMEDIA_TYPE_AUDIO, source_index);
1317  st = ost->st;
1318 
1319  audio_enc = st->codec;
1320  audio_enc->codec_type = AVMEDIA_TYPE_AUDIO;
1321 
1322  if (!ost->stream_copy) {
1323  char *sample_fmt = NULL;
1324 
1325  MATCH_PER_STREAM_OPT(audio_channels, i, audio_enc->channels, oc, st);
1326 
1327  MATCH_PER_STREAM_OPT(sample_fmts, str, sample_fmt, oc, st);
1328  if (sample_fmt &&
1329  (audio_enc->sample_fmt = av_get_sample_fmt(sample_fmt)) == AV_SAMPLE_FMT_NONE) {
1330  av_log(NULL, AV_LOG_FATAL, "Invalid sample format '%s'\n", sample_fmt);
1331  exit(1);
1332  }
1333 
1334  MATCH_PER_STREAM_OPT(audio_sample_rate, i, audio_enc->sample_rate, oc, st);
1335 
1336  ost->avfilter = get_ost_filters(o, oc, ost);
1337  if (!ost->avfilter)
1338  exit(1);
1339 
1340  /* check for channel mapping for this audio stream */
1341  for (n = 0; n < o->nb_audio_channel_maps; n++) {
1342  AudioChannelMap *map = &o->audio_channel_maps[n];
1343  InputStream *ist = input_streams[ost->source_index];
1344  if ((map->channel_idx == -1 || (ist->file_index == map->file_idx && ist->st->index == map->stream_idx)) &&
1345  (map->ofile_idx == -1 || ost->file_index == map->ofile_idx) &&
1346  (map->ostream_idx == -1 || ost->st->index == map->ostream_idx)) {
1349  else
1350  av_log(NULL, AV_LOG_FATAL, "Max channel mapping for output %d.%d reached\n",
1351  ost->file_index, ost->st->index);
1352  }
1353  }
1354  }
1355 
1356  return ost;
1357 }
1358 
1360 {
1361  OutputStream *ost;
1362 
1363  ost = new_output_stream(o, oc, AVMEDIA_TYPE_DATA, source_index);
1364  if (!ost->stream_copy) {
1365  av_log(NULL, AV_LOG_FATAL, "Data stream encoding not supported yet (only streamcopy)\n");
1366  exit(1);
1367  }
1368 
1369  return ost;
1370 }
1371 
1373 {
1374  OutputStream *ost = new_output_stream(o, oc, AVMEDIA_TYPE_ATTACHMENT, source_index);
1375  ost->stream_copy = 1;
1376  ost->finished = 1;
1377  return ost;
1378 }
1379 
1381 {
1382  AVStream *st;
1383  OutputStream *ost;
1384  AVCodecContext *subtitle_enc;
1385 
1386  ost = new_output_stream(o, oc, AVMEDIA_TYPE_SUBTITLE, source_index);
1387  st = ost->st;
1388  subtitle_enc = st->codec;
1389 
1390  subtitle_enc->codec_type = AVMEDIA_TYPE_SUBTITLE;
1391 
1392  MATCH_PER_STREAM_OPT(copy_initial_nonkeyframes, i, ost->copy_initial_nonkeyframes, oc, st);
1393 
1394  if (!ost->stream_copy) {
1395  char *frame_size = NULL;
1396 
1397  MATCH_PER_STREAM_OPT(frame_sizes, str, frame_size, oc, st);
1398  if (frame_size && av_parse_video_size(&subtitle_enc->width, &subtitle_enc->height, frame_size) < 0) {
1399  av_log(NULL, AV_LOG_FATAL, "Invalid frame size: %s.\n", frame_size);
1400  exit(1);
1401  }
1402  }
1403 
1404  return ost;
1405 }
1406 
1407 /* arg format is "output-stream-index:streamid-value". */
1408 static int opt_streamid(void *optctx, const char *opt, const char *arg)
1409 {
1410  OptionsContext *o = optctx;
1411  int idx;
1412  char *p;
1413  char idx_str[16];
1414 
1415  av_strlcpy(idx_str, arg, sizeof(idx_str));
1416  p = strchr(idx_str, ':');
1417  if (!p) {
1419  "Invalid value '%s' for option '%s', required syntax is 'index:value'\n",
1420  arg, opt);
1421  exit(1);
1422  }
1423  *p++ = '\0';
1424  idx = parse_number_or_die(opt, idx_str, OPT_INT, 0, MAX_STREAMS-1);
1425  o->streamid_map = grow_array(o->streamid_map, sizeof(*o->streamid_map), &o->nb_streamid_map, idx+1);
1426  o->streamid_map[idx] = parse_number_or_die(opt, p, OPT_INT, 0, INT_MAX);
1427  return 0;
1428 }
1429 
1431 {
1432  AVFormatContext *is = ifile->ctx;
1433  AVFormatContext *os = ofile->ctx;
1434  AVChapter **tmp;
1435  int i;
1436 
1437  tmp = av_realloc_f(os->chapters, is->nb_chapters + os->nb_chapters, sizeof(*os->chapters));
1438  if (!tmp)
1439  return AVERROR(ENOMEM);
1440  os->chapters = tmp;
1441 
1442  for (i = 0; i < is->nb_chapters; i++) {
1443  AVChapter *in_ch = is->chapters[i], *out_ch;
1444  int64_t ts_off = av_rescale_q(ofile->start_time - ifile->ts_offset,
1445  AV_TIME_BASE_Q, in_ch->time_base);
1446  int64_t rt = (ofile->recording_time == INT64_MAX) ? INT64_MAX :
1448 
1449 
1450  if (in_ch->end < ts_off)
1451  continue;
1452  if (rt != INT64_MAX && in_ch->start > rt + ts_off)
1453  break;
1454 
1455  out_ch = av_mallocz(sizeof(AVChapter));
1456  if (!out_ch)
1457  return AVERROR(ENOMEM);
1458 
1459  out_ch->id = in_ch->id;
1460  out_ch->time_base = in_ch->time_base;
1461  out_ch->start = FFMAX(0, in_ch->start - ts_off);
1462  out_ch->end = FFMIN(rt, in_ch->end - ts_off);
1463 
1464  if (copy_metadata)
1465  av_dict_copy(&out_ch->metadata, in_ch->metadata, 0);
1466 
1467  os->chapters[os->nb_chapters++] = out_ch;
1468  }
1469  return 0;
1470 }
1471 
1472 static int read_ffserver_streams(OptionsContext *o, AVFormatContext *s, const char *filename)
1473 {
1474  int i, err;
1476 
1477  ic->interrupt_callback = int_cb;
1478  err = avformat_open_input(&ic, filename, NULL, NULL);
1479  if (err < 0)
1480  return err;
1481  /* copy stream format */
1482  for(i=0;i<ic->nb_streams;i++) {
1483  AVStream *st;
1484  OutputStream *ost;
1485  AVCodec *codec;
1486  AVCodecContext *avctx;
1487 
1488  codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
1489  ost = new_output_stream(o, s, codec->type, -1);
1490  st = ost->st;
1491  avctx = st->codec;
1492  ost->enc = codec;
1493 
1494  // FIXME: a more elegant solution is needed
1495  memcpy(st, ic->streams[i], sizeof(AVStream));
1496  st->cur_dts = 0;
1497  st->info = av_malloc(sizeof(*st->info));
1498  memcpy(st->info, ic->streams[i]->info, sizeof(*st->info));
1499  st->codec= avctx;
1500  avcodec_copy_context(st->codec, ic->streams[i]->codec);
1501 
1502  if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && !ost->stream_copy)
1503  choose_sample_fmt(st, codec);
1504  else if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && !ost->stream_copy)
1505  choose_pixel_fmt(st, codec, st->codec->pix_fmt);
1506  }
1507 
1508  /* ffserver seeking with date=... needs a date reference */
1509  err = parse_option(o, "metadata", "creation_time=now", options);
1510 
1511  avformat_close_input(&ic);
1512  return err;
1513 }
1514 
1516  AVFormatContext *oc)
1517 {
1518  OutputStream *ost;
1519 
1521  ofilter->out_tmp->pad_idx)) {
1522  case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(o, oc, -1); break;
1523  case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(o, oc, -1); break;
1524  default:
1525  av_log(NULL, AV_LOG_FATAL, "Only video and audio filters are supported "
1526  "currently.\n");
1527  exit(1);
1528  }
1529 
1530  ost->source_index = -1;
1531  ost->filter = ofilter;
1532 
1533  ofilter->ost = ost;
1534 
1535  if (ost->stream_copy) {
1536  av_log(NULL, AV_LOG_ERROR, "Streamcopy requested for output stream %d:%d, "
1537  "which is fed from a complex filtergraph. Filtering and streamcopy "
1538  "cannot be used together.\n", ost->file_index, ost->index);
1539  exit(1);
1540  }
1541 
1542  if (configure_output_filter(ofilter->graph, ofilter, ofilter->out_tmp) < 0) {
1543  av_log(NULL, AV_LOG_FATAL, "Error configuring filter.\n");
1544  exit(1);
1545  }
1546  avfilter_inout_free(&ofilter->out_tmp);
1547 }
1548 
1550 {
1551  int i, ret = 0;
1552 
1553  for (i = 0; i < nb_filtergraphs; i++)
1554  if (!filtergraphs[i]->graph &&
1555  (ret = configure_filtergraph(filtergraphs[i])) < 0)
1556  return ret;
1557  return 0;
1558 }
1559 
1560 static int open_output_file(OptionsContext *o, const char *filename)
1561 {
1562  AVFormatContext *oc;
1563  int i, j, err;
1564  AVOutputFormat *file_oformat;
1565  OutputFile *of;
1566  OutputStream *ost;
1567  InputStream *ist;
1568  AVDictionary *unused_opts = NULL;
1569  AVDictionaryEntry *e = NULL;
1570 
1571  if (configure_complex_filters() < 0) {
1572  av_log(NULL, AV_LOG_FATAL, "Error configuring filters.\n");
1573  exit(1);
1574  }
1575 
1576  if (!strcmp(filename, "-"))
1577  filename = "pipe:";
1578 
1579  err = avformat_alloc_output_context2(&oc, NULL, o->format, filename);
1580  if (!oc) {
1581  print_error(filename, err);
1582  exit(1);
1583  }
1584  file_oformat= oc->oformat;
1585  oc->interrupt_callback = int_cb;
1586 
1587  /* create streams for all unlabeled output pads */
1588  for (i = 0; i < nb_filtergraphs; i++) {
1589  FilterGraph *fg = filtergraphs[i];
1590  for (j = 0; j < fg->nb_outputs; j++) {
1591  OutputFilter *ofilter = fg->outputs[j];
1592 
1593  if (!ofilter->out_tmp || ofilter->out_tmp->name)
1594  continue;
1595 
1597  ofilter->out_tmp->pad_idx)) {
1598  case AVMEDIA_TYPE_VIDEO: o->video_disable = 1; break;
1599  case AVMEDIA_TYPE_AUDIO: o->audio_disable = 1; break;
1600  case AVMEDIA_TYPE_SUBTITLE: o->subtitle_disable = 1; break;
1601  }
1602  init_output_filter(ofilter, o, oc);
1603  }
1604  }
1605 
1606  if (!strcmp(file_oformat->name, "ffm") &&
1607  av_strstart(filename, "http:", NULL)) {
1608  int j;
1609  /* special case for files sent to ffserver: we get the stream
1610  parameters from ffserver */
1611  int err = read_ffserver_streams(o, oc, filename);
1612  if (err < 0) {
1613  print_error(filename, err);
1614  exit(1);
1615  }
1616  for(j = nb_output_streams - oc->nb_streams; j < nb_output_streams; j++) {
1617  ost = output_streams[j];
1618  for (i = 0; i < nb_input_streams; i++) {
1619  ist = input_streams[i];
1620  if(ist->st->codec->codec_type == ost->st->codec->codec_type){
1621  ost->sync_ist= ist;
1622  ost->source_index= i;
1623  if(ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) ost->avfilter = av_strdup("anull");
1624  if(ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ost->avfilter = av_strdup("null");
1625  ist->discard = 0;
1626  ist->st->discard = AVDISCARD_NONE;
1627  break;
1628  }
1629  }
1630  if(!ost->sync_ist){
1631  av_log(NULL, AV_LOG_FATAL, "Missing %s stream which is required by this ffm\n", av_get_media_type_string(ost->st->codec->codec_type));
1632  exit(1);
1633  }
1634  }
1635  } else if (!o->nb_stream_maps) {
1636  char *subtitle_codec_name = NULL;
1637  /* pick the "best" stream of each type */
1638 
1639  /* video: highest resolution */
1640  if (!o->video_disable && oc->oformat->video_codec != AV_CODEC_ID_NONE) {
1641  int area = 0, idx = -1;
1642  int qcr = avformat_query_codec(oc->oformat, oc->oformat->video_codec, 0);
1643  for (i = 0; i < nb_input_streams; i++) {
1644  int new_area;
1645  ist = input_streams[i];
1646  new_area = ist->st->codec->width * ist->st->codec->height;
1647  if((qcr!=MKTAG('A', 'P', 'I', 'C')) && (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
1648  new_area = 1;
1649  if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
1650  new_area > area) {
1651  if((qcr==MKTAG('A', 'P', 'I', 'C')) && !(ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
1652  continue;
1653  area = new_area;
1654  idx = i;
1655  }
1656  }
1657  if (idx >= 0)
1658  new_video_stream(o, oc, idx);
1659  }
1660 
1661  /* audio: most channels */
1662  if (!o->audio_disable && oc->oformat->audio_codec != AV_CODEC_ID_NONE) {
1663  int channels = 0, idx = -1;
1664  for (i = 0; i < nb_input_streams; i++) {
1665  ist = input_streams[i];
1666  if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
1667  ist->st->codec->channels > channels) {
1668  channels = ist->st->codec->channels;
1669  idx = i;
1670  }
1671  }
1672  if (idx >= 0)
1673  new_audio_stream(o, oc, idx);
1674  }
1675 
1676  /* subtitles: pick first */
1677  MATCH_PER_TYPE_OPT(codec_names, str, subtitle_codec_name, oc, "s");
1678  if (!o->subtitle_disable && (oc->oformat->subtitle_codec != AV_CODEC_ID_NONE || subtitle_codec_name)) {
1679  for (i = 0; i < nb_input_streams; i++)
1680  if (input_streams[i]->st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
1681  new_subtitle_stream(o, oc, i);
1682  break;
1683  }
1684  }
1685  /* do something with data? */
1686  } else {
1687  for (i = 0; i < o->nb_stream_maps; i++) {
1688  StreamMap *map = &o->stream_maps[i];
1689  int src_idx = input_files[map->file_index]->ist_index + map->stream_index;
1690 
1691  if (map->disabled)
1692  continue;
1693 
1694  if (map->linklabel) {
1695  FilterGraph *fg;
1696  OutputFilter *ofilter = NULL;
1697  int j, k;
1698 
1699  for (j = 0; j < nb_filtergraphs; j++) {
1700  fg = filtergraphs[j];
1701  for (k = 0; k < fg->nb_outputs; k++) {
1702  AVFilterInOut *out = fg->outputs[k]->out_tmp;
1703  if (out && !strcmp(out->name, map->linklabel)) {
1704  ofilter = fg->outputs[k];
1705  goto loop_end;
1706  }
1707  }
1708  }
1709 loop_end:
1710  if (!ofilter) {
1711  av_log(NULL, AV_LOG_FATAL, "Output with label '%s' does not exist "
1712  "in any defined filter graph, or was already used elsewhere.\n", map->linklabel);
1713  exit(1);
1714  }
1715  init_output_filter(ofilter, o, oc);
1716  } else {
1719  continue;
1720  if(o-> audio_disable && ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
1721  continue;
1722  if(o-> video_disable && ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
1723  continue;
1724  if(o-> data_disable && ist->st->codec->codec_type == AVMEDIA_TYPE_DATA)
1725  continue;
1726 
1727  switch (ist->st->codec->codec_type) {
1728  case AVMEDIA_TYPE_VIDEO: ost = new_video_stream (o, oc, src_idx); break;
1729  case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream (o, oc, src_idx); break;
1730  case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream (o, oc, src_idx); break;
1731  case AVMEDIA_TYPE_DATA: ost = new_data_stream (o, oc, src_idx); break;
1732  case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc, src_idx); break;
1733  default:
1734  av_log(NULL, AV_LOG_FATAL, "Cannot map stream #%d:%d - unsupported type.\n",
1735  map->file_index, map->stream_index);
1736  exit(1);
1737  }
1738  }
1739  }
1740  }
1741 
1742  /* handle attached files */
1743  for (i = 0; i < o->nb_attachments; i++) {
1744  AVIOContext *pb;
1745  uint8_t *attachment;
1746  const char *p;
1747  int64_t len;
1748 
1749  if ((err = avio_open2(&pb, o->attachments[i], AVIO_FLAG_READ, &int_cb, NULL)) < 0) {
1750  av_log(NULL, AV_LOG_FATAL, "Could not open attachment file %s.\n",
1751  o->attachments[i]);
1752  exit(1);
1753  }
1754  if ((len = avio_size(pb)) <= 0) {
1755  av_log(NULL, AV_LOG_FATAL, "Could not get size of the attachment %s.\n",
1756  o->attachments[i]);
1757  exit(1);
1758  }
1759  if (!(attachment = av_malloc(len))) {
1760  av_log(NULL, AV_LOG_FATAL, "Attachment %s too large to fit into memory.\n",
1761  o->attachments[i]);
1762  exit(1);
1763  }
1764  avio_read(pb, attachment, len);
1765 
1766  ost = new_attachment_stream(o, oc, -1);
1767  ost->stream_copy = 0;
1768  ost->attachment_filename = o->attachments[i];
1769  ost->finished = 1;
1770  ost->st->codec->extradata = attachment;
1771  ost->st->codec->extradata_size = len;
1772 
1773  p = strrchr(o->attachments[i], '/');
1774  av_dict_set(&ost->st->metadata, "filename", (p && *p) ? p + 1 : o->attachments[i], AV_DICT_DONT_OVERWRITE);
1775  avio_close(pb);
1776  }
1777 
1778  for (i = nb_output_streams - oc->nb_streams; i < nb_output_streams; i++) { //for all streams of this output file
1779  AVDictionaryEntry *e;
1780  ost = output_streams[i];
1781 
1782  if ((ost->stream_copy || ost->attachment_filename)
1783  && (e = av_dict_get(o->g->codec_opts, "flags", NULL, AV_DICT_IGNORE_SUFFIX))
1784  && (!e->key[5] || check_stream_specifier(oc, ost->st, e->key+6)))
1785  if (av_opt_set(ost->st->codec, "flags", e->value, 0) < 0)
1786  exit(1);
1787  }
1788 
1789  if (o->stop_time != INT64_MAX && o->recording_time != INT64_MAX) {
1790  o->stop_time = INT64_MAX;
1791  av_log(NULL, AV_LOG_WARNING, "-t and -to cannot be used together; using -t.\n");
1792  }
1793 
1794  if (o->stop_time != INT64_MAX && o->recording_time == INT64_MAX) {
1795  if (o->stop_time <= o->start_time) {
1796  av_log(NULL, AV_LOG_WARNING, "-to value smaller than -ss; ignoring -to.\n");
1797  o->stop_time = INT64_MAX;
1798  } else {
1799  o->recording_time = o->stop_time - o->start_time;
1800  }
1801  }
1802 
1804  of = av_mallocz(sizeof(*of));
1805  if (!of)
1806  exit(1);
1807  output_files[nb_output_files - 1] = of;
1808 
1809  of->ctx = oc;
1811  of->recording_time = o->recording_time;
1812  if (o->recording_time != INT64_MAX)
1813  oc->duration = o->recording_time;
1814  of->start_time = o->start_time;
1815  of->limit_filesize = o->limit_filesize;
1816  of->shortest = o->shortest;
1817  av_dict_copy(&of->opts, o->g->format_opts, 0);
1818 
1819 
1820  /* check if all codec options have been used */
1821  unused_opts = strip_specifiers(o->g->codec_opts);
1822  for (i = of->ost_index; i < nb_output_streams; i++) {
1823  e = NULL;
1824  while ((e = av_dict_get(output_streams[i]->opts, "", e,
1826  av_dict_set(&unused_opts, e->key, NULL, 0);
1827  }
1828 
1829  e = NULL;
1830  while ((e = av_dict_get(unused_opts, "", e, AV_DICT_IGNORE_SUFFIX))) {
1831  const AVClass *class = avcodec_get_class();
1832  const AVOption *option = av_opt_find(&class, e->key, NULL, 0,
1834  if (!option)
1835  continue;
1836  if (!(option->flags & AV_OPT_FLAG_ENCODING_PARAM)) {
1837  av_log(NULL, AV_LOG_ERROR, "Codec AVOption %s (%s) specified for "
1838  "output file #%d (%s) is not an encoding option.\n", e->key,
1839  option->help ? option->help : "", nb_output_files - 1,
1840  filename);
1841  exit(1);
1842  }
1843 
1844  av_log(NULL, AV_LOG_WARNING, "Codec AVOption %s (%s) specified for "
1845  "output file #%d (%s) has not been used for any stream. The most "
1846  "likely reason is either wrong type (e.g. a video option with "
1847  "no video streams) or that it is a private option of some encoder "
1848  "which was not actually used for any stream.\n", e->key,
1849  option->help ? option->help : "", nb_output_files - 1, filename);
1850  }
1851  av_dict_free(&unused_opts);
1852 
1853  /* check filename in case of an image number is expected */
1854  if (oc->oformat->flags & AVFMT_NEEDNUMBER) {
1855  if (!av_filename_number_test(oc->filename)) {
1856  print_error(oc->filename, AVERROR(EINVAL));
1857  exit(1);
1858  }
1859  }
1860 
1861  if (!(oc->oformat->flags & AVFMT_NOFILE)) {
1862  /* test if it already exists to avoid losing precious files */
1863  assert_file_overwrite(filename);
1864 
1865  /* open the file */
1866  if ((err = avio_open2(&oc->pb, filename, AVIO_FLAG_WRITE,
1867  &oc->interrupt_callback,
1868  &of->opts)) < 0) {
1869  print_error(filename, err);
1870  exit(1);
1871  }
1872  } else if (strcmp(oc->oformat->name, "image2")==0 && !av_filename_number_test(filename))
1873  assert_file_overwrite(filename);
1874 
1875  if (o->mux_preload) {
1876  uint8_t buf[64];
1877  snprintf(buf, sizeof(buf), "%d", (int)(o->mux_preload*AV_TIME_BASE));
1878  av_dict_set(&of->opts, "preload", buf, 0);
1879  }
1880  oc->max_delay = (int)(o->mux_max_delay * AV_TIME_BASE);
1881 
1882  /* copy metadata */
1883  for (i = 0; i < o->nb_metadata_map; i++) {
1884  char *p;
1885  int in_file_index = strtol(o->metadata_map[i].u.str, &p, 0);
1886 
1887  if (in_file_index >= nb_input_files) {
1888  av_log(NULL, AV_LOG_FATAL, "Invalid input file index %d while processing metadata maps\n", in_file_index);
1889  exit(1);
1890  }
1891  copy_metadata(o->metadata_map[i].specifier, *p ? p + 1 : p, oc,
1892  in_file_index >= 0 ?
1893  input_files[in_file_index]->ctx : NULL, o);
1894  }
1895 
1896  /* copy chapters */
1897  if (o->chapters_input_file >= nb_input_files) {
1898  if (o->chapters_input_file == INT_MAX) {
1899  /* copy chapters from the first input file that has them*/
1900  o->chapters_input_file = -1;
1901  for (i = 0; i < nb_input_files; i++)
1902  if (input_files[i]->ctx->nb_chapters) {
1903  o->chapters_input_file = i;
1904  break;
1905  }
1906  } else {
1907  av_log(NULL, AV_LOG_FATAL, "Invalid input file index %d in chapter mapping.\n",
1908  o->chapters_input_file);
1909  exit(1);
1910  }
1911  }
1912  if (o->chapters_input_file >= 0)
1915 
1916  /* copy global metadata by default */
1920  if(o->recording_time != INT64_MAX)
1921  av_dict_set(&oc->metadata, "duration", NULL, 0);
1922  av_dict_set(&oc->metadata, "creation_time", NULL, 0);
1923  }
1924  if (!o->metadata_streams_manual)
1925  for (i = of->ost_index; i < nb_output_streams; i++) {
1926  InputStream *ist;
1927  if (output_streams[i]->source_index < 0) /* this is true e.g. for attached files */
1928  continue;
1930  av_dict_copy(&output_streams[i]->st->metadata, ist->st->metadata, AV_DICT_DONT_OVERWRITE);
1931  }
1932 
1933  /* process manually set metadata */
1934  for (i = 0; i < o->nb_metadata; i++) {
1935  AVDictionary **m;
1936  char type, *val;
1937  const char *stream_spec;
1938  int index = 0, j, ret = 0;
1939 
1940  val = strchr(o->metadata[i].u.str, '=');
1941  if (!val) {
1942  av_log(NULL, AV_LOG_FATAL, "No '=' character in metadata string %s.\n",
1943  o->metadata[i].u.str);
1944  exit(1);
1945  }
1946  *val++ = 0;
1947 
1948  parse_meta_type(o->metadata[i].specifier, &type, &index, &stream_spec);
1949  if (type == 's') {
1950  for (j = 0; j < oc->nb_streams; j++) {
1951  if ((ret = check_stream_specifier(oc, oc->streams[j], stream_spec)) > 0) {
1952  av_dict_set(&oc->streams[j]->metadata, o->metadata[i].u.str, *val ? val : NULL, 0);
1953  } else if (ret < 0)
1954  exit(1);
1955  }
1956  }
1957  else {
1958  switch (type) {
1959  case 'g':
1960  m = &oc->metadata;
1961  break;
1962  case 'c':
1963  if (index < 0 || index >= oc->nb_chapters) {
1964  av_log(NULL, AV_LOG_FATAL, "Invalid chapter index %d in metadata specifier.\n", index);
1965  exit(1);
1966  }
1967  m = &oc->chapters[index]->metadata;
1968  break;
1969  default:
1970  av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\n", o->metadata[i].specifier);
1971  exit(1);
1972  }
1973  av_dict_set(m, o->metadata[i].u.str, *val ? val : NULL, 0);
1974  }
1975  }
1976 
1977  return 0;
1978 }
1979 
1980 static int opt_target(void *optctx, const char *opt, const char *arg)
1981 {
1982  OptionsContext *o = optctx;
1983  enum { PAL, NTSC, FILM, UNKNOWN } norm = UNKNOWN;
1984  static const char *const frame_rates[] = { "25", "30000/1001", "24000/1001" };
1985 
1986  if (!strncmp(arg, "pal-", 4)) {
1987  norm = PAL;
1988  arg += 4;
1989  } else if (!strncmp(arg, "ntsc-", 5)) {
1990  norm = NTSC;
1991  arg += 5;
1992  } else if (!strncmp(arg, "film-", 5)) {
1993  norm = FILM;
1994  arg += 5;
1995  } else {
1996  /* Try to determine PAL/NTSC by peeking in the input files */
1997  if (nb_input_files) {
1998  int i, j, fr;
1999  for (j = 0; j < nb_input_files; j++) {
2000  for (i = 0; i < input_files[j]->nb_streams; i++) {
2002  if (c->codec_type != AVMEDIA_TYPE_VIDEO)
2003  continue;
2004  fr = c->time_base.den * 1000 / c->time_base.num;
2005  if (fr == 25000) {
2006  norm = PAL;
2007  break;
2008  } else if ((fr == 29970) || (fr == 23976)) {
2009  norm = NTSC;
2010  break;
2011  }
2012  }
2013  if (norm != UNKNOWN)
2014  break;
2015  }
2016  }
2017  if (norm != UNKNOWN)
2018  av_log(NULL, AV_LOG_INFO, "Assuming %s for target.\n", norm == PAL ? "PAL" : "NTSC");
2019  }
2020 
2021  if (norm == UNKNOWN) {
2022  av_log(NULL, AV_LOG_FATAL, "Could not determine norm (PAL/NTSC/NTSC-Film) for target.\n");
2023  av_log(NULL, AV_LOG_FATAL, "Please prefix target with \"pal-\", \"ntsc-\" or \"film-\",\n");
2024  av_log(NULL, AV_LOG_FATAL, "or set a framerate with \"-r xxx\".\n");
2025  exit(1);
2026  }
2027 
2028  if (!strcmp(arg, "vcd")) {
2029  opt_video_codec(o, "c:v", "mpeg1video");
2030  opt_audio_codec(o, "c:a", "mp2");
2031  parse_option(o, "f", "vcd", options);
2032  av_dict_set(&o->g->codec_opts, "b:v", arg, 0);
2033 
2034  parse_option(o, "s", norm == PAL ? "352x288" : "352x240", options);
2035  parse_option(o, "r", frame_rates[norm], options);
2036  av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", 0);
2037 
2038  av_dict_set(&o->g->codec_opts, "b:v", "1150000", 0);
2039  av_dict_set(&o->g->codec_opts, "maxrate", "1150000", 0);
2040  av_dict_set(&o->g->codec_opts, "minrate", "1150000", 0);
2041  av_dict_set(&o->g->codec_opts, "bufsize", "327680", 0); // 40*1024*8;
2042 
2043  av_dict_set(&o->g->codec_opts, "b:a", "224000", 0);
2044  parse_option(o, "ar", "44100", options);
2045  parse_option(o, "ac", "2", options);
2046 
2047  av_dict_set(&o->g->format_opts, "packetsize", "2324", 0);
2048  av_dict_set(&o->g->format_opts, "muxrate", "1411200", 0); // 2352 * 75 * 8;
2049 
2050  /* We have to offset the PTS, so that it is consistent with the SCR.
2051  SCR starts at 36000, but the first two packs contain only padding
2052  and the first pack from the other stream, respectively, may also have
2053  been written before.
2054  So the real data starts at SCR 36000+3*1200. */
2055  o->mux_preload = (36000 + 3 * 1200) / 90000.0; // 0.44
2056  } else if (!strcmp(arg, "svcd")) {
2057 
2058  opt_video_codec(o, "c:v", "mpeg2video");
2059  opt_audio_codec(o, "c:a", "mp2");
2060  parse_option(o, "f", "svcd", options);
2061 
2062  parse_option(o, "s", norm == PAL ? "480x576" : "480x480", options);
2063  parse_option(o, "r", frame_rates[norm], options);
2064  parse_option(o, "pix_fmt", "yuv420p", options);
2065  av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", 0);
2066 
2067  av_dict_set(&o->g->codec_opts, "b:v", "2040000", 0);
2068  av_dict_set(&o->g->codec_opts, "maxrate", "2516000", 0);
2069  av_dict_set(&o->g->codec_opts, "minrate", "0", 0); // 1145000;
2070  av_dict_set(&o->g->codec_opts, "bufsize", "1835008", 0); // 224*1024*8;
2071  av_dict_set(&o->g->codec_opts, "scan_offset", "1", 0);
2072 
2073  av_dict_set(&o->g->codec_opts, "b:a", "224000", 0);
2074  parse_option(o, "ar", "44100", options);
2075 
2076  av_dict_set(&o->g->format_opts, "packetsize", "2324", 0);
2077 
2078  } else if (!strcmp(arg, "dvd")) {
2079 
2080  opt_video_codec(o, "c:v", "mpeg2video");
2081  opt_audio_codec(o, "c:a", "ac3");
2082  parse_option(o, "f", "dvd", options);
2083 
2084  parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
2085  parse_option(o, "r", frame_rates[norm], options);
2086  parse_option(o, "pix_fmt", "yuv420p", options);
2087  av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", 0);
2088 
2089  av_dict_set(&o->g->codec_opts, "b:v", "6000000", 0);
2090  av_dict_set(&o->g->codec_opts, "maxrate", "9000000", 0);
2091  av_dict_set(&o->g->codec_opts, "minrate", "0", 0); // 1500000;
2092  av_dict_set(&o->g->codec_opts, "bufsize", "1835008", 0); // 224*1024*8;
2093 
2094  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.
2095  av_dict_set(&o->g->format_opts, "muxrate", "10080000", 0); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8
2096 
2097  av_dict_set(&o->g->codec_opts, "b:a", "448000", 0);
2098  parse_option(o, "ar", "48000", options);
2099 
2100  } else if (!strncmp(arg, "dv", 2)) {
2101 
2102  parse_option(o, "f", "dv", options);
2103 
2104  parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
2105  parse_option(o, "pix_fmt", !strncmp(arg, "dv50", 4) ? "yuv422p" :
2106  norm == PAL ? "yuv420p" : "yuv411p", options);
2107  parse_option(o, "r", frame_rates[norm], options);
2108 
2109  parse_option(o, "ar", "48000", options);
2110  parse_option(o, "ac", "2", options);
2111 
2112  } else {
2113  av_log(NULL, AV_LOG_ERROR, "Unknown target: %s\n", arg);
2114  return AVERROR(EINVAL);
2115  }
2116  return 0;
2117 }
2118 
2119 static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
2120 {
2122  vstats_filename = av_strdup (arg);
2123  return 0;
2124 }
2125 
2126 static int opt_vstats(void *optctx, const char *opt, const char *arg)
2127 {
2128  char filename[40];
2129  time_t today2 = time(NULL);
2130  struct tm *today = localtime(&today2);
2131 
2132  snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min,
2133  today->tm_sec);
2134  return opt_vstats_file(NULL, opt, filename);
2135 }
2136 
2137 static int opt_video_frames(void *optctx, const char *opt, const char *arg)
2138 {
2139  OptionsContext *o = optctx;
2140  return parse_option(o, "frames:v", arg, options);
2141 }
2142 
2143 static int opt_audio_frames(void *optctx, const char *opt, const char *arg)
2144 {
2145  OptionsContext *o = optctx;
2146  return parse_option(o, "frames:a", arg, options);
2147 }
2148 
2149 static int opt_data_frames(void *optctx, const char *opt, const char *arg)
2150 {
2151  OptionsContext *o = optctx;
2152  return parse_option(o, "frames:d", arg, options);
2153 }
2154 
2155 static int opt_default_new(OptionsContext *o, const char *opt, const char *arg)
2156 {
2157  int ret;
2158  AVDictionary *cbak = codec_opts;
2159  AVDictionary *fbak = format_opts;
2160  codec_opts = NULL;
2161  format_opts = NULL;
2162 
2163  ret = opt_default(NULL, opt, arg);
2164 
2165  av_dict_copy(&o->g->codec_opts , codec_opts, 0);
2169  codec_opts = cbak;
2170  format_opts = fbak;
2171 
2172  return ret;
2173 }
2174 
2175 static int opt_preset(void *optctx, const char *opt, const char *arg)
2176 {
2177  OptionsContext *o = optctx;
2178  FILE *f=NULL;
2179  char filename[1000], line[1000], tmp_line[1000];
2180  const char *codec_name = NULL;
2181 
2182  tmp_line[0] = *opt;
2183  tmp_line[1] = 0;
2184  MATCH_PER_TYPE_OPT(codec_names, str, codec_name, NULL, tmp_line);
2185 
2186  if (!(f = get_preset_file(filename, sizeof(filename), arg, *opt == 'f', codec_name))) {
2187  if(!strncmp(arg, "libx264-lossless", strlen("libx264-lossless"))){
2188  av_log(NULL, AV_LOG_FATAL, "Please use -preset <speed> -qp 0\n");
2189  }else
2190  av_log(NULL, AV_LOG_FATAL, "File for preset '%s' not found\n", arg);
2191  exit(1);
2192  }
2193 
2194  while (fgets(line, sizeof(line), f)) {
2195  char *key = tmp_line, *value, *endptr;
2196 
2197  if (strcspn(line, "#\n\r") == 0)
2198  continue;
2199  av_strlcpy(tmp_line, line, sizeof(tmp_line));
2200  if (!av_strtok(key, "=", &value) ||
2201  !av_strtok(value, "\r\n", &endptr)) {
2202  av_log(NULL, AV_LOG_FATAL, "%s: Invalid syntax: '%s'\n", filename, line);
2203  exit(1);
2204  }
2205  av_log(NULL, AV_LOG_DEBUG, "ffpreset[%s]: set '%s' = '%s'\n", filename, key, value);
2206 
2207  if (!strcmp(key, "acodec")) opt_audio_codec (o, key, value);
2208  else if (!strcmp(key, "vcodec")) opt_video_codec (o, key, value);
2209  else if (!strcmp(key, "scodec")) opt_subtitle_codec(o, key, value);
2210  else if (!strcmp(key, "dcodec")) opt_data_codec (o, key, value);
2211  else if (opt_default_new(o, key, value) < 0) {
2212  av_log(NULL, AV_LOG_FATAL, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n",
2213  filename, line, key, value);
2214  exit(1);
2215  }
2216  }
2217 
2218  fclose(f);
2219 
2220  return 0;
2221 }
2222 
2223 static int opt_old2new(void *optctx, const char *opt, const char *arg)
2224 {
2225  OptionsContext *o = optctx;
2226  char *s = av_asprintf("%s:%c", opt + 1, *opt);
2227  int ret = parse_option(o, s, arg, options);
2228  av_free(s);
2229  return ret;
2230 }
2231 
2232 static int opt_bitrate(void *optctx, const char *opt, const char *arg)
2233 {
2234  OptionsContext *o = optctx;
2235  if(!strcmp(opt, "b")){
2236  av_log(NULL, AV_LOG_WARNING, "Please use -b:a or -b:v, -b is ambiguous\n");
2237  av_dict_set(&o->g->codec_opts, "b:v", arg, 0);
2238  return 0;
2239  }
2240  av_dict_set(&o->g->codec_opts, opt, arg, 0);
2241  return 0;
2242 }
2243 
2244 static int opt_qscale(void *optctx, const char *opt, const char *arg)
2245 {
2246  OptionsContext *o = optctx;
2247  char *s;
2248  int ret;
2249  if(!strcmp(opt, "qscale")){
2250  av_log(NULL, AV_LOG_WARNING, "Please use -q:a or -q:v, -qscale is ambiguous\n");
2251  return parse_option(o, "q:v", arg, options);
2252  }
2253  s = av_asprintf("q%s", opt + 6);
2254  ret = parse_option(o, s, arg, options);
2255  av_free(s);
2256  return ret;
2257 }
2258 
2259 static int opt_profile(void *optctx, const char *opt, const char *arg)
2260 {
2261  OptionsContext *o = optctx;
2262  if(!strcmp(opt, "profile")){
2263  av_log(NULL, AV_LOG_WARNING, "Please use -profile:a or -profile:v, -profile is ambiguous\n");
2264  av_dict_set(&o->g->codec_opts, "profile:v", arg, 0);
2265  return 0;
2266  }
2267  av_dict_set(&o->g->codec_opts, opt, arg, 0);
2268  return 0;
2269 }
2270 
2271 static int opt_video_filters(void *optctx, const char *opt, const char *arg)
2272 {
2273  OptionsContext *o = optctx;
2274  return parse_option(o, "filter:v", arg, options);
2275 }
2276 
2277 static int opt_audio_filters(void *optctx, const char *opt, const char *arg)
2278 {
2279  OptionsContext *o = optctx;
2280  return parse_option(o, "filter:a", arg, options);
2281 }
2282 
2283 static int opt_vsync(void *optctx, const char *opt, const char *arg)
2284 {
2285  if (!av_strcasecmp(arg, "cfr")) video_sync_method = VSYNC_CFR;
2286  else if (!av_strcasecmp(arg, "vfr")) video_sync_method = VSYNC_VFR;
2287  else if (!av_strcasecmp(arg, "passthrough")) video_sync_method = VSYNC_PASSTHROUGH;
2288  else if (!av_strcasecmp(arg, "drop")) video_sync_method = VSYNC_DROP;
2289 
2292  return 0;
2293 }
2294 
2295 static int opt_timecode(void *optctx, const char *opt, const char *arg)
2296 {
2297  OptionsContext *o = optctx;
2298  char *tcr = av_asprintf("timecode=%s", arg);
2299  int ret = parse_option(o, "metadata:g", tcr, options);
2300  if (ret >= 0)
2301  ret = av_dict_set(&o->g->codec_opts, "gop_timecode", arg, 0);
2302  av_free(tcr);
2303  return 0;
2304 }
2305 
2306 static int opt_channel_layout(void *optctx, const char *opt, const char *arg)
2307 {
2308  OptionsContext *o = optctx;
2309  char layout_str[32];
2310  char *stream_str;
2311  char *ac_str;
2312  int ret, channels, ac_str_size;
2313  uint64_t layout;
2314 
2315  layout = av_get_channel_layout(arg);
2316  if (!layout) {
2317  av_log(NULL, AV_LOG_ERROR, "Unknown channel layout: %s\n", arg);
2318  return AVERROR(EINVAL);
2319  }
2320  snprintf(layout_str, sizeof(layout_str), "%"PRIu64, layout);
2321  ret = opt_default_new(o, opt, layout_str);
2322  if (ret < 0)
2323  return ret;
2324 
2325  /* set 'ac' option based on channel layout */
2326  channels = av_get_channel_layout_nb_channels(layout);
2327  snprintf(layout_str, sizeof(layout_str), "%d", channels);
2328  stream_str = strchr(opt, ':');
2329  ac_str_size = 3 + (stream_str ? strlen(stream_str) : 0);
2330  ac_str = av_mallocz(ac_str_size);
2331  if (!ac_str)
2332  return AVERROR(ENOMEM);
2333  av_strlcpy(ac_str, "ac", 3);
2334  if (stream_str)
2335  av_strlcat(ac_str, stream_str, ac_str_size);
2336  ret = parse_option(o, ac_str, layout_str, options);
2337  av_free(ac_str);
2338 
2339  return ret;
2340 }
2341 
2342 static int opt_audio_qscale(void *optctx, const char *opt, const char *arg)
2343 {
2344  OptionsContext *o = optctx;
2345  return parse_option(o, "q:a", arg, options);
2346 }
2347 
2348 static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
2349 {
2351  if (!(filtergraphs[nb_filtergraphs - 1] = av_mallocz(sizeof(*filtergraphs[0]))))
2352  return AVERROR(ENOMEM);
2355  if (!filtergraphs[nb_filtergraphs - 1]->graph_desc)
2356  return AVERROR(ENOMEM);
2357  return 0;
2358 }
2359 
2360 static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
2361 {
2362  uint8_t *graph_desc = read_file(arg);
2363  if (!graph_desc)
2364  return AVERROR(EINVAL);
2365 
2367  if (!(filtergraphs[nb_filtergraphs - 1] = av_mallocz(sizeof(*filtergraphs[0]))))
2368  return AVERROR(ENOMEM);
2370  filtergraphs[nb_filtergraphs - 1]->graph_desc = graph_desc;
2371  return 0;
2372 }
2373 
2374 void show_help_default(const char *opt, const char *arg)
2375 {
2376  /* per-file options have at least one of those set */
2377  const int per_file = OPT_SPEC | OPT_OFFSET | OPT_PERFILE;
2378  int show_advanced = 0, show_avoptions = 0;
2379 
2380  if (opt && *opt) {
2381  if (!strcmp(opt, "long"))
2382  show_advanced = 1;
2383  else if (!strcmp(opt, "full"))
2384  show_advanced = show_avoptions = 1;
2385  else
2386  av_log(NULL, AV_LOG_ERROR, "Unknown help option '%s'.\n", opt);
2387  }
2388 
2389  show_usage();
2390 
2391  printf("Getting help:\n"
2392  " -h -- print basic options\n"
2393  " -h long -- print more options\n"
2394  " -h full -- print all options (including all format and codec specific options, very long)\n"
2395  " See man %s for detailed description of the options.\n"
2396  "\n", program_name);
2397 
2398  show_help_options(options, "Print help / information / capabilities:",
2399  OPT_EXIT, 0, 0);
2400 
2401  show_help_options(options, "Global options (affect whole program "
2402  "instead of just one file:",
2403  0, per_file | OPT_EXIT | OPT_EXPERT, 0);
2404  if (show_advanced)
2405  show_help_options(options, "Advanced global options:", OPT_EXPERT,
2406  per_file | OPT_EXIT, 0);
2407 
2408  show_help_options(options, "Per-file main options:", 0,
2410  OPT_EXIT, per_file);
2411  if (show_advanced)
2412  show_help_options(options, "Advanced per-file options:",
2413  OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE, per_file);
2414 
2415  show_help_options(options, "Video options:",
2417  if (show_advanced)
2418  show_help_options(options, "Advanced Video options:",
2420 
2421  show_help_options(options, "Audio options:",
2423  if (show_advanced)
2424  show_help_options(options, "Advanced Audio options:",
2426  show_help_options(options, "Subtitle options:",
2427  OPT_SUBTITLE, 0, 0);
2428  printf("\n");
2429 
2430  if (show_avoptions) {
2437  }
2438 }
2439 
2440 void show_usage(void)
2441 {
2442  av_log(NULL, AV_LOG_INFO, "Hyper fast Audio and Video encoder\n");
2443  av_log(NULL, AV_LOG_INFO, "usage: %s [options] [[infile options] -i infile]... {[outfile options] outfile}...\n", program_name);
2444  av_log(NULL, AV_LOG_INFO, "\n");
2445 }
2446 
2447 enum OptGroup {
2450 };
2451 
2452 static const OptionGroupDef groups[] = {
2453  [GROUP_OUTFILE] = { "output file", NULL, OPT_OUTPUT },
2454  [GROUP_INFILE] = { "input file", "i", OPT_INPUT },
2455 };
2456 
2457 static int open_files(OptionGroupList *l, const char *inout,
2458  int (*open_file)(OptionsContext*, const char*))
2459 {
2460  int i, ret;
2461 
2462  for (i = 0; i < l->nb_groups; i++) {
2463  OptionGroup *g = &l->groups[i];
2464  OptionsContext o;
2465 
2466  init_options(&o, !strcmp(inout, "input"));
2467  o.g = g;
2468 
2469  ret = parse_optgroup(&o, g);
2470  if (ret < 0) {
2471  av_log(NULL, AV_LOG_ERROR, "Error parsing options for %s file "
2472  "%s.\n", inout, g->arg);
2473  return ret;
2474  }
2475 
2476  av_log(NULL, AV_LOG_DEBUG, "Opening an %s file: %s.\n", inout, g->arg);
2477  ret = open_file(&o, g->arg);
2478  uninit_options(&o, !strcmp(inout, "input"));
2479  if (ret < 0) {
2480  av_log(NULL, AV_LOG_ERROR, "Error opening %s file %s.\n",
2481  inout, g->arg);
2482  return ret;
2483  }
2484  av_log(NULL, AV_LOG_DEBUG, "Successfully opened the file.\n");
2485  }
2486 
2487  return 0;
2488 }
2489 
2490 int ffmpeg_parse_options(int argc, char **argv)
2491 {
2492  OptionParseContext octx;
2493  uint8_t error[128];
2494  int ret;
2495 
2496  memset(&octx, 0, sizeof(octx));
2497 
2498  /* split the commandline into an internal representation */
2499  ret = split_commandline(&octx, argc, argv, options, groups,
2500  FF_ARRAY_ELEMS(groups));
2501  if (ret < 0) {
2502  av_log(NULL, AV_LOG_FATAL, "Error splitting the argument list: ");
2503  goto fail;
2504  }
2505 
2506  /* apply global options */
2507  ret = parse_optgroup(NULL, &octx.global_opts);
2508  if (ret < 0) {
2509  av_log(NULL, AV_LOG_FATAL, "Error parsing global options: ");
2510  goto fail;
2511  }
2512 
2513  /* open input files */
2514  ret = open_files(&octx.groups[GROUP_INFILE], "input", open_input_file);
2515  if (ret < 0) {
2516  av_log(NULL, AV_LOG_FATAL, "Error opening input files: ");
2517  goto fail;
2518  }
2519 
2520  /* open output files */
2521  ret = open_files(&octx.groups[GROUP_OUTFILE], "output", open_output_file);
2522  if (ret < 0) {
2523  av_log(NULL, AV_LOG_FATAL, "Error opening output files: ");
2524  goto fail;
2525  }
2526 
2527 fail:
2528  uninit_parse_context(&octx);
2529  if (ret < 0) {
2530  av_strerror(ret, error, sizeof(error));
2531  av_log(NULL, AV_LOG_FATAL, "%s\n", error);
2532  }
2533  return ret;
2534 }
2535 
2536 static int opt_progress(void *optctx, const char *opt, const char *arg)
2537 {
2538  AVIOContext *avio = NULL;
2539  int ret;
2540 
2541  if (!strcmp(arg, "-"))
2542  arg = "pipe:";
2543  ret = avio_open2(&avio, arg, AVIO_FLAG_WRITE, &int_cb, NULL);
2544  if (ret < 0) {
2545  av_log(NULL, AV_LOG_ERROR, "Failed to open progress URL \"%s\": %s\n",
2546  arg, av_err2str(ret));
2547  return ret;
2548  }
2549  progress_avio = avio;
2550  return 0;
2551 }
2552 
2553 #define OFFSET(x) offsetof(OptionsContext, x)
2554 const OptionDef options[] = {
2555  /* main options */
2556 #include "cmdutils_common_opts.h"
2557  { "f", HAS_ARG | OPT_STRING | OPT_OFFSET |
2558  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(format) },
2559  "force format", "fmt" },
2560  { "y", OPT_BOOL, { &file_overwrite },
2561  "overwrite output files" },
2562  { "n", OPT_BOOL, { &no_file_overwrite },
2563  "do not overwrite output files" },
2564  { "c", HAS_ARG | OPT_STRING | OPT_SPEC |
2565  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
2566  "codec name", "codec" },
2567  { "codec", HAS_ARG | OPT_STRING | OPT_SPEC |
2568  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
2569  "codec name", "codec" },
2570  { "pre", HAS_ARG | OPT_STRING | OPT_SPEC |
2571  OPT_OUTPUT, { .off = OFFSET(presets) },
2572  "preset name", "preset" },
2573  { "map", HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2574  OPT_OUTPUT, { .func_arg = opt_map },
2575  "set input stream mapping",
2576  "[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" },
2577  { "map_channel", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_map_channel },
2578  "map an audio channel from one stream to another", "file.stream.channel[:syncfile.syncstream]" },
2579  { "map_metadata", HAS_ARG | OPT_STRING | OPT_SPEC |
2580  OPT_OUTPUT, { .off = OFFSET(metadata_map) },
2581  "set metadata information of outfile from infile",
2582  "outfile[,metadata]:infile[,metadata]" },
2583  { "map_chapters", HAS_ARG | OPT_INT | OPT_EXPERT | OPT_OFFSET |
2584  OPT_OUTPUT, { .off = OFFSET(chapters_input_file) },
2585  "set chapters mapping", "input_file_index" },
2586  { "t", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(recording_time) },
2587  "record or transcode \"duration\" seconds of audio/video",
2588  "duration" },
2589  { "to", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(stop_time) },
2590  "record or transcode stop time", "time_stop" },
2591  { "fs", HAS_ARG | OPT_INT64 | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(limit_filesize) },
2592  "set the limit file size in bytes", "limit_size" },
2593  { "ss", HAS_ARG | OPT_TIME | OPT_OFFSET |
2594  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(start_time) },
2595  "set the start time offset", "time_off" },
2596  { "itsoffset", HAS_ARG | OPT_TIME | OPT_OFFSET |
2597  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(input_ts_offset) },
2598  "set the input ts offset", "time_off" },
2599  { "itsscale", HAS_ARG | OPT_DOUBLE | OPT_SPEC |
2600  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(ts_scale) },
2601  "set the input ts scale", "scale" },
2602  { "timestamp", HAS_ARG | OPT_PERFILE, { .func_arg = opt_recording_timestamp },
2603  "set the recording timestamp ('now' to set the current time)", "time" },
2604  { "metadata", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(metadata) },
2605  "add metadata", "string=string" },
2606  { "dframes", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
2607  OPT_OUTPUT, { .func_arg = opt_data_frames },
2608  "set the number of data frames to record", "number" },
2609  { "benchmark", OPT_BOOL | OPT_EXPERT, { &do_benchmark },
2610  "add timings for benchmarking" },
2611  { "benchmark_all", OPT_BOOL | OPT_EXPERT, { &do_benchmark_all },
2612  "add timings for each task" },
2613  { "progress", HAS_ARG | OPT_EXPERT, { .func_arg = opt_progress },
2614  "write program-readable progress information", "url" },
2615  { "stdin", OPT_BOOL | OPT_EXPERT, { &stdin_interaction },
2616  "enable or disable interaction on standard input" },
2617  { "timelimit", HAS_ARG | OPT_EXPERT, { .func_arg = opt_timelimit },
2618  "set max runtime in seconds", "limit" },
2619  { "dump", OPT_BOOL | OPT_EXPERT, { &do_pkt_dump },
2620  "dump each input packet" },
2621  { "hex", OPT_BOOL | OPT_EXPERT, { &do_hex_dump },
2622  "when dumping packets, also dump the payload" },
2623  { "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
2624  OPT_INPUT, { .off = OFFSET(rate_emu) },
2625  "read input at native frame rate", "" },
2626  { "target", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_target },
2627  "specify target file type (\"vcd\", \"svcd\", \"dvd\","
2628  " \"dv\", \"dv50\", \"pal-vcd\", \"ntsc-svcd\", ...)", "type" },
2629  { "vsync", HAS_ARG | OPT_EXPERT, { opt_vsync },
2630  "video sync method", "" },
2631  { "async", HAS_ARG | OPT_INT | OPT_EXPERT, { &audio_sync_method },
2632  "audio sync method", "" },
2633  { "adrift_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &audio_drift_threshold },
2634  "audio drift threshold", "threshold" },
2635  { "copyts", OPT_BOOL | OPT_EXPERT, { &copy_ts },
2636  "copy timestamps" },
2637  { "copytb", HAS_ARG | OPT_INT | OPT_EXPERT, { &copy_tb },
2638  "copy input stream time base when stream copying", "mode" },
2639  { "shortest", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
2640  OPT_OUTPUT, { .off = OFFSET(shortest) },
2641  "finish encoding within shortest input" },
2642  { "dts_delta_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &dts_delta_threshold },
2643  "timestamp discontinuity delta threshold", "threshold" },
2644  { "dts_error_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &dts_error_threshold },
2645  "timestamp error delta threshold", "threshold" },
2646  { "xerror", OPT_BOOL | OPT_EXPERT, { &exit_on_error },
2647  "exit on error", "error" },
2648  { "copyinkf", OPT_BOOL | OPT_EXPERT | OPT_SPEC |
2649  OPT_OUTPUT, { .off = OFFSET(copy_initial_nonkeyframes) },
2650  "copy initial non-keyframes" },
2651  { "copypriorss", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(copy_prior_start) },
2652  "copy or discard frames before start time" },
2653  { "frames", OPT_INT64 | HAS_ARG | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(max_frames) },
2654  "set the number of frames to record", "number" },
2655  { "tag", OPT_STRING | HAS_ARG | OPT_SPEC |
2656  OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(codec_tags) },
2657  "force codec tag/fourcc", "fourcc/tag" },
2658  { "q", HAS_ARG | OPT_EXPERT | OPT_DOUBLE |
2659  OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(qscale) },
2660  "use fixed quality scale (VBR)", "q" },
2661  { "qscale", HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2662  OPT_OUTPUT, { .func_arg = opt_qscale },
2663  "use fixed quality scale (VBR)", "q" },
2664  { "profile", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_profile },
2665  "set profile", "profile" },
2666  { "filter", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filters) },
2667  "set stream filtergraph", "filter_graph" },
2668  { "filter_script", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filter_scripts) },
2669  "read stream filtergraph description from a file", "filename" },
2670  { "reinit_filter", HAS_ARG | OPT_INT | OPT_SPEC | OPT_INPUT, { .off = OFFSET(reinit_filters) },
2671  "reinit filtergraph on input parameter changes", "" },
2672  { "filter_complex", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex },
2673  "create a complex filtergraph", "graph_description" },
2674  { "lavfi", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex },
2675  "create a complex filtergraph", "graph_description" },
2676  { "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script },
2677  "read complex filtergraph description from a file", "filename" },
2678  { "stats", OPT_BOOL, { &print_stats },
2679  "print progress report during encoding", },
2680  { "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
2681  OPT_OUTPUT, { .func_arg = opt_attach },
2682  "add an attachment to the output file", "filename" },
2683  { "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC |
2684  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(dump_attachment) },
2685  "extract an attachment into a file", "filename" },
2686  { "debug_ts", OPT_BOOL | OPT_EXPERT, { &debug_ts },
2687  "print timestamp debugging info" },
2688 
2689  /* video options */
2690  { "vframes", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_frames },
2691  "set the number of video frames to record", "number" },
2692  { "r", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
2693  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_rates) },
2694  "set frame rate (Hz value, fraction or abbreviation)", "rate" },
2696  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_sizes) },
2697  "set frame size (WxH or abbreviation)", "size" },
2698  { "aspect", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
2699  OPT_OUTPUT, { .off = OFFSET(frame_aspect_ratios) },
2700  "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" },
2701  { "pix_fmt", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
2702  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_pix_fmts) },
2703  "set pixel format", "format" },
2704  { "bits_per_raw_sample", OPT_VIDEO | OPT_INT | HAS_ARG, { &frame_bits_per_raw_sample },
2705  "set the number of bits per raw sample", "number" },
2706  { "intra", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &intra_only },
2707  "deprecated use -g 1" },
2709  "disable video" },
2710  { "vdt", OPT_VIDEO | OPT_INT | HAS_ARG | OPT_EXPERT , { &video_discard },
2711  "discard threshold", "n" },
2712  { "rc_override", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
2713  OPT_OUTPUT, { .off = OFFSET(rc_overrides) },
2714  "rate control override for specific intervals", "override" },
2715  { "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_INPUT |
2716  OPT_OUTPUT, { .func_arg = opt_video_codec },
2717  "force video codec ('copy' to copy stream)", "codec" },
2718  { "sameq", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_sameq },
2719  "Removed" },
2720  { "same_quant", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_sameq },
2721  "Removed" },
2722  { "timecode", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_timecode },
2723  "set initial TimeCode value.", "hh:mm:ss[:;.]ff" },
2724  { "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT | OPT_OUTPUT, { .off = OFFSET(pass) },
2725  "select the pass number (1 to 3)", "n" },
2726  { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC |
2727  OPT_OUTPUT, { .off = OFFSET(passlogfiles) },
2728  "select two pass log file name prefix", "prefix" },
2729  { "deinterlace", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_deinterlace },
2730  "this option is deprecated, use the yadif filter instead" },
2731  { "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr },
2732  "calculate PSNR of compressed frames" },
2733  { "vstats", OPT_VIDEO | OPT_EXPERT , { &opt_vstats },
2734  "dump video coding statistics to file" },
2735  { "vstats_file", OPT_VIDEO | HAS_ARG | OPT_EXPERT , { opt_vstats_file },
2736  "dump video coding statistics to file", "file" },
2737  { "vf", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_filters },
2738  "set video filters", "filter_graph" },
2739  { "intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
2740  OPT_OUTPUT, { .off = OFFSET(intra_matrices) },
2741  "specify intra matrix coeffs", "matrix" },
2742  { "inter_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
2743  OPT_OUTPUT, { .off = OFFSET(inter_matrices) },
2744  "specify inter matrix coeffs", "matrix" },
2745  { "top", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_INT| OPT_SPEC |
2746  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(top_field_first) },
2747  "top=1/bottom=0/auto=-1 field first", "" },
2748  { "dc", OPT_VIDEO | OPT_INT | HAS_ARG | OPT_EXPERT , { &intra_dc_precision },
2749  "intra_dc_precision", "precision" },
2750  { "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2751  OPT_OUTPUT, { .func_arg = opt_old2new },
2752  "force video tag/fourcc", "fourcc/tag" },
2753  { "qphist", OPT_VIDEO | OPT_BOOL | OPT_EXPERT , { &qp_hist },
2754  "show QP histogram" },
2755  { "force_fps", OPT_VIDEO | OPT_BOOL | OPT_EXPERT | OPT_SPEC |
2756  OPT_OUTPUT, { .off = OFFSET(force_fps) },
2757  "force the selected framerate, disable the best supported framerate selection" },
2758  { "streamid", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2759  OPT_OUTPUT, { .func_arg = opt_streamid },
2760  "set the value of an outfile streamid", "streamIndex:value" },
2761  { "force_key_frames", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
2762  OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(forced_key_frames) },
2763  "force key frames at specified timestamps", "timestamps" },
2764  { "b", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate },
2765  "video bitrate (please use -b:v)", "bitrate" },
2766 
2767  /* audio options */
2768  { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames },
2769  "set the number of audio frames to record", "number" },
2770  { "aq", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_qscale },
2771  "set audio quality (codec-specific)", "quality", },
2772  { "ar", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC |
2773  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_sample_rate) },
2774  "set audio sampling rate (in Hz)", "rate" },
2775  { "ac", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC |
2776  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_channels) },
2777  "set number of audio channels", "channels" },
2779  "disable audio" },
2780  { "acodec", OPT_AUDIO | HAS_ARG | OPT_PERFILE |
2781  OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_audio_codec },
2782  "force audio codec ('copy' to copy stream)", "codec" },
2783  { "atag", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2784  OPT_OUTPUT, { .func_arg = opt_old2new },
2785  "force audio tag/fourcc", "fourcc/tag" },
2786  { "vol", OPT_AUDIO | HAS_ARG | OPT_INT, { &audio_volume },
2787  "change audio volume (256=normal)" , "volume" },
2788  { "sample_fmt", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_SPEC |
2790  "set sample format", "format" },
2791  { "channel_layout", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2792  OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_channel_layout },
2793  "set channel layout", "layout" },
2794  { "af", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_filters },
2795  "set audio filters", "filter_graph" },
2796  { "guess_layout_max", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(guess_layout_max) },
2797  "set the maximum number of channels to try to guess the channel layout" },
2798 
2799  /* subtitle options */
2801  "disable subtitle" },
2802  { "scodec", OPT_SUBTITLE | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_subtitle_codec },
2803  "force subtitle codec ('copy' to copy stream)", "codec" },
2804  { "stag", OPT_SUBTITLE | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new }
2805  , "force subtitle tag/fourcc", "fourcc/tag" },
2806  { "fix_sub_duration", OPT_BOOL | OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT, { .off = OFFSET(fix_sub_duration) },
2807  "fix subtitles duration" },
2808  { "canvas_size", OPT_SUBTITLE | HAS_ARG | OPT_STRING | OPT_SPEC | OPT_INPUT, { .off = OFFSET(canvas_sizes) },
2809  "set canvas size (WxH or abbreviation)", "size" },
2810 
2811  /* grab options */
2812  { "vc", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_video_channel },
2813  "deprecated, use -channel", "channel" },
2814  { "tvstd", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_video_standard },
2815  "deprecated, use -standard", "standard" },
2816  { "isync", OPT_BOOL | OPT_EXPERT, { &input_sync }, "this option is deprecated and does nothing", "" },
2817 
2818  /* muxer options */
2819  { "muxdelay", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_max_delay) },
2820  "set the maximum demux-decode delay", "seconds" },
2821  { "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_preload) },
2822  "set the initial demux-decode delay", "seconds" },
2823 
2824  { "bsf", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(bitstream_filters) },
2825  "A comma-separated list of bitstream filters", "bitstream_filters" },
2826  { "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new },
2827  "deprecated", "audio bitstream_filters" },
2828  { "vbsf", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new },
2829  "deprecated", "video bitstream_filters" },
2830 
2831  { "apre", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
2832  "set the audio options to the indicated preset", "preset" },
2833  { "vpre", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
2834  "set the video options to the indicated preset", "preset" },
2835  { "spre", HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
2836  "set the subtitle options to the indicated preset", "preset" },
2837  { "fpre", HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
2838  "set options from indicated preset file", "filename" },
2839  /* data codec support */
2840  { "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_data_codec },
2841  "force data codec ('copy' to copy stream)", "codec" },
2842  { "dn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(data_disable) },
2843  "disable data" },
2844 
2845  { NULL, },
2846 };
unsigned int nb_chapters
Definition: avformat.h:1089
const char * name
Definition: avisynth_c.h:675
int avio_open(AVIOContext **s, const char *url, int flags)
Create and initialize a AVIOContext for accessing the resource indicated by url.
Definition: aviobuf.c:799
int parse_optgroup(void *optctx, OptionGroup *g)
Parse an options group and write results into optctx.
Definition: cmdutils.c:376
char * vstats_filename
Definition: ffmpeg_opt.c:65
int av_parse_ratio(AVRational *q, const char *str, int max, int log_offset, void *log_ctx)
Parse str and store the parsed ratio in q.
Definition: parseutils.c:43
int nb_dump_attachment
Definition: ffmpeg.h:100
int guess_input_channel_layout(InputStream *ist)
Definition: ffmpeg.c:1464
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:205
void show_usage(void)
Definition: ffmpeg_opt.c:2440
int nb_metadata
Definition: ffmpeg.h:132
int nb_streamid_map
Definition: ffmpeg.h:129
int audio_sync_method
Definition: ffmpeg_opt.c:72
AVDictionary * resample_opts
Definition: cmdutils.h:265
int keep_pix_fmt
Definition: ffmpeg.h:364
const char * s
Definition: avisynth_c.h:668
Bytestream IO Context.
Definition: avio.h:68
float mux_preload
Definition: ffmpeg.h:118
#define OPT_EXPERT
Definition: cmdutils.h:149
int64_t recording_time
desired length of the resulting file in microseconds == AV_TIME_BASE units
Definition: ffmpeg.h:371
void term_init(void)
Definition: ffmpeg.c:324
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition: aviobuf.c:261
static void choose_encoder(OptionsContext *o, AVFormatContext *s, OutputStream *ost)
Definition: ffmpeg_opt.c:949
int nb_outputs
Definition: ffmpeg.h:210
int copy_tb
Definition: ffmpeg_opt.c:80
AVDictionary * swr_opts
Definition: ffmpeg.h:355
int qp_hist
Definition: ffmpeg_opt.c:84
AVDictionary * swr_opts
Definition: cmdutils.h:267
int resample_channels
Definition: ffmpeg.h:249
int av_parse_video_rate(AVRational *rate, const char *arg)
Parse str and store the detected values in *rate.
Definition: parseutils.c:162
void term_exit(void)
Definition: ffmpeg.c:302
int stream_copy
Definition: ffmpeg.h:359
AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
static int opt_data_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2149
int do_benchmark
Definition: ffmpeg_opt.c:75
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition: avformat.h:1125
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
Definition: aviobuf.c:988
AVOption.
Definition: opt.h:251
AVRational frame_rate
Definition: ffmpeg.h:329
int audio_channels
Definition: rtp.c:39
int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str)
Parse str and put in width_ptr and height_ptr the detected values.
Definition: parseutils.c:131
static void init_output_filter(OutputFilter *ofilter, OptionsContext *o, AVFormatContext *oc)
Definition: ffmpeg_opt.c:1515
static AVInputFormat * file_iformat
Definition: ffplay.c:272
#define OPT_VIDEO
Definition: cmdutils.h:151
#define CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
float mux_max_delay
Definition: ffmpeg.h:119
int * streamid_map
Definition: ffmpeg.h:128
void * av_realloc_f(void *ptr, size_t nelem, size_t elsize)
Allocate or reallocate a block of memory.
Definition: mem.c:168
int video_sync_method
Definition: ffmpeg_opt.c:73
external API header
int nb_stream_maps
Definition: ffmpeg.h:104
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
static void assert_file_overwrite(const char *filename)
Definition: ffmpeg_opt.c:659
int ostream_idx
Definition: ffmpeg.h:70
AVStream * st
Definition: ffmpeg.h:313
int avformat_query_codec(AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance)
Test if the given container can store a codec.
#define AV_DICT_DONT_OVERWRITE
Don&#39;t overwrite existing entries.
Definition: dict.h:75
static int input_sync
Definition: ffmpeg_opt.c:95
#define CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
int split_commandline(OptionParseContext *octx, int argc, char *argv[], const OptionDef *options, const OptionGroupDef *groups, int nb_groups)
Split the commandline into an intermediate form convenient for further processing.
Definition: cmdutils.c:678
AVRational framerate
Definition: ffmpeg.h:239
void choose_sample_fmt(AVStream *st, AVCodec *codec)
Definition: ffmpeg_filter.c:71
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL.
Definition: graphparser.c:175
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:154
enum AVCodecID video_codec
default video codec
Definition: avformat.h:389
int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the given stream matches a stream specifier.
Definition: cmdutils.c:1828
#define OPT_AUDIO
Definition: cmdutils.h:152
AVFilterInOut * out_tmp
Definition: ffmpeg.h:197
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
Definition: avfilter.c:842
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:709
int num
numerator
Definition: rational.h:44
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:284
int index
stream index in AVFormatContext
Definition: avformat.h:644
int nb_frame_pix_fmts
Definition: ffmpeg.h:91
#define AVIO_FLAG_READ
read-only
Definition: avio.h:332
static int sync(AVFormatContext *s, uint8_t *header)
Read input until we find the next ident.
Definition: lxfdec.c:85
int do_deinterlace
Definition: ffmpeg_opt.c:74
static int opt_audio_filters(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2277
Sinusoidal phase f
#define AVIO_FLAG_WRITE
write-only
Definition: avio.h:333
static int read_ffserver_streams(OptionsContext *o, AVFormatContext *s, const char *filename)
Definition: ffmpeg_opt.c:1472
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
#define pass
Definition: fft.c:335
AVBitStreamFilterContext * bitstream_filters
Definition: ffmpeg.h:323
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
external API header
const char * arg
Definition: cmdutils.h:258
static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2348
#define OPT_DATA
Definition: cmdutils.h:158
static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata)
Definition: ffmpeg_opt.c:1430
enum AVMediaType type
void * av_realloc(void *ptr, size_t size)
Allocate or reallocate a block of memory.
Definition: mem.c:141
struct AVStream::@125 * info
#define FF_ARRAY_ELEMS(a)
static int file_overwrite
Definition: ffmpeg_opt.c:90
static OutputStream * new_output_stream(OptionsContext *o, AVFormatContext *oc, enum AVMediaType type, int source_index)
Definition: ffmpeg_opt.c:966
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int nb_input_streams
Definition: ffmpeg.c:146
static int audio_disable
Definition: ffplay.c:281
AVDictionary * metadata
Definition: avformat.h:922
static const char * audio_codec_name
Definition: ffplay.c:309
AVDictionaryEntry * av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:39
#define OPT_DOUBLE
Definition: cmdutils.h:166
enum AVCodecID subtitle_codec_id
Forced subtitle codec_id.
Definition: avformat.h:1069
#define OPT_FLOAT
Definition: cmdutils.h:154
#define VSYNC_VFR
Definition: ffmpeg.h:53
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
Definition: aviobuf.c:976
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
Copy the settings of the source AVCodecContext into the destination AVCodecContext.
AVDictionary * filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVFormatContext *s, AVStream *st, AVCodec *codec)
Filter out options for given codec.
Definition: cmdutils.c:1836
int64_t start_time
start time in microseconds == AV_TIME_BASE units
Definition: ffmpeg.h:372
int index
Definition: ffmpeg.h:201
static int opt_preset(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2175
SpecifierOpt * frame_pix_fmts
Definition: ffmpeg.h:90
static int opt_data_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:210
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
Definition: mem.c:198
#define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)
Definition: ffmpeg_opt.c:44
void uninit_parse_context(OptionParseContext *octx)
Free all allocated memory in an OptionParseContext.
Definition: cmdutils.c:651
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
static int opt_audio_qscale(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2342
Format I/O context.
Definition: avformat.h:944
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext.
int avio_check(const char *url, int flags)
Return AVIO_FLAG_* access flags corresponding to the access permissions of the resource in url...
Definition: avio.c:365
#define CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
int64_t cur_dts
Definition: avformat.h:785
static const uint8_t frame_sizes[]
Definition: rtpdec_qcelp.c:24
static int do_psnr
Definition: ffmpeg_opt.c:94
char * logfile_prefix
Definition: ffmpeg.h:347
#define AVFMT_FLAG_NONBLOCK
Do not block when reading packets from input.
Definition: avformat.h:1024
AVFilterPad * output_pads
array of output pads
Definition: avfilter.h:538
static int64_t start_time
Definition: ffplay.c:293
int copy_initial_nonkeyframes
Definition: ffmpeg.h:361
enum AVSampleFormat sample_fmt
audio sample format
int flags
can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, AVFMT_TS_NONSTRICT
Definition: avformat.h:397
uint8_t
Opaque data information usually continuous.
Definition: avutil.h:145
int opt_default(void *optctx, const char *opt, const char *arg)
Fallback for options that are not explicitly handled, these will be parsed through AVOptions...
Definition: cmdutils.c:483
#define OPT_OUTPUT
Definition: cmdutils.h:168
AVOptions.
window constants for m
#define HAS_ARG
Definition: cmdutils.h:147
static void init_options(OptionsContext *o, int is_input)
Definition: ffmpeg_opt.c:136
static int open_input_file(OptionsContext *o, const char *filename)
Definition: ffmpeg_opt.c:716
static const OptionGroupDef groups[]
Definition: ffmpeg_opt.c:2452
AVDictionary * opts
Definition: ffmpeg.h:369
#define CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
int id
unique ID to identify the chapter
Definition: avformat.h:919
static int opt_vsync(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2283
#define AVCONV_DATADIR
Definition: config.h:7
int id
Format-specific stream ID.
Definition: avformat.h:650
AVDictionary * opts
Definition: ffmpeg.h:354
end end
#define OPT_OFFSET
Definition: cmdutils.h:161
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
int nb_max_frames
Definition: ffmpeg.h:134
int shortest
Definition: ffmpeg.h:375
AVStream ** streams
Definition: avformat.h:992
static int opt_vstats(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2126
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
the mask is usually to keep the same permissions Filters should remove permissions on reference they give to output whenever necessary It can be automatically done by setting the rej_perms field on the output pad Here are a few guidelines corresponding to common then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
Definition: log.h:142
int channel_idx
Definition: ffmpeg.h:69
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:486
int nb_streams
Definition: ffmpeg.h:283
int sync_file_index
Definition: ffmpeg.h:63
AVDictionary * resample_opts
Definition: ffmpeg.h:356
uint32_t tag
Definition: movenc.c:894
#define OPT_SPEC
Definition: cmdutils.h:162
int nb_input_files
Definition: ffmpeg.c:148
int resample_sample_rate
Definition: ffmpeg.h:248
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext.
for audio filters
int print_stats
Definition: ffmpeg_opt.c:83
void show_help_options(const OptionDef *options, const char *msg, int req_flags, int rej_flags, int alt_flags)
Print help for all options matching specified flags.
Definition: cmdutils.c:147
AVCodec * dec
Definition: ffmpeg.h:218
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
Definition: aviobuf.c:173
const OptionDef options[]
Definition: ffmpeg_opt.c:2554
int top_field_first
Definition: ffmpeg.h:240
int nb_output_streams
Definition: ffmpeg.c:151
int file_index
Definition: ffmpeg.h:214
struct AVBitStreamFilterContext * next
int resample_pix_fmt
Definition: ffmpeg.h:245
int resample_height
Definition: ffmpeg.h:243
enum AVCodecID video_codec_id
Forced video codec_id.
Definition: avformat.h:1057
int64_t filter_in_rescale_delta_last
Definition: ffmpeg.h:232
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
Definition: opt.h:281
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:478
static int opt_video_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:198
static int opt_qscale(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2244
struct AVOutputFormat * oformat
Definition: avformat.h:958
AVDictionary ** setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts)
Setup AVCodecContext options for avformat_find_stream_info().
Definition: cmdutils.c:1892
AVCodec * avcodec_find_encoder_by_name(const char *name)
Find a registered encoder with the specified name.
AVDictionary * format_opts
Definition: cmdutils.c:68
static OutputStream * new_subtitle_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1380
int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat, const char *format_name, const char *filename)
Allocate an AVFormatContext for an output format.
Definition: mux.c:125
#define OPT_SUBTITLE
Definition: cmdutils.h:155
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:130
static const uint8_t frame_size[4]
Definition: g723_1_data.h:58
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output)
void av_dict_copy(AVDictionary **dst, AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:176
enum AVCodecID id
int rate_emu
Definition: ffmpeg.h:286
static int opt_profile(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2259
AVDictionary * metadata
Definition: avformat.h:1092
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Definition: mem.c:183
static int configure_complex_filters(void)
Definition: ffmpeg_opt.c:1549
FilterGraph ** filtergraphs
Definition: ffmpeg.c:155
const AVIOInterruptCB int_cb
Definition: ffmpeg.c:422
static int open_files(OptionGroupList *l, const char *inout, int(*open_file)(OptionsContext *, const char *))
Definition: ffmpeg_opt.c:2457
static int opt_subtitle_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:204
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering
Definition: opt.h:287
int64_t start_time
Definition: ffmpeg.h:77
static int opt_video_channel(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:180
static int opt_recording_timestamp(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:502
int ofile_idx
Definition: ffmpeg.h:70
int64_t sws_flags
Definition: ffmpeg.h:353
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
Definition: aviobuf.c:821
AudioChannelMap * audio_channel_maps
Definition: ffmpeg.h:105
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
Definition: dict.c:162
int debug_ts
Definition: ffmpeg_opt.c:81
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
const char * arg
int flags
CODEC_FLAG_*.
const char * name
Definition: cmdutils.h:145
static int opt_bitrate(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2232
int parse_option(void *optctx, const char *opt, const char *arg, const OptionDef *options)
Parse one given option.
Definition: cmdutils.c:312
AVChapter ** chapters
Definition: avformat.h:1090
Definition: graph2dot.c:48
static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
Parse a metadata specifier passed as &#39;arg&#39; parameter.
Definition: ffmpeg_opt.c:385
int finished
Definition: ffmpeg.h:357
#define CODEC_FLAG_QSCALE
Use fixed qscale.
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
static int opt_old2new(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2223
int video_disable
Definition: ffmpeg.h:122
static int opt_sameq(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:171
int flags
Definition: cmdutils.h:146
static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
Definition: ffmpeg_opt.c:412
int force_fps
Definition: ffmpeg.h:330
#define FFMAX(a, b)
Definition: common.h:56
external API header
StreamMap * stream_maps
Definition: ffmpeg.h:103
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
Definition: avstring.c:82
char * av_get_token(const char **buf, const char *term)
Unescape the given string until a non escaped terminating char, and return the token corresponding to...
Definition: avstring.c:148
uint64_t limit_filesize
Definition: ffmpeg.h:117
const char * format
Definition: ffmpeg.h:78
uint64_t channel_layout
Audio channel layout.
int avio_r8(AVIOContext *s)
Definition: aviobuf.c:469
AVCodecContext * codec
Codec context associated with this stream.
Definition: avformat.h:662
OutputFilter * filter
Definition: ffmpeg.h:350
int ffmpeg_parse_options(int argc, char **argv)
Definition: ffmpeg_opt.c:2490
int intra_dc_precision
precision of the intra DC coefficient - 8
AVRational frame_aspect_ratio
Definition: ffmpeg.h:333
static AVDictionary * strip_specifiers(AVDictionary *dict)
Definition: ffmpeg_opt.c:154
char * av_asprintf(const char *fmt,...)
Definition: avstring.c:112
AVDictionary * opts
Definition: ffmpeg.h:238
const AVOption * av_opt_find(void *obj, const char *name, const char *unit, int opt_flags, int search_flags)
Look for an option in an object.
Definition: opt.c:1223
static const char * subtitle_codec_name
Definition: ffplay.c:310
static int subtitle_disable
Definition: ffplay.c:283
int file_index
Definition: ffmpeg.h:61
int nb_audio_channel_maps
Definition: ffmpeg.h:106
unsigned int nb_streams
A list of all streams in the file.
Definition: avformat.h:991
int nb_attachments
Definition: ffmpeg.h:111
#define AV_LOG_VERBOSE
Definition: log.h:157
OptionGroup * groups
Definition: cmdutils.h:277
AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format.
static int opt_video_filters(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2271
int nb_output_files
Definition: ffmpeg.c:153
int rc_override_count
ratecontrol override, see RcOverride
size_t off
Definition: cmdutils.h:172
char * linklabel
Definition: ffmpeg.h:65
FFT buffer for g
Definition: stft_peak.m:17
int void avio_flush(AVIOContext *s)
Force flushing of buffered data to the output s.
Definition: aviobuf.c:193
audio channel layout utility functions
char filename[1024]
input or output filename
Definition: avformat.h:994
#define AV_TIME_BASE
Internal time base represented as integer.
Definition: avutil.h:196
#define FFMIN(a, b)
Definition: common.h:58
enum AVCodecID audio_codec_id
Forced audio codec_id.
Definition: avformat.h:1063
SpecifierOpt * audio_channels
Definition: ffmpeg.h:82
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition: avstring.c:212
static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
Definition: ffmpeg_opt.c:560
#define VSYNC_AUTO
Definition: ffmpeg.h:50
int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
int nb_audio_sample_rate
Definition: ffmpeg.h:85
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:538
static int opt_progress(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2536
int exit_on_error
Definition: ffmpeg_opt.c:82
int metadata_chapters_manual
Definition: ffmpeg.h:109
enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, const char *filename, const char *mime_type, enum AVMediaType type)
Guess the codec ID based upon muxer and filename.
struct OutputStream * ost
Definition: ffmpeg.h:192
ret
Definition: avfilter.c:821
int width
picture width / height.
AVBitStreamFilterContext * av_bitstream_filter_init(const char *name)
static int open_output_file(OptionsContext *o, const char *filename)
Definition: ffmpeg_opt.c:1560
SpecifierOpt * audio_sample_rate
Definition: ffmpeg.h:84
#define AVFMT_GLOBALHEADER
Format wants global header.
Definition: avformat.h:351
const char * name
Definition: avformat.h:378
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: error.h:110
SpecifierOpt * dump_attachment
Definition: ffmpeg.h:99
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
A list of option groups that all have the same group type (e.g.
Definition: cmdutils.h:274
int copy_ts
Definition: ffmpeg_opt.c:79
#define OPT_EXIT
Definition: cmdutils.h:157
static AVCodec * find_codec_or_die(const char *name, enum AVMediaType type, int encoder)
Definition: ffmpeg_opt.c:516
int nb_filtergraphs
Definition: ffmpeg.c:156
SpecifierOpt * metadata_map
Definition: ffmpeg.h:157
static int open_file(AVFormatContext *avf, unsigned fileno)
Definition: concatdec.c:126
#define OPT_INT64
Definition: cmdutils.h:156
#define AV_DICT_APPEND
If the entry already exists, append to it.
Definition: dict.h:76
int64_t max_frames
Definition: ffmpeg.h:325
#define AV_RL32
char * specifier
stream/chapter/program/...
Definition: cmdutils.h:134
float u
int audio_channels_mapped
Definition: ffmpeg.h:345
AVDictionary * metadata
Definition: avformat.h:711
Usually treated as AVMEDIA_TYPE_DATA.
Definition: avutil.h:142
Opaque data information usually sparse.
Definition: avutil.h:147
const AVClass * swr_get_class(void)
Get the AVClass for swrContext.
Definition: swresample.c:172
int opt_timelimit(void *optctx, const char *opt, const char *arg)
Limit the execution time.
Definition: cmdutils.c:949
SpecifierOpt * frame_sizes
Definition: ffmpeg.h:88
int stream_idx
Definition: ffmpeg.h:69
const AVCodecDescriptor * avcodec_descriptor_get_by_name(const char *name)
Definition: codec_desc.c:2585
AVFilterContext * filter_ctx
filter context associated to this input/output
Definition: avfilter.h:1128
int do_hex_dump
Definition: ffmpeg_opt.c:77
RcOverride * rc_override
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition: avformat.h:627
int do_pkt_dump
Definition: ffmpeg_opt.c:78
uint8_t * str
Definition: cmdutils.h:136
Stream structure.
Definition: avformat.h:643
const AVClass * avfilter_get_class(void)
Definition: avfilter.c:994
A linked-list of the inputs/outputs of the filter chain.
Definition: avfilter.h:1123
int64_t end
chapter start/end time in time_base units
Definition: avformat.h:921
int fix_sub_duration
Definition: ffmpeg.h:252
int av_opt_get_int(void *obj, const char *name, int search_flags, int64_t *out_val)
Definition: opt.c:687
#define VSYNC_DROP
Definition: ffmpeg.h:54
for k
int do_benchmark_all
Definition: ffmpeg_opt.c:76
NULL
Definition: eval.c:55
SpecifierOpt * frame_rates
Definition: ffmpeg.h:86
dest
Definition: start.py:60
int file_idx
Definition: ffmpeg.h:69
int ost_index
Definition: ffmpeg.h:370
struct InputStream * sync_ist
Definition: ffmpeg.h:318
enum AVMediaType codec_type
double ts_scale
Definition: ffmpeg.h:234
int64_t recording_time
Definition: ffmpeg.h:115
int chapters_input_file
Definition: ffmpeg.h:113
int64_t stop_time
Definition: ffmpeg.h:116
enum AVCodecID codec_id
static int intra_only
Definition: ffmpeg_opt.c:89
static int intra_dc_precision
Definition: ffmpeg_opt.c:93
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:202
char * av_strdup(const char *s)
Duplicate the string s.
Definition: mem.c:220
int stdin_interaction
Definition: ffmpeg_opt.c:85
int sample_rate
samples per second
AVIOContext * pb
I/O context.
Definition: avformat.h:977
Close file fclose(fid)
#define SET_DICT(type, meta, context, index)
int ist_index
Definition: ffmpeg.h:280
const char * graph_desc
Definition: ffmpeg.h:202
int guess_layout_max
Definition: ffmpeg.h:241
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodec *codec, enum AVPixelFormat target)
Definition: ffmpeg_filter.c:38
void avio_w8(AVIOContext *s, int b)
Definition: aviobuf.c:151
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:285
main external API structure.
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
int rate_emu
Definition: ffmpeg.h:95
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
int metadata_streams_manual
Definition: ffmpeg.h:108
const char * attachment_filename
Definition: ffmpeg.h:360
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> (&#39;D&#39;<<24) + (&#39;C&#39;<<16) + (&#39;B&#39;<<8) + &#39;A&#39;).
a very simple circular buffer FIFO implementation
void assert_avoptions(AVDictionary *m)
Definition: ffmpeg.c:510
int audio_disable
Definition: ffmpeg.h:123
void * buf
Definition: avisynth_c.h:594
int64_t input_ts_offset
Definition: ffmpeg.h:94
int audio_channels_map[SWR_CH_MAX]
Definition: ffmpeg.h:344
float audio_drift_threshold
Definition: ffmpeg_opt.c:67
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
Definition: ffmpeg_opt.c:2374
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition: dict.c:62
uint16_t * intra_matrix
custom intra quantization matrix
static int opt_map_channel(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:319
FILE * get_preset_file(char *filename, size_t filename_size, const char *preset_name, int is_path, const char *codec_name)
Get a file corresponding to a preset file.
Definition: cmdutils.c:1778
AVStream * st
Definition: ffmpeg.h:215
double value
Definition: eval.c:82
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:73
#define VSYNC_PASSTHROUGH
Definition: ffmpeg.h:51
Describe the class of an AVClass context structure.
Definition: log.h:50
int configure_filtergraph(FilterGraph *fg)
#define NTSC
Definition: bktr.c:66
OutputStream ** output_streams
Definition: ffmpeg.c:150
int index
Definition: gxfenc.c:89
int pad_idx
index of the filt_ctx pad to use for linking
Definition: avfilter.h:1131
static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2360
static char * get_ost_filters(OptionsContext *o, AVFormatContext *oc, OutputStream *ost)
Definition: ffmpeg_opt.c:1142
enum AVCodecID subtitle_codec
default subtitle codec
Definition: avformat.h:390
synthesis window for stochastic i
rational number numerator/denominator
Definition: rational.h:43
int file_index
Definition: ffmpeg.h:310
int metadata_global_manual
Definition: ffmpeg.h:107
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:282
int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration)
Parse a string specifying a time and return its corresponding value as a number of microseconds...
Definition: cmdutils.c:135
void * grow_array(void *array, int elem_size, int *size, int new_size)
Realloc array to hold new_size elements of elem_size.
Definition: cmdutils.c:1912
#define OPT_STRING
Definition: cmdutils.h:150
AVMediaType
Definition: avutil.h:141
static OutputStream * new_audio_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1309
int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
Definition: aviobuf.c:804
int shortest
Definition: ffmpeg.h:120
#define MAX_STREAMS
Definition: ffmpeg.h:56
const char * name
Name of the codec described by this descriptor.
#define snprintf
Definition: snprintf.h:34
int64_t ts_offset
Definition: ffmpeg.h:281
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
int audio_volume
Definition: ffmpeg_opt.c:71
misc parsing utilities
#define type
option
Definition: dnxhdenc.c:49
static int64_t recording_time
Definition: ffmpeg_opt.c:97
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes...
Definition: avstring.c:92
uint16_t * inter_matrix
custom inter quantization matrix
static int opt_channel_layout(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2306
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Seek to timestamp ts.
static int opt_audio_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:192
This struct describes the properties of a single codec described by an AVCodecID. ...
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max)
Parse a string and return its corresponding value as a double.
Definition: cmdutils.c:114
static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2119
char * name
unique name for this input/output in the list
Definition: avfilter.h:1125
int nb_audio_channels
Definition: ffmpeg.h:83
#define OPT_TIME
Definition: cmdutils.h:165
int source_index
Definition: ffmpeg.h:312
int copy_prior_start
Definition: ffmpeg.h:362
SpecifierOpt * metadata
Definition: ffmpeg.h:131
static AVCodec * choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st)
Definition: ffmpeg_opt.c:545
int global_quality
Global quality for codecs which cannot change it per frame.
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
static int flags
Definition: cpu.c:23
static OutputStream * new_video_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1166
static int opt_attach(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:311
static void parse_matrix_coeffs(uint16_t *dest, const char *str)
Definition: ffmpeg_opt.c:1096
int64_t start_time
Decoding: position of the first frame of the component, in AV_TIME_BASE fractional seconds...
Definition: avformat.h:1001
int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
Put a description of the AVERROR code errnum in errbuf.
Definition: error.c:53
#define OFFSET(x)
Definition: ffmpeg_opt.c:2553
int resample_sample_fmt
Definition: ffmpeg.h:247
static int opt_video_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2137
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok()...
Definition: avstring.c:183
int64_t start
Definition: avformat.h:921
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
char * forced_keyframes
Definition: ffmpeg.h:339
int nb_frame_rates
Definition: ffmpeg.h:87
#define OPT_BOOL
Definition: cmdutils.h:148
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
Definition: avstring.c:33
int resample_width
Definition: ffmpeg.h:244
float dts_error_threshold
Definition: ffmpeg_opt.c:69
#define CODEC_FLAG_EMU_EDGE
Don&#39;t draw edges.
Main libavformat public API header.
static uint8_t * get_line(AVIOContext *s)
Definition: ffmpeg_opt.c:904
void print_error(const char *filename, int err)
Print an error message to stderr, indicating filename and a human readable description of the error c...
Definition: cmdutils.c:982
preset
Definition: vf_curves.c:39
static int get_preset_file_2(const char *preset_name, const char *codec_name, AVIOContext **s)
Definition: ffmpeg_opt.c:923
struct FilterGraph * graph
Definition: ffmpeg.h:193
static uint8_t * read_file(const char *filename)
Definition: ffmpeg_opt.c:1114
uint64_t limit_filesize
Definition: ffmpeg.h:373
#define OPT_INT
Definition: cmdutils.h:153
static int opt_target(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1980
AVDictionary * codec_opts
Definition: cmdutils.c:68
AVIOContext * progress_avio
Definition: ffmpeg.c:134
AVDictionary * format_opts
Definition: cmdutils.h:264
static int opt_video_standard(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:186
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
int reinit_filters
Definition: ffmpeg.h:273
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:345
int nb_frame_sizes
Definition: ffmpeg.h:89
OptionGroupList * groups
Definition: cmdutils.h:284
OptionGroup * g
Definition: ffmpeg.h:74
#define VSYNC_CFR
Definition: ffmpeg.h:52
static int video_disable
Definition: ffplay.c:282
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
static double c[64]
int disposition
AV_DISPOSITION_* bit field.
Definition: avformat.h:700
OptionGroup global_opts
Definition: cmdutils.h:282
const char ** attachments
Definition: ffmpeg.h:110
#define AV_OPT_SEARCH_FAKE_OBJ
The obj passed to av_opt_find() is fake – only a double pointer to AVClass instead of a required poi...
Definition: opt.h:547
AVRational time_base
time base in which the start/end timestamps are specified
Definition: avformat.h:920
char * key
Definition: dict.h:81
int den
denominator
Definition: rational.h:45
int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec)
Set the fields of the given AVCodecContext to default values corresponding to the given codec (defaul...
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
AVFormatContext * ctx
Definition: ffmpeg.h:277
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
int stream_index
Definition: ffmpeg.h:62
AVCodec * enc
Definition: ffmpeg.h:324
int nb_metadata_map
Definition: ffmpeg.h:158
int frame_bits_per_raw_sample
Definition: ffmpeg_opt.c:86
#define GROW_ARRAY(array, nb_elems)
Definition: cmdutils.h:531
pixel format definitions
char * avfilter
Definition: ffmpeg.h:351
char * value
Definition: dict.h:82
int eof_reached
true if eof reached
Definition: avio.h:96
int len
static int opt_timecode(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2295
static void dump_attachment(AVStream *st, const char *filename)
Definition: ffmpeg_opt.c:684
int channels
number of audio channels
enum AVCodecID audio_codec
default audio codec
Definition: avformat.h:388
OptGroup
Definition: ffmpeg_opt.c:2447
int top_field_first
Definition: ffmpeg.h:331
printf("static const uint8_t my_array[100] = {\n")
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
static int video_discard
Definition: ffmpeg_opt.c:92
OutputFilter ** outputs
Definition: ffmpeg.h:209
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip please avoid problems through this extra level of scrutiny For cosmetics only commits you should e g by running git config global user name My Name git config global user email my email which is either set in your personal configuration file through git config core editor or set by one of the following environment VISUAL or EDITOR Log messages should be concise but descriptive Explain why you made a what you did will be obvious from the changes themselves most of the time Saying just bug fix or is bad Remember that people of varying skill levels look at and educate themselves while reading through your code Don t include filenames in log Git provides that information Possibly make the commit message have a descriptive first line
Definition: git-howto.txt:153
The official guide to swscale for confused that is
Definition: swscale.txt:2
InputFile ** input_files
Definition: ffmpeg.c:147
SpecifierOpt * max_frames
Definition: ffmpeg.h:133
uint64_t av_get_channel_layout(const char *name)
Return a channel layout id that matches name, or 0 if no match is found.
int disabled
Definition: ffmpeg.h:60
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:169
#define PAL
Definition: bktr.c:64
AVFormatContext * ctx
Definition: ffmpeg.h:368
static int opt_streamid(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1408
void show_help_children(const AVClass *class, int flags)
Show help for all options with given flags in class and all its children.
Definition: cmdutils.c:176
union SpecifierOpt::@0 u
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:700
AVDictionary * codec_opts
Definition: cmdutils.h:263
int64_t duration
Decoding: duration of the stream, in AV_TIME_BASE fractional seconds.
Definition: avformat.h:1009
#define AV_LOG_INFO
Definition: log.h:156
int read_yesno(void)
Return a positive value if a line read from standard input starts with [yY], otherwise return 0...
Definition: cmdutils.c:1725
static const char * video_codec_name
Definition: ffplay.c:311
float dts_delta_threshold
Definition: ffmpeg_opt.c:68
union OptionDef::@1 u
void INT64 INT64 count
Definition: avisynth_c.h:594
void INT64 start
Definition: avisynth_c.h:594
int sync_stream_index
Definition: ffmpeg.h:64
#define AV_DICT_IGNORE_SUFFIX
Definition: dict.h:68
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=av_sample_fmt_is_planar(in_fmt);out_planar=av_sample_fmt_is_planar(out_fmt);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> out
#define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)
Definition: ffmpeg_opt.c:56
OutputFile ** output_files
Definition: ffmpeg.c:152
static int opt_default_new(OptionsContext *o, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2155
static int no_file_overwrite
Definition: ffmpeg_opt.c:91
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
Definition: pixdesc.c:1712
int discard
Definition: ffmpeg.h:216
static int opt_map(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:216
#define OPT_PERFILE
Definition: cmdutils.h:159
#define OPT_INPUT
Definition: cmdutils.h:167
static int opt_audio_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2143
#define MKTAG(a, b, c, d)
Definition: common.h:282
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:702
int index
Definition: ffmpeg.h:311
static OutputStream * new_attachment_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1372
struct SwsContext * sws_opts
Definition: cmdutils.h:266
uint64_t resample_channel_layout
Definition: ffmpeg.h:250
static void uninit_options(OptionsContext *o, int is_input)
Definition: ffmpeg_opt.c:99
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
Definition: aviobuf.c:839
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
Definition: opt.c:252
enum AVSampleFormat av_get_sample_fmt(const char *name)
Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE on error.
Definition: samplefmt.c:54
const AVClass * sws_get_class(void)
Get the AVClass for swsContext.
const char program_name[]
program name, defined by the program for show_version().
Definition: ffmpeg.c:106
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:190
#define AVFMT_NEEDNUMBER
Needs &#39;d&#39; in filename.
Definition: avformat.h:346
InputStream ** input_streams
Definition: ffmpeg.c:145
discard nothing
int subtitle_disable
Definition: ffmpeg.h:124
static OutputStream * new_data_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1359