FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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_program(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 }
65 
66 const HWAccel hwaccels[] = {
67 #if HAVE_VDPAU_X11
69 #endif
70 #if HAVE_DXVA2_LIB
72 #endif
73 #if CONFIG_VDA
74  { "vda", vda_init, HWACCEL_VDA, AV_PIX_FMT_VDA },
75 #endif
76  { 0 },
77 };
78 
81 
84 float dts_error_threshold = 3600*30;
85 
86 int audio_volume = 256;
91 int do_benchmark = 0;
93 int do_hex_dump = 0;
94 int do_pkt_dump = 0;
95 int copy_ts = 0;
96 int start_at_zero = 0;
97 int copy_tb = -1;
98 int debug_ts = 0;
99 int exit_on_error = 0;
100 int print_stats = -1;
101 int qp_hist = 0;
104 float max_error_rate = 2.0/3;
105 
106 
107 static int intra_only = 0;
108 static int file_overwrite = 0;
109 static int no_file_overwrite = 0;
110 static int do_psnr = 0;
111 static int input_sync;
112 static int override_ffserver = 0;
114 static int ignore_unknown_streams = 0;
115 static int copy_unknown_streams = 0;
116 
118 {
119  const OptionDef *po = options;
120  int i;
121 
122  /* all OPT_SPEC and OPT_STRING can be freed in generic way */
123  while (po->name) {
124  void *dst = (uint8_t*)o + po->u.off;
125 
126  if (po->flags & OPT_SPEC) {
127  SpecifierOpt **so = dst;
128  int i, *count = (int*)(so + 1);
129  for (i = 0; i < *count; i++) {
130  av_freep(&(*so)[i].specifier);
131  if (po->flags & OPT_STRING)
132  av_freep(&(*so)[i].u.str);
133  }
134  av_freep(so);
135  *count = 0;
136  } else if (po->flags & OPT_OFFSET && po->flags & OPT_STRING)
137  av_freep(dst);
138  po++;
139  }
140 
141  for (i = 0; i < o->nb_stream_maps; i++)
143  av_freep(&o->stream_maps);
145  av_freep(&o->streamid_map);
146  av_freep(&o->attachments);
147 }
148 
150 {
151  memset(o, 0, sizeof(*o));
152 
153  o->stop_time = INT64_MAX;
154  o->mux_max_delay = 0.7;
156  o->recording_time = INT64_MAX;
157  o->limit_filesize = UINT64_MAX;
158  o->chapters_input_file = INT_MAX;
159  o->accurate_seek = 1;
160 }
161 
162 /* return a copy of the input with the stream specifiers removed from the keys */
164 {
165  AVDictionaryEntry *e = NULL;
166  AVDictionary *ret = NULL;
167 
168  while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX))) {
169  char *p = strchr(e->key, ':');
170 
171  if (p)
172  *p = 0;
173  av_dict_set(&ret, e->key, e->value, 0);
174  if (p)
175  *p = ':';
176  }
177  return ret;
178 }
179 
180 static int opt_sameq(void *optctx, const char *opt, const char *arg)
181 {
182  av_log(NULL, AV_LOG_ERROR, "Option '%s' was removed. "
183  "If you are looking for an option to preserve the quality (which is not "
184  "what -%s was for), use -qscale 0 or an equivalent quality factor option.\n",
185  opt, opt);
186  return AVERROR(EINVAL);
187 }
188 
189 static int opt_video_channel(void *optctx, const char *opt, const char *arg)
190 {
191  av_log(NULL, AV_LOG_WARNING, "This option is deprecated, use -channel.\n");
192  return opt_default(optctx, "channel", arg);
193 }
194 
195 static int opt_video_standard(void *optctx, const char *opt, const char *arg)
196 {
197  av_log(NULL, AV_LOG_WARNING, "This option is deprecated, use -standard.\n");
198  return opt_default(optctx, "standard", arg);
199 }
200 
201 static int opt_audio_codec(void *optctx, const char *opt, const char *arg)
202 {
203  OptionsContext *o = optctx;
204  return parse_option(o, "codec:a", arg, options);
205 }
206 
207 static int opt_video_codec(void *optctx, const char *opt, const char *arg)
208 {
209  OptionsContext *o = optctx;
210  return parse_option(o, "codec:v", arg, options);
211 }
212 
213 static int opt_subtitle_codec(void *optctx, const char *opt, const char *arg)
214 {
215  OptionsContext *o = optctx;
216  return parse_option(o, "codec:s", arg, options);
217 }
218 
219 static int opt_data_codec(void *optctx, const char *opt, const char *arg)
220 {
221  OptionsContext *o = optctx;
222  return parse_option(o, "codec:d", arg, options);
223 }
224 
225 static int opt_map(void *optctx, const char *opt, const char *arg)
226 {
227  OptionsContext *o = optctx;
228  StreamMap *m = NULL;
229  int i, negative = 0, file_idx;
230  int sync_file_idx = -1, sync_stream_idx = 0;
231  char *p, *sync;
232  char *map;
233 
234  if (*arg == '-') {
235  negative = 1;
236  arg++;
237  }
238  map = av_strdup(arg);
239  if (!map)
240  return AVERROR(ENOMEM);
241 
242  /* parse sync stream first, just pick first matching stream */
243  if (sync = strchr(map, ',')) {
244  *sync = 0;
245  sync_file_idx = strtol(sync + 1, &sync, 0);
246  if (sync_file_idx >= nb_input_files || sync_file_idx < 0) {
247  av_log(NULL, AV_LOG_FATAL, "Invalid sync file index: %d.\n", sync_file_idx);
248  exit_program(1);
249  }
250  if (*sync)
251  sync++;
252  for (i = 0; i < input_files[sync_file_idx]->nb_streams; i++)
253  if (check_stream_specifier(input_files[sync_file_idx]->ctx,
254  input_files[sync_file_idx]->ctx->streams[i], sync) == 1) {
255  sync_stream_idx = i;
256  break;
257  }
258  if (i == input_files[sync_file_idx]->nb_streams) {
259  av_log(NULL, AV_LOG_FATAL, "Sync stream specification in map %s does not "
260  "match any streams.\n", arg);
261  exit_program(1);
262  }
263  }
264 
265 
266  if (map[0] == '[') {
267  /* this mapping refers to lavfi output */
268  const char *c = map + 1;
270  m = &o->stream_maps[o->nb_stream_maps - 1];
271  m->linklabel = av_get_token(&c, "]");
272  if (!m->linklabel) {
273  av_log(NULL, AV_LOG_ERROR, "Invalid output link label: %s.\n", map);
274  exit_program(1);
275  }
276  } else {
277  file_idx = strtol(map, &p, 0);
278  if (file_idx >= nb_input_files || file_idx < 0) {
279  av_log(NULL, AV_LOG_FATAL, "Invalid input file index: %d.\n", file_idx);
280  exit_program(1);
281  }
282  if (negative)
283  /* disable some already defined maps */
284  for (i = 0; i < o->nb_stream_maps; i++) {
285  m = &o->stream_maps[i];
286  if (file_idx == m->file_index &&
289  *p == ':' ? p + 1 : p) > 0)
290  m->disabled = 1;
291  }
292  else
293  for (i = 0; i < input_files[file_idx]->nb_streams; i++) {
294  if (check_stream_specifier(input_files[file_idx]->ctx, input_files[file_idx]->ctx->streams[i],
295  *p == ':' ? p + 1 : p) <= 0)
296  continue;
298  m = &o->stream_maps[o->nb_stream_maps - 1];
299 
300  m->file_index = file_idx;
301  m->stream_index = i;
302 
303  if (sync_file_idx >= 0) {
304  m->sync_file_index = sync_file_idx;
305  m->sync_stream_index = sync_stream_idx;
306  } else {
307  m->sync_file_index = file_idx;
308  m->sync_stream_index = i;
309  }
310  }
311  }
312 
313  if (!m) {
314  av_log(NULL, AV_LOG_FATAL, "Stream map '%s' matches no streams.\n", arg);
315  exit_program(1);
316  }
317 
318  av_freep(&map);
319  return 0;
320 }
321 
322 static int opt_attach(void *optctx, const char *opt, const char *arg)
323 {
324  OptionsContext *o = optctx;
326  o->attachments[o->nb_attachments - 1] = arg;
327  return 0;
328 }
329 
330 static int opt_map_channel(void *optctx, const char *opt, const char *arg)
331 {
332  OptionsContext *o = optctx;
333  int n;
334  AVStream *st;
336 
339 
340  /* muted channel syntax */
341  n = sscanf(arg, "%d:%d.%d", &m->channel_idx, &m->ofile_idx, &m->ostream_idx);
342  if ((n == 1 || n == 3) && m->channel_idx == -1) {
343  m->file_idx = m->stream_idx = -1;
344  if (n == 1)
345  m->ofile_idx = m->ostream_idx = -1;
346  return 0;
347  }
348 
349  /* normal syntax */
350  n = sscanf(arg, "%d.%d.%d:%d.%d",
351  &m->file_idx, &m->stream_idx, &m->channel_idx,
352  &m->ofile_idx, &m->ostream_idx);
353 
354  if (n != 3 && n != 5) {
355  av_log(NULL, AV_LOG_FATAL, "Syntax error, mapchan usage: "
356  "[file.stream.channel|-1][:syncfile:syncstream]\n");
357  exit_program(1);
358  }
359 
360  if (n != 5) // only file.stream.channel specified
361  m->ofile_idx = m->ostream_idx = -1;
362 
363  /* check input */
364  if (m->file_idx < 0 || m->file_idx >= nb_input_files) {
365  av_log(NULL, AV_LOG_FATAL, "mapchan: invalid input file index: %d\n",
366  m->file_idx);
367  exit_program(1);
368  }
369  if (m->stream_idx < 0 ||
371  av_log(NULL, AV_LOG_FATAL, "mapchan: invalid input file stream index #%d.%d\n",
372  m->file_idx, m->stream_idx);
373  exit_program(1);
374  }
375  st = input_files[m->file_idx]->ctx->streams[m->stream_idx];
376  if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO) {
377  av_log(NULL, AV_LOG_FATAL, "mapchan: stream #%d.%d is not an audio stream.\n",
378  m->file_idx, m->stream_idx);
379  exit_program(1);
380  }
381  if (m->channel_idx < 0 || m->channel_idx >= st->codec->channels) {
382  av_log(NULL, AV_LOG_FATAL, "mapchan: invalid audio channel #%d.%d.%d\n",
383  m->file_idx, m->stream_idx, m->channel_idx);
384  exit_program(1);
385  }
386  return 0;
387 }
388 
389 static int opt_sdp_file(void *optctx, const char *opt, const char *arg)
390 {
392  sdp_filename = av_strdup(arg);
393  return 0;
394 }
395 
396 /**
397  * Parse a metadata specifier passed as 'arg' parameter.
398  * @param arg metadata string to parse
399  * @param type metadata type is written here -- g(lobal)/s(tream)/c(hapter)/p(rogram)
400  * @param index for type c/p, chapter/program index is written here
401  * @param stream_spec for type s, the stream specifier is written here
402  */
403 static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
404 {
405  if (*arg) {
406  *type = *arg;
407  switch (*arg) {
408  case 'g':
409  break;
410  case 's':
411  if (*(++arg) && *arg != ':') {
412  av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\n", arg);
413  exit_program(1);
414  }
415  *stream_spec = *arg == ':' ? arg + 1 : "";
416  break;
417  case 'c':
418  case 'p':
419  if (*(++arg) == ':')
420  *index = strtol(++arg, NULL, 0);
421  break;
422  default:
423  av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\n", *arg);
424  exit_program(1);
425  }
426  } else
427  *type = 'g';
428 }
429 
430 static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
431 {
432  AVDictionary **meta_in = NULL;
433  AVDictionary **meta_out = NULL;
434  int i, ret = 0;
435  char type_in, type_out;
436  const char *istream_spec = NULL, *ostream_spec = NULL;
437  int idx_in = 0, idx_out = 0;
438 
439  parse_meta_type(inspec, &type_in, &idx_in, &istream_spec);
440  parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
441 
442  if (!ic) {
443  if (type_out == 'g' || !*outspec)
444  o->metadata_global_manual = 1;
445  if (type_out == 's' || !*outspec)
447  if (type_out == 'c' || !*outspec)
449  return 0;
450  }
451 
452  if (type_in == 'g' || type_out == 'g')
453  o->metadata_global_manual = 1;
454  if (type_in == 's' || type_out == 's')
456  if (type_in == 'c' || type_out == 'c')
458 
459  /* ic is NULL when just disabling automatic mappings */
460  if (!ic)
461  return 0;
462 
463 #define METADATA_CHECK_INDEX(index, nb_elems, desc)\
464  if ((index) < 0 || (index) >= (nb_elems)) {\
465  av_log(NULL, AV_LOG_FATAL, "Invalid %s index %d while processing metadata maps.\n",\
466  (desc), (index));\
467  exit_program(1);\
468  }
469 
470 #define SET_DICT(type, meta, context, index)\
471  switch (type) {\
472  case 'g':\
473  meta = &context->metadata;\
474  break;\
475  case 'c':\
476  METADATA_CHECK_INDEX(index, context->nb_chapters, "chapter")\
477  meta = &context->chapters[index]->metadata;\
478  break;\
479  case 'p':\
480  METADATA_CHECK_INDEX(index, context->nb_programs, "program")\
481  meta = &context->programs[index]->metadata;\
482  break;\
483  case 's':\
484  break; /* handled separately below */ \
485  default: av_assert0(0);\
486  }\
487 
488  SET_DICT(type_in, meta_in, ic, idx_in);
489  SET_DICT(type_out, meta_out, oc, idx_out);
490 
491  /* for input streams choose first matching stream */
492  if (type_in == 's') {
493  for (i = 0; i < ic->nb_streams; i++) {
494  if ((ret = check_stream_specifier(ic, ic->streams[i], istream_spec)) > 0) {
495  meta_in = &ic->streams[i]->metadata;
496  break;
497  } else if (ret < 0)
498  exit_program(1);
499  }
500  if (!meta_in) {
501  av_log(NULL, AV_LOG_FATAL, "Stream specifier %s does not match any streams.\n", istream_spec);
502  exit_program(1);
503  }
504  }
505 
506  if (type_out == 's') {
507  for (i = 0; i < oc->nb_streams; i++) {
508  if ((ret = check_stream_specifier(oc, oc->streams[i], ostream_spec)) > 0) {
509  meta_out = &oc->streams[i]->metadata;
510  av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
511  } else if (ret < 0)
512  exit_program(1);
513  }
514  } else
515  av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
516 
517  return 0;
518 }
519 
520 static int opt_recording_timestamp(void *optctx, const char *opt, const char *arg)
521 {
522  OptionsContext *o = optctx;
523  char buf[128];
524  int64_t recording_timestamp = parse_time_or_die(opt, arg, 0) / 1E6;
525  struct tm time = *gmtime((time_t*)&recording_timestamp);
526  if (!strftime(buf, sizeof(buf), "creation_time=%Y-%m-%dT%H:%M:%S%z", &time))
527  return -1;
528  parse_option(o, "metadata", buf, options);
529 
530  av_log(NULL, AV_LOG_WARNING, "%s is deprecated, set the 'creation_time' metadata "
531  "tag instead.\n", opt);
532  return 0;
533 }
534 
535 static AVCodec *find_codec_or_die(const char *name, enum AVMediaType type, int encoder)
536 {
537  const AVCodecDescriptor *desc;
538  const char *codec_string = encoder ? "encoder" : "decoder";
539  AVCodec *codec;
540 
541  codec = encoder ?
544 
545  if (!codec && (desc = avcodec_descriptor_get_by_name(name))) {
546  codec = encoder ? avcodec_find_encoder(desc->id) :
547  avcodec_find_decoder(desc->id);
548  if (codec)
549  av_log(NULL, AV_LOG_VERBOSE, "Matched %s '%s' for codec '%s'.\n",
550  codec_string, codec->name, desc->name);
551  }
552 
553  if (!codec) {
554  av_log(NULL, AV_LOG_FATAL, "Unknown %s '%s'\n", codec_string, name);
555  exit_program(1);
556  }
557  if (codec->type != type) {
558  av_log(NULL, AV_LOG_FATAL, "Invalid %s type '%s'\n", codec_string, name);
559  exit_program(1);
560  }
561  return codec;
562 }
563 
565 {
566  char *codec_name = NULL;
567 
568  MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st);
569  if (codec_name) {
570  AVCodec *codec = find_codec_or_die(codec_name, st->codec->codec_type, 0);
571  st->codec->codec_id = codec->id;
572  return codec;
573  } else
574  return avcodec_find_decoder(st->codec->codec_id);
575 }
576 
577 /* Add all the streams from the given input file to the global
578  * list of input streams. */
580 {
581  int i, ret;
582 
583  for (i = 0; i < ic->nb_streams; i++) {
584  AVStream *st = ic->streams[i];
585  AVCodecContext *dec = st->codec;
586  InputStream *ist = av_mallocz(sizeof(*ist));
587  char *framerate = NULL, *hwaccel = NULL, *hwaccel_device = NULL;
588  char *codec_tag = NULL;
589  char *next;
590  char *discard_str = NULL;
591  const AVOption *discard_opt = av_opt_find(dec, "skip_frame", NULL, 0, 0);
592 
593  if (!ist)
594  exit_program(1);
595 
597  input_streams[nb_input_streams - 1] = ist;
598 
599  ist->st = st;
600  ist->file_index = nb_input_files;
601  ist->discard = 1;
602  st->discard = AVDISCARD_ALL;
603 
604  ist->ts_scale = 1.0;
605  MATCH_PER_STREAM_OPT(ts_scale, dbl, ist->ts_scale, ic, st);
606 
607  ist->autorotate = 1;
608  MATCH_PER_STREAM_OPT(autorotate, i, ist->autorotate, ic, st);
609 
610  MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, ic, st);
611  if (codec_tag) {
612  uint32_t tag = strtol(codec_tag, &next, 0);
613  if (*next)
614  tag = AV_RL32(codec_tag);
615  st->codec->codec_tag = tag;
616  }
617 
618  ist->dec = choose_decoder(o, ic, st);
619  ist->decoder_opts = filter_codec_opts(o->g->codec_opts, ist->st->codec->codec_id, ic, st, ist->dec);
620 
621  ist->reinit_filters = -1;
622  MATCH_PER_STREAM_OPT(reinit_filters, i, ist->reinit_filters, ic, st);
623 
624  MATCH_PER_STREAM_OPT(discard, str, discard_str, ic, st);
626  if (discard_str && av_opt_eval_int(dec, discard_opt, discard_str, &ist->user_set_discard) < 0) {
627  av_log(NULL, AV_LOG_ERROR, "Error parsing discard %s.\n",
628  discard_str);
629  exit_program(1);
630  }
631 
633 
634  ist->dec_ctx = avcodec_alloc_context3(ist->dec);
635  if (!ist->dec_ctx) {
636  av_log(NULL, AV_LOG_ERROR, "Error allocating the decoder context.\n");
637  exit_program(1);
638  }
639 
640  ret = avcodec_copy_context(ist->dec_ctx, dec);
641  if (ret < 0) {
642  av_log(NULL, AV_LOG_ERROR, "Error initializing the decoder context.\n");
643  exit_program(1);
644  }
645 
646  switch (dec->codec_type) {
647  case AVMEDIA_TYPE_VIDEO:
648  if(!ist->dec)
649  ist->dec = avcodec_find_decoder(dec->codec_id);
650  if (av_codec_get_lowres(dec)) {
651  dec->flags |= CODEC_FLAG_EMU_EDGE;
652  }
653 
654  ist->resample_height = ist->dec_ctx->height;
655  ist->resample_width = ist->dec_ctx->width;
656  ist->resample_pix_fmt = ist->dec_ctx->pix_fmt;
657 
658  MATCH_PER_STREAM_OPT(frame_rates, str, framerate, ic, st);
659  if (framerate && av_parse_video_rate(&ist->framerate,
660  framerate) < 0) {
661  av_log(NULL, AV_LOG_ERROR, "Error parsing framerate %s.\n",
662  framerate);
663  exit_program(1);
664  }
665 
666  ist->top_field_first = -1;
667  MATCH_PER_STREAM_OPT(top_field_first, i, ist->top_field_first, ic, st);
668 
669  MATCH_PER_STREAM_OPT(hwaccels, str, hwaccel, ic, st);
670  if (hwaccel) {
671  if (!strcmp(hwaccel, "none"))
672  ist->hwaccel_id = HWACCEL_NONE;
673  else if (!strcmp(hwaccel, "auto"))
674  ist->hwaccel_id = HWACCEL_AUTO;
675  else {
676  int i;
677  for (i = 0; hwaccels[i].name; i++) {
678  if (!strcmp(hwaccels[i].name, hwaccel)) {
679  ist->hwaccel_id = hwaccels[i].id;
680  break;
681  }
682  }
683 
684  if (!ist->hwaccel_id) {
685  av_log(NULL, AV_LOG_FATAL, "Unrecognized hwaccel: %s.\n",
686  hwaccel);
687  av_log(NULL, AV_LOG_FATAL, "Supported hwaccels: ");
688  for (i = 0; hwaccels[i].name; i++)
689  av_log(NULL, AV_LOG_FATAL, "%s ", hwaccels[i].name);
690  av_log(NULL, AV_LOG_FATAL, "\n");
691  exit_program(1);
692  }
693  }
694  }
695 
696  MATCH_PER_STREAM_OPT(hwaccel_devices, str, hwaccel_device, ic, st);
697  if (hwaccel_device) {
698  ist->hwaccel_device = av_strdup(hwaccel_device);
699  if (!ist->hwaccel_device)
700  exit_program(1);
701  }
703 
704  break;
705  case AVMEDIA_TYPE_AUDIO:
706  ist->guess_layout_max = INT_MAX;
707  MATCH_PER_STREAM_OPT(guess_layout_max, i, ist->guess_layout_max, ic, st);
709 
712  ist->resample_channels = ist->dec_ctx->channels;
714 
715  break;
716  case AVMEDIA_TYPE_DATA:
717  case AVMEDIA_TYPE_SUBTITLE: {
718  char *canvas_size = NULL;
719  if(!ist->dec)
720  ist->dec = avcodec_find_decoder(dec->codec_id);
721  MATCH_PER_STREAM_OPT(fix_sub_duration, i, ist->fix_sub_duration, ic, st);
722  MATCH_PER_STREAM_OPT(canvas_sizes, str, canvas_size, ic, st);
723  if (canvas_size &&
724  av_parse_video_size(&ist->dec_ctx->width, &ist->dec_ctx->height, canvas_size) < 0) {
725  av_log(NULL, AV_LOG_FATAL, "Invalid canvas size: %s.\n", canvas_size);
726  exit_program(1);
727  }
728  break;
729  }
732  break;
733  default:
734  abort();
735  }
736  }
737 }
738 
739 static void assert_file_overwrite(const char *filename)
740 {
742  fprintf(stderr, "Error, both -y and -n supplied. Exiting.\n");
743  exit_program(1);
744  }
745 
746  if (!file_overwrite) {
747  const char *proto_name = avio_find_protocol_name(filename);
748  if (proto_name && !strcmp(proto_name, "file") && avio_check(filename, 0) == 0) {
750  fprintf(stderr,"File '%s' already exists. Overwrite ? [y/N] ", filename);
751  fflush(stderr);
752  term_exit();
753  signal(SIGINT, SIG_DFL);
754  if (!read_yesno()) {
755  av_log(NULL, AV_LOG_FATAL, "Not overwriting - exiting\n");
756  exit_program(1);
757  }
758  term_init();
759  }
760  else {
761  av_log(NULL, AV_LOG_FATAL, "File '%s' already exists. Exiting.\n", filename);
762  exit_program(1);
763  }
764  }
765  }
766 }
767 
768 static void dump_attachment(AVStream *st, const char *filename)
769 {
770  int ret;
771  AVIOContext *out = NULL;
773 
774  if (!st->codec->extradata_size) {
775  av_log(NULL, AV_LOG_WARNING, "No extradata to dump in stream #%d:%d.\n",
776  nb_input_files - 1, st->index);
777  return;
778  }
779  if (!*filename && (e = av_dict_get(st->metadata, "filename", NULL, 0)))
780  filename = e->value;
781  if (!*filename) {
782  av_log(NULL, AV_LOG_FATAL, "No filename specified and no 'filename' tag"
783  "in stream #%d:%d.\n", nb_input_files - 1, st->index);
784  exit_program(1);
785  }
786 
787  assert_file_overwrite(filename);
788 
789  if ((ret = avio_open2(&out, filename, AVIO_FLAG_WRITE, &int_cb, NULL)) < 0) {
790  av_log(NULL, AV_LOG_FATAL, "Could not open file %s for writing.\n",
791  filename);
792  exit_program(1);
793  }
794 
795  avio_write(out, st->codec->extradata, st->codec->extradata_size);
796  avio_flush(out);
797  avio_close(out);
798 }
799 
800 static int open_input_file(OptionsContext *o, const char *filename)
801 {
802  InputFile *f;
803  AVFormatContext *ic;
805  int err, i, ret;
806  int64_t timestamp;
807  AVDictionary **opts;
808  AVDictionary *unused_opts = NULL;
809  AVDictionaryEntry *e = NULL;
810  int orig_nb_streams; // number of streams before avformat_find_stream_info
811  char * video_codec_name = NULL;
812  char * audio_codec_name = NULL;
813  char *subtitle_codec_name = NULL;
814  char * data_codec_name = NULL;
815  int scan_all_pmts_set = 0;
816 
817  if (o->format) {
818  if (!(file_iformat = av_find_input_format(o->format))) {
819  av_log(NULL, AV_LOG_FATAL, "Unknown input format: '%s'\n", o->format);
820  exit_program(1);
821  }
822  }
823 
824  if (!strcmp(filename, "-"))
825  filename = "pipe:";
826 
827  stdin_interaction &= strncmp(filename, "pipe:", 5) &&
828  strcmp(filename, "/dev/stdin");
829 
830  /* get default parameters from command line */
831  ic = avformat_alloc_context();
832  if (!ic) {
833  print_error(filename, AVERROR(ENOMEM));
834  exit_program(1);
835  }
836  if (o->nb_audio_sample_rate) {
837  av_dict_set_int(&o->g->format_opts, "sample_rate", o->audio_sample_rate[o->nb_audio_sample_rate - 1].u.i, 0);
838  }
839  if (o->nb_audio_channels) {
840  /* because we set audio_channels based on both the "ac" and
841  * "channel_layout" options, we need to check that the specified
842  * demuxer actually has the "channels" option before setting it */
843  if (file_iformat && file_iformat->priv_class &&
844  av_opt_find(&file_iformat->priv_class, "channels", NULL, 0,
846  av_dict_set_int(&o->g->format_opts, "channels", o->audio_channels[o->nb_audio_channels - 1].u.i, 0);
847  }
848  }
849  if (o->nb_frame_rates) {
850  /* set the format-level framerate option;
851  * this is important for video grabbers, e.g. x11 */
852  if (file_iformat && file_iformat->priv_class &&
853  av_opt_find(&file_iformat->priv_class, "framerate", NULL, 0,
855  av_dict_set(&o->g->format_opts, "framerate",
856  o->frame_rates[o->nb_frame_rates - 1].u.str, 0);
857  }
858  }
859  if (o->nb_frame_sizes) {
860  av_dict_set(&o->g->format_opts, "video_size", o->frame_sizes[o->nb_frame_sizes - 1].u.str, 0);
861  }
862  if (o->nb_frame_pix_fmts)
863  av_dict_set(&o->g->format_opts, "pixel_format", o->frame_pix_fmts[o->nb_frame_pix_fmts - 1].u.str, 0);
864 
865  MATCH_PER_TYPE_OPT(codec_names, str, video_codec_name, ic, "v");
866  MATCH_PER_TYPE_OPT(codec_names, str, audio_codec_name, ic, "a");
867  MATCH_PER_TYPE_OPT(codec_names, str, subtitle_codec_name, ic, "s");
868  MATCH_PER_TYPE_OPT(codec_names, str, data_codec_name, ic, "d");
869 
870  ic->video_codec_id = video_codec_name ?
871  find_codec_or_die(video_codec_name , AVMEDIA_TYPE_VIDEO , 0)->id : AV_CODEC_ID_NONE;
872  ic->audio_codec_id = audio_codec_name ?
873  find_codec_or_die(audio_codec_name , AVMEDIA_TYPE_AUDIO , 0)->id : AV_CODEC_ID_NONE;
874  ic->subtitle_codec_id= subtitle_codec_name ?
875  find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0)->id : AV_CODEC_ID_NONE;
876  ic->data_codec_id = data_codec_name ?
877  find_codec_or_die(data_codec_name, AVMEDIA_TYPE_DATA, 0)->id : AV_CODEC_ID_NONE;
878 
879  if (video_codec_name)
880  av_format_set_video_codec (ic, find_codec_or_die(video_codec_name , AVMEDIA_TYPE_VIDEO , 0));
881  if (audio_codec_name)
882  av_format_set_audio_codec (ic, find_codec_or_die(audio_codec_name , AVMEDIA_TYPE_AUDIO , 0));
883  if (subtitle_codec_name)
885  if (data_codec_name)
887 
888  ic->flags |= AVFMT_FLAG_NONBLOCK;
890 
891  if (!av_dict_get(o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
892  av_dict_set(&o->g->format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
893  scan_all_pmts_set = 1;
894  }
895  /* open the input file with generic avformat function */
896  err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts);
897  if (err < 0) {
898  print_error(filename, err);
899  exit_program(1);
900  }
901  if (scan_all_pmts_set)
902  av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
905 
906  /* apply forced codec ids */
907  for (i = 0; i < ic->nb_streams; i++)
908  choose_decoder(o, ic, ic->streams[i]);
909 
910  /* Set AVCodecContext options for avformat_find_stream_info */
911  opts = setup_find_stream_info_opts(ic, o->g->codec_opts);
912  orig_nb_streams = ic->nb_streams;
913 
914  /* If not enough info to get the stream parameters, we decode the
915  first frames to get it. (used in mpeg case for example) */
916  ret = avformat_find_stream_info(ic, opts);
917  if (ret < 0) {
918  av_log(NULL, AV_LOG_FATAL, "%s: could not find codec parameters\n", filename);
919  if (ic->nb_streams == 0) {
921  exit_program(1);
922  }
923  }
924 
925  timestamp = (o->start_time == AV_NOPTS_VALUE) ? 0 : o->start_time;
926  /* add the stream start time */
928  timestamp += ic->start_time;
929 
930  /* if seeking requested, we execute it */
931  if (o->start_time != AV_NOPTS_VALUE) {
932  int64_t seek_timestamp = timestamp;
933 
934  if (!(ic->iformat->flags & AVFMT_SEEK_TO_PTS)) {
935  int dts_heuristic = 0;
936  for (i=0; i<ic->nb_streams; i++) {
937  AVCodecContext *avctx = ic->streams[i]->codec;
938  if (avctx->has_b_frames)
939  dts_heuristic = 1;
940  }
941  if (dts_heuristic) {
942  seek_timestamp -= 3*AV_TIME_BASE / 23;
943  }
944  }
945  ret = avformat_seek_file(ic, -1, INT64_MIN, seek_timestamp, seek_timestamp, 0);
946  if (ret < 0) {
947  av_log(NULL, AV_LOG_WARNING, "%s: could not seek to position %0.3f\n",
948  filename, (double)timestamp / AV_TIME_BASE);
949  }
950  }
951 
952  /* update the current parameters so that they match the one of the input stream */
953  add_input_streams(o, ic);
954 
955  /* dump the file content */
956  av_dump_format(ic, nb_input_files, filename, 0);
957 
959  f = av_mallocz(sizeof(*f));
960  if (!f)
961  exit_program(1);
962  input_files[nb_input_files - 1] = f;
963 
964  f->ctx = ic;
966  f->start_time = o->start_time;
969  f->ts_offset = o->input_ts_offset - (copy_ts ? (start_at_zero && ic->start_time != AV_NOPTS_VALUE ? ic->start_time : 0) : timestamp);
970  f->nb_streams = ic->nb_streams;
971  f->rate_emu = o->rate_emu;
973 #if HAVE_PTHREADS
974  f->thread_queue_size = o->thread_queue_size > 0 ? o->thread_queue_size : 8;
975 #endif
976 
977  /* check if all codec options have been used */
978  unused_opts = strip_specifiers(o->g->codec_opts);
979  for (i = f->ist_index; i < nb_input_streams; i++) {
980  e = NULL;
981  while ((e = av_dict_get(input_streams[i]->decoder_opts, "", e,
983  av_dict_set(&unused_opts, e->key, NULL, 0);
984  }
985 
986  e = NULL;
987  while ((e = av_dict_get(unused_opts, "", e, AV_DICT_IGNORE_SUFFIX))) {
988  const AVClass *class = avcodec_get_class();
989  const AVOption *option = av_opt_find(&class, e->key, NULL, 0,
991  const AVClass *fclass = avformat_get_class();
992  const AVOption *foption = av_opt_find(&fclass, e->key, NULL, 0,
994  if (!option || foption)
995  continue;
996 
997 
998  if (!(option->flags & AV_OPT_FLAG_DECODING_PARAM)) {
999  av_log(NULL, AV_LOG_ERROR, "Codec AVOption %s (%s) specified for "
1000  "input file #%d (%s) is not a decoding option.\n", e->key,
1001  option->help ? option->help : "", nb_input_files - 1,
1002  filename);
1003  exit_program(1);
1004  }
1005 
1006  av_log(NULL, AV_LOG_WARNING, "Codec AVOption %s (%s) specified for "
1007  "input file #%d (%s) has not been used for any stream. The most "
1008  "likely reason is either wrong type (e.g. a video option with "
1009  "no video streams) or that it is a private option of some decoder "
1010  "which was not actually used for any stream.\n", e->key,
1011  option->help ? option->help : "", nb_input_files - 1, filename);
1012  }
1013  av_dict_free(&unused_opts);
1014 
1015  for (i = 0; i < o->nb_dump_attachment; i++) {
1016  int j;
1017 
1018  for (j = 0; j < ic->nb_streams; j++) {
1019  AVStream *st = ic->streams[j];
1020 
1021  if (check_stream_specifier(ic, st, o->dump_attachment[i].specifier) == 1)
1022  dump_attachment(st, o->dump_attachment[i].u.str);
1023  }
1024  }
1025 
1026  for (i = 0; i < orig_nb_streams; i++)
1027  av_dict_free(&opts[i]);
1028  av_freep(&opts);
1029 
1031 
1032  return 0;
1033 }
1034 
1036 {
1037  AVIOContext *line;
1038  uint8_t *buf;
1039  char c;
1040 
1041  if (avio_open_dyn_buf(&line) < 0) {
1042  av_log(NULL, AV_LOG_FATAL, "Could not alloc buffer for reading preset.\n");
1043  exit_program(1);
1044  }
1045 
1046  while ((c = avio_r8(s)) && c != '\n')
1047  avio_w8(line, c);
1048  avio_w8(line, 0);
1049  avio_close_dyn_buf(line, &buf);
1050 
1051  return buf;
1052 }
1053 
1054 static int get_preset_file_2(const char *preset_name, const char *codec_name, AVIOContext **s)
1055 {
1056  int i, ret = -1;
1057  char filename[1000];
1058  const char *base[3] = { getenv("AVCONV_DATADIR"),
1059  getenv("HOME"),
1060  AVCONV_DATADIR,
1061  };
1062 
1063  for (i = 0; i < FF_ARRAY_ELEMS(base) && ret < 0; i++) {
1064  if (!base[i])
1065  continue;
1066  if (codec_name) {
1067  snprintf(filename, sizeof(filename), "%s%s/%s-%s.avpreset", base[i],
1068  i != 1 ? "" : "/.avconv", codec_name, preset_name);
1069  ret = avio_open2(s, filename, AVIO_FLAG_READ, &int_cb, NULL);
1070  }
1071  if (ret < 0) {
1072  snprintf(filename, sizeof(filename), "%s%s/%s.avpreset", base[i],
1073  i != 1 ? "" : "/.avconv", preset_name);
1074  ret = avio_open2(s, filename, AVIO_FLAG_READ, &int_cb, NULL);
1075  }
1076  }
1077  return ret;
1078 }
1079 
1081 {
1082  char *codec_name = NULL;
1083 
1084  MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, ost->st);
1085  if (!codec_name) {
1086  ost->st->codec->codec_id = av_guess_codec(s->oformat, NULL, s->filename,
1087  NULL, ost->st->codec->codec_type);
1088  ost->enc = avcodec_find_encoder(ost->st->codec->codec_id);
1089  } else if (!strcmp(codec_name, "copy"))
1090  ost->stream_copy = 1;
1091  else {
1092  ost->enc = find_codec_or_die(codec_name, ost->st->codec->codec_type, 1);
1093  ost->st->codec->codec_id = ost->enc->id;
1094  }
1095 }
1096 
1098 {
1099  OutputStream *ost;
1100  AVStream *st = avformat_new_stream(oc, NULL);
1101  int idx = oc->nb_streams - 1, ret = 0;
1102  char *bsf = NULL, *next, *codec_tag = NULL;
1103  AVBitStreamFilterContext *bsfc, *bsfc_prev = NULL;
1104  double qscale = -1;
1105  int i;
1106 
1107  if (!st) {
1108  av_log(NULL, AV_LOG_FATAL, "Could not alloc stream.\n");
1109  exit_program(1);
1110  }
1111 
1112  if (oc->nb_streams - 1 < o->nb_streamid_map)
1113  st->id = o->streamid_map[oc->nb_streams - 1];
1114 
1116  if (!(ost = av_mallocz(sizeof(*ost))))
1117  exit_program(1);
1118  output_streams[nb_output_streams - 1] = ost;
1119 
1120  ost->file_index = nb_output_files - 1;
1121  ost->index = idx;
1122  ost->st = st;
1123  st->codec->codec_type = type;
1124  choose_encoder(o, oc, ost);
1125 
1126  ost->enc_ctx = avcodec_alloc_context3(ost->enc);
1127  if (!ost->enc_ctx) {
1128  av_log(NULL, AV_LOG_ERROR, "Error allocating the encoding context.\n");
1129  exit_program(1);
1130  }
1131  ost->enc_ctx->codec_type = type;
1132 
1133  if (ost->enc) {
1134  AVIOContext *s = NULL;
1135  char *buf = NULL, *arg = NULL, *preset = NULL;
1136 
1137  ost->encoder_opts = filter_codec_opts(o->g->codec_opts, ost->enc->id, oc, st, ost->enc);
1138 
1139  MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
1140  if (preset && (!(ret = get_preset_file_2(preset, ost->enc->name, &s)))) {
1141  do {
1142  buf = get_line(s);
1143  if (!buf[0] || buf[0] == '#') {
1144  av_free(buf);
1145  continue;
1146  }
1147  if (!(arg = strchr(buf, '='))) {
1148  av_log(NULL, AV_LOG_FATAL, "Invalid line found in the preset file.\n");
1149  exit_program(1);
1150  }
1151  *arg++ = 0;
1153  av_free(buf);
1154  } while (!s->eof_reached);
1155  avio_closep(&s);
1156  }
1157  if (ret) {
1159  "Preset %s specified for stream %d:%d, but could not be opened.\n",
1160  preset, ost->file_index, ost->index);
1161  exit_program(1);
1162  }
1163  } else {
1165  }
1166 
1167  ost->max_frames = INT64_MAX;
1168  MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
1169  for (i = 0; i<o->nb_max_frames; i++) {
1170  char *p = o->max_frames[i].specifier;
1171  if (!*p && type != AVMEDIA_TYPE_VIDEO) {
1172  av_log(NULL, AV_LOG_WARNING, "Applying unspecific -frames to non video streams, maybe you meant -vframes ?\n");
1173  break;
1174  }
1175  }
1176 
1177  ost->copy_prior_start = -1;
1178  MATCH_PER_STREAM_OPT(copy_prior_start, i, ost->copy_prior_start, oc ,st);
1179 
1180  MATCH_PER_STREAM_OPT(bitstream_filters, str, bsf, oc, st);
1181  while (bsf) {
1182  char *arg = NULL;
1183  if (next = strchr(bsf, ','))
1184  *next++ = 0;
1185  if (arg = strchr(bsf, '='))
1186  *arg++ = 0;
1187  if (!(bsfc = av_bitstream_filter_init(bsf))) {
1188  av_log(NULL, AV_LOG_FATAL, "Unknown bitstream filter %s\n", bsf);
1189  exit_program(1);
1190  }
1191  if (bsfc_prev)
1192  bsfc_prev->next = bsfc;
1193  else
1194  ost->bitstream_filters = bsfc;
1195  av_dict_set(&ost->bsf_args, bsfc->filter->name, arg, 0);
1196 
1197  bsfc_prev = bsfc;
1198  bsf = next;
1199  }
1200 
1201  MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, oc, st);
1202  if (codec_tag) {
1203  uint32_t tag = strtol(codec_tag, &next, 0);
1204  if (*next)
1205  tag = AV_RL32(codec_tag);
1206  ost->enc_ctx->codec_tag = tag;
1207  }
1208 
1209  MATCH_PER_STREAM_OPT(qscale, dbl, qscale, oc, st);
1210  if (qscale >= 0) {
1211  ost->enc_ctx->flags |= CODEC_FLAG_QSCALE;
1212  ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale;
1213  }
1214 
1215  MATCH_PER_STREAM_OPT(disposition, str, ost->disposition, oc, st);
1216  ost->disposition = av_strdup(ost->disposition);
1217 
1218  if (oc->oformat->flags & AVFMT_GLOBALHEADER)
1220 
1221  av_opt_get_int(o->g->sws_opts, "sws_flags", 0, &ost->sws_flags);
1222 
1223  av_dict_copy(&ost->swr_opts, o->g->swr_opts, 0);
1224  if (ost->enc && av_get_exact_bits_per_sample(ost->enc->id) == 24)
1225  av_dict_set(&ost->swr_opts, "output_sample_bits", "24", 0);
1226 
1227  av_dict_copy(&ost->resample_opts, o->g->resample_opts, 0);
1228 
1229  ost->source_index = source_index;
1230  if (source_index >= 0) {
1231  ost->sync_ist = input_streams[source_index];
1232  input_streams[source_index]->discard = 0;
1233  input_streams[source_index]->st->discard = input_streams[source_index]->user_set_discard;
1234  }
1236 
1237  return ost;
1238 }
1239 
1240 static void parse_matrix_coeffs(uint16_t *dest, const char *str)
1241 {
1242  int i;
1243  const char *p = str;
1244  for (i = 0;; i++) {
1245  dest[i] = atoi(p);
1246  if (i == 63)
1247  break;
1248  p = strchr(p, ',');
1249  if (!p) {
1250  av_log(NULL, AV_LOG_FATAL, "Syntax error in matrix \"%s\" at coeff %d\n", str, i);
1251  exit_program(1);
1252  }
1253  p++;
1254  }
1255 }
1256 
1257 /* read file contents into a string */
1258 static uint8_t *read_file(const char *filename)
1259 {
1260  AVIOContext *pb = NULL;
1261  AVIOContext *dyn_buf = NULL;
1262  int ret = avio_open(&pb, filename, AVIO_FLAG_READ);
1263  uint8_t buf[1024], *str;
1264 
1265  if (ret < 0) {
1266  av_log(NULL, AV_LOG_ERROR, "Error opening file %s.\n", filename);
1267  return NULL;
1268  }
1269 
1270  ret = avio_open_dyn_buf(&dyn_buf);
1271  if (ret < 0) {
1272  avio_closep(&pb);
1273  return NULL;
1274  }
1275  while ((ret = avio_read(pb, buf, sizeof(buf))) > 0)
1276  avio_write(dyn_buf, buf, ret);
1277  avio_w8(dyn_buf, 0);
1278  avio_closep(&pb);
1279 
1280  ret = avio_close_dyn_buf(dyn_buf, &str);
1281  if (ret < 0)
1282  return NULL;
1283  return str;
1284 }
1285 
1287  OutputStream *ost)
1288 {
1289  AVStream *st = ost->st;
1290 
1291  if (ost->filters_script && ost->filters) {
1292  av_log(NULL, AV_LOG_ERROR, "Both -filter and -filter_script set for "
1293  "output stream #%d:%d.\n", nb_output_files, st->index);
1294  exit_program(1);
1295  }
1296 
1297  if (ost->filters_script)
1298  return read_file(ost->filters_script);
1299  else if (ost->filters)
1300  return av_strdup(ost->filters);
1301 
1302  return av_strdup(st->codec->codec_type == AVMEDIA_TYPE_VIDEO ?
1303  "null" : "anull");
1304 }
1305 
1307  const OutputStream *ost, enum AVMediaType type)
1308 {
1309  if (ost->filters_script || ost->filters) {
1311  "%s '%s' was defined for %s output stream %d:%d but codec copy was selected.\n"
1312  "Filtering and streamcopy cannot be used together.\n",
1313  ost->filters ? "Filtergraph" : "Filtergraph script",
1314  ost->filters ? ost->filters : ost->filters_script,
1315  av_get_media_type_string(type), ost->file_index, ost->index);
1316  exit_program(1);
1317  }
1318 }
1319 
1321 {
1322  AVStream *st;
1323  OutputStream *ost;
1324  AVCodecContext *video_enc;
1325  char *frame_rate = NULL, *frame_aspect_ratio = NULL;
1326 
1327  ost = new_output_stream(o, oc, AVMEDIA_TYPE_VIDEO, source_index);
1328  st = ost->st;
1329  video_enc = ost->enc_ctx;
1330 
1331  MATCH_PER_STREAM_OPT(frame_rates, str, frame_rate, oc, st);
1332  if (frame_rate && av_parse_video_rate(&ost->frame_rate, frame_rate) < 0) {
1333  av_log(NULL, AV_LOG_FATAL, "Invalid framerate value: %s\n", frame_rate);
1334  exit_program(1);
1335  }
1336  if (frame_rate && video_sync_method == VSYNC_PASSTHROUGH)
1337  av_log(NULL, AV_LOG_ERROR, "Using -vsync 0 and -r can produce invalid output files\n");
1338 
1339  MATCH_PER_STREAM_OPT(frame_aspect_ratios, str, frame_aspect_ratio, oc, st);
1340  if (frame_aspect_ratio) {
1341  AVRational q;
1342  if (av_parse_ratio(&q, frame_aspect_ratio, 255, 0, NULL) < 0 ||
1343  q.num <= 0 || q.den <= 0) {
1344  av_log(NULL, AV_LOG_FATAL, "Invalid aspect ratio: %s\n", frame_aspect_ratio);
1345  exit_program(1);
1346  }
1347  ost->frame_aspect_ratio = q;
1348  }
1349 
1350  MATCH_PER_STREAM_OPT(filter_scripts, str, ost->filters_script, oc, st);
1351  MATCH_PER_STREAM_OPT(filters, str, ost->filters, oc, st);
1352 
1353  if (!ost->stream_copy) {
1354  const char *p = NULL;
1355  char *frame_size = NULL;
1356  char *frame_pix_fmt = NULL;
1357  char *intra_matrix = NULL, *inter_matrix = NULL;
1358  char *chroma_intra_matrix = NULL;
1359  int do_pass = 0;
1360  int i;
1361 
1362  MATCH_PER_STREAM_OPT(frame_sizes, str, frame_size, oc, st);
1363  if (frame_size && av_parse_video_size(&video_enc->width, &video_enc->height, frame_size) < 0) {
1364  av_log(NULL, AV_LOG_FATAL, "Invalid frame size: %s.\n", frame_size);
1365  exit_program(1);
1366  }
1367 
1369  MATCH_PER_STREAM_OPT(frame_pix_fmts, str, frame_pix_fmt, oc, st);
1370  if (frame_pix_fmt && *frame_pix_fmt == '+') {
1371  ost->keep_pix_fmt = 1;
1372  if (!*++frame_pix_fmt)
1373  frame_pix_fmt = NULL;
1374  }
1375  if (frame_pix_fmt && (video_enc->pix_fmt = av_get_pix_fmt(frame_pix_fmt)) == AV_PIX_FMT_NONE) {
1376  av_log(NULL, AV_LOG_FATAL, "Unknown pixel format requested: %s.\n", frame_pix_fmt);
1377  exit_program(1);
1378  }
1379  st->sample_aspect_ratio = video_enc->sample_aspect_ratio;
1380 
1381  if (intra_only)
1382  video_enc->gop_size = 0;
1383  MATCH_PER_STREAM_OPT(intra_matrices, str, intra_matrix, oc, st);
1384  if (intra_matrix) {
1385  if (!(video_enc->intra_matrix = av_mallocz(sizeof(*video_enc->intra_matrix) * 64))) {
1386  av_log(NULL, AV_LOG_FATAL, "Could not allocate memory for intra matrix.\n");
1387  exit_program(1);
1388  }
1389  parse_matrix_coeffs(video_enc->intra_matrix, intra_matrix);
1390  }
1391  MATCH_PER_STREAM_OPT(chroma_intra_matrices, str, chroma_intra_matrix, oc, st);
1392  if (chroma_intra_matrix) {
1393  uint16_t *p = av_mallocz(sizeof(*video_enc->chroma_intra_matrix) * 64);
1394  if (!p) {
1395  av_log(NULL, AV_LOG_FATAL, "Could not allocate memory for intra matrix.\n");
1396  exit_program(1);
1397  }
1398  av_codec_set_chroma_intra_matrix(video_enc, p);
1399  parse_matrix_coeffs(p, chroma_intra_matrix);
1400  }
1401  MATCH_PER_STREAM_OPT(inter_matrices, str, inter_matrix, oc, st);
1402  if (inter_matrix) {
1403  if (!(video_enc->inter_matrix = av_mallocz(sizeof(*video_enc->inter_matrix) * 64))) {
1404  av_log(NULL, AV_LOG_FATAL, "Could not allocate memory for inter matrix.\n");
1405  exit_program(1);
1406  }
1407  parse_matrix_coeffs(video_enc->inter_matrix, inter_matrix);
1408  }
1409 
1410  MATCH_PER_STREAM_OPT(rc_overrides, str, p, oc, st);
1411  for (i = 0; p; i++) {
1412  int start, end, q;
1413  int e = sscanf(p, "%d,%d,%d", &start, &end, &q);
1414  if (e != 3) {
1415  av_log(NULL, AV_LOG_FATAL, "error parsing rc_override\n");
1416  exit_program(1);
1417  }
1418  video_enc->rc_override =
1419  av_realloc_array(video_enc->rc_override,
1420  i + 1, sizeof(RcOverride));
1421  if (!video_enc->rc_override) {
1422  av_log(NULL, AV_LOG_FATAL, "Could not (re)allocate memory for rc_override.\n");
1423  exit_program(1);
1424  }
1425  video_enc->rc_override[i].start_frame = start;
1426  video_enc->rc_override[i].end_frame = end;
1427  if (q > 0) {
1428  video_enc->rc_override[i].qscale = q;
1429  video_enc->rc_override[i].quality_factor = 1.0;
1430  }
1431  else {
1432  video_enc->rc_override[i].qscale = 0;
1433  video_enc->rc_override[i].quality_factor = -q/100.0;
1434  }
1435  p = strchr(p, '/');
1436  if (p) p++;
1437  }
1438  video_enc->rc_override_count = i;
1439 
1440  if (do_psnr)
1441  video_enc->flags|= CODEC_FLAG_PSNR;
1442 
1443  /* two pass mode */
1444  MATCH_PER_STREAM_OPT(pass, i, do_pass, oc, st);
1445  if (do_pass) {
1446  if (do_pass & 1) {
1447  video_enc->flags |= CODEC_FLAG_PASS1;
1448  av_dict_set(&ost->encoder_opts, "flags", "+pass1", AV_DICT_APPEND);
1449  }
1450  if (do_pass & 2) {
1451  video_enc->flags |= CODEC_FLAG_PASS2;
1452  av_dict_set(&ost->encoder_opts, "flags", "+pass2", AV_DICT_APPEND);
1453  }
1454  }
1455 
1456  MATCH_PER_STREAM_OPT(passlogfiles, str, ost->logfile_prefix, oc, st);
1457  if (ost->logfile_prefix &&
1458  !(ost->logfile_prefix = av_strdup(ost->logfile_prefix)))
1459  exit_program(1);
1460 
1461  MATCH_PER_STREAM_OPT(forced_key_frames, str, ost->forced_keyframes, oc, st);
1462  if (ost->forced_keyframes)
1464 
1465  MATCH_PER_STREAM_OPT(force_fps, i, ost->force_fps, oc, st);
1466 
1467  ost->top_field_first = -1;
1468  MATCH_PER_STREAM_OPT(top_field_first, i, ost->top_field_first, oc, st);
1469 
1470 
1471  ost->avfilter = get_ost_filters(o, oc, ost);
1472  if (!ost->avfilter)
1473  exit_program(1);
1474  } else {
1475  MATCH_PER_STREAM_OPT(copy_initial_nonkeyframes, i, ost->copy_initial_nonkeyframes, oc ,st);
1476  }
1477 
1478  if (ost->stream_copy)
1480 
1481  return ost;
1482 }
1483 
1485 {
1486  int n;
1487  AVStream *st;
1488  OutputStream *ost;
1489  AVCodecContext *audio_enc;
1490 
1491  ost = new_output_stream(o, oc, AVMEDIA_TYPE_AUDIO, source_index);
1492  st = ost->st;
1493 
1494  audio_enc = ost->enc_ctx;
1495  audio_enc->codec_type = AVMEDIA_TYPE_AUDIO;
1496 
1497  MATCH_PER_STREAM_OPT(filter_scripts, str, ost->filters_script, oc, st);
1498  MATCH_PER_STREAM_OPT(filters, str, ost->filters, oc, st);
1499 
1500  if (!ost->stream_copy) {
1501  char *sample_fmt = NULL;
1502 
1503  MATCH_PER_STREAM_OPT(audio_channels, i, audio_enc->channels, oc, st);
1504 
1505  MATCH_PER_STREAM_OPT(sample_fmts, str, sample_fmt, oc, st);
1506  if (sample_fmt &&
1507  (audio_enc->sample_fmt = av_get_sample_fmt(sample_fmt)) == AV_SAMPLE_FMT_NONE) {
1508  av_log(NULL, AV_LOG_FATAL, "Invalid sample format '%s'\n", sample_fmt);
1509  exit_program(1);
1510  }
1511 
1512  MATCH_PER_STREAM_OPT(audio_sample_rate, i, audio_enc->sample_rate, oc, st);
1513 
1514  MATCH_PER_STREAM_OPT(apad, str, ost->apad, oc, st);
1515  ost->apad = av_strdup(ost->apad);
1516 
1517  ost->avfilter = get_ost_filters(o, oc, ost);
1518  if (!ost->avfilter)
1519  exit_program(1);
1520 
1521  /* check for channel mapping for this audio stream */
1522  for (n = 0; n < o->nb_audio_channel_maps; n++) {
1523  AudioChannelMap *map = &o->audio_channel_maps[n];
1524  if ((map->ofile_idx == -1 || ost->file_index == map->ofile_idx) &&
1525  (map->ostream_idx == -1 || ost->st->index == map->ostream_idx)) {
1526  InputStream *ist;
1527 
1528  if (map->channel_idx == -1) {
1529  ist = NULL;
1530  } else if (ost->source_index < 0) {
1531  av_log(NULL, AV_LOG_FATAL, "Cannot determine input stream for channel mapping %d.%d\n",
1532  ost->file_index, ost->st->index);
1533  continue;
1534  } else {
1535  ist = input_streams[ost->source_index];
1536  }
1537 
1538  if (!ist || (ist->file_index == map->file_idx && ist->st->index == map->stream_idx)) {
1540  ost->audio_channels_mapped + 1,
1541  sizeof(*ost->audio_channels_map)
1542  ) < 0 )
1543  exit_program(1);
1544 
1546  }
1547  }
1548  }
1549  }
1550 
1551  if (ost->stream_copy)
1553 
1554  return ost;
1555 }
1556 
1558 {
1559  OutputStream *ost;
1560 
1561  ost = new_output_stream(o, oc, AVMEDIA_TYPE_DATA, source_index);
1562  if (!ost->stream_copy) {
1563  av_log(NULL, AV_LOG_FATAL, "Data stream encoding not supported yet (only streamcopy)\n");
1564  exit_program(1);
1565  }
1566 
1567  return ost;
1568 }
1569 
1571 {
1572  OutputStream *ost;
1573 
1574  ost = new_output_stream(o, oc, AVMEDIA_TYPE_UNKNOWN, source_index);
1575  if (!ost->stream_copy) {
1576  av_log(NULL, AV_LOG_FATAL, "Unknown stream encoding not supported yet (only streamcopy)\n");
1577  exit_program(1);
1578  }
1579 
1580  return ost;
1581 }
1582 
1584 {
1585  OutputStream *ost = new_output_stream(o, oc, AVMEDIA_TYPE_ATTACHMENT, source_index);
1586  ost->stream_copy = 1;
1587  ost->finished = 1;
1588  return ost;
1589 }
1590 
1592 {
1593  AVStream *st;
1594  OutputStream *ost;
1595  AVCodecContext *subtitle_enc;
1596 
1597  ost = new_output_stream(o, oc, AVMEDIA_TYPE_SUBTITLE, source_index);
1598  st = ost->st;
1599  subtitle_enc = ost->enc_ctx;
1600 
1601  subtitle_enc->codec_type = AVMEDIA_TYPE_SUBTITLE;
1602 
1603  MATCH_PER_STREAM_OPT(copy_initial_nonkeyframes, i, ost->copy_initial_nonkeyframes, oc, st);
1604 
1605  if (!ost->stream_copy) {
1606  char *frame_size = NULL;
1607 
1608  MATCH_PER_STREAM_OPT(frame_sizes, str, frame_size, oc, st);
1609  if (frame_size && av_parse_video_size(&subtitle_enc->width, &subtitle_enc->height, frame_size) < 0) {
1610  av_log(NULL, AV_LOG_FATAL, "Invalid frame size: %s.\n", frame_size);
1611  exit_program(1);
1612  }
1613  }
1614 
1615  return ost;
1616 }
1617 
1618 /* arg format is "output-stream-index:streamid-value". */
1619 static int opt_streamid(void *optctx, const char *opt, const char *arg)
1620 {
1621  OptionsContext *o = optctx;
1622  int idx;
1623  char *p;
1624  char idx_str[16];
1625 
1626  av_strlcpy(idx_str, arg, sizeof(idx_str));
1627  p = strchr(idx_str, ':');
1628  if (!p) {
1630  "Invalid value '%s' for option '%s', required syntax is 'index:value'\n",
1631  arg, opt);
1632  exit_program(1);
1633  }
1634  *p++ = '\0';
1635  idx = parse_number_or_die(opt, idx_str, OPT_INT, 0, MAX_STREAMS-1);
1636  o->streamid_map = grow_array(o->streamid_map, sizeof(*o->streamid_map), &o->nb_streamid_map, idx+1);
1637  o->streamid_map[idx] = parse_number_or_die(opt, p, OPT_INT, 0, INT_MAX);
1638  return 0;
1639 }
1640 
1642 {
1643  AVFormatContext *is = ifile->ctx;
1644  AVFormatContext *os = ofile->ctx;
1645  AVChapter **tmp;
1646  int i;
1647 
1648  tmp = av_realloc_f(os->chapters, is->nb_chapters + os->nb_chapters, sizeof(*os->chapters));
1649  if (!tmp)
1650  return AVERROR(ENOMEM);
1651  os->chapters = tmp;
1652 
1653  for (i = 0; i < is->nb_chapters; i++) {
1654  AVChapter *in_ch = is->chapters[i], *out_ch;
1655  int64_t start_time = (ofile->start_time == AV_NOPTS_VALUE) ? 0 : ofile->start_time;
1656  int64_t ts_off = av_rescale_q(start_time - ifile->ts_offset,
1657  AV_TIME_BASE_Q, in_ch->time_base);
1658  int64_t rt = (ofile->recording_time == INT64_MAX) ? INT64_MAX :
1660 
1661 
1662  if (in_ch->end < ts_off)
1663  continue;
1664  if (rt != INT64_MAX && in_ch->start > rt + ts_off)
1665  break;
1666 
1667  out_ch = av_mallocz(sizeof(AVChapter));
1668  if (!out_ch)
1669  return AVERROR(ENOMEM);
1670 
1671  out_ch->id = in_ch->id;
1672  out_ch->time_base = in_ch->time_base;
1673  out_ch->start = FFMAX(0, in_ch->start - ts_off);
1674  out_ch->end = FFMIN(rt, in_ch->end - ts_off);
1675 
1676  if (copy_metadata)
1677  av_dict_copy(&out_ch->metadata, in_ch->metadata, 0);
1678 
1679  os->chapters[os->nb_chapters++] = out_ch;
1680  }
1681  return 0;
1682 }
1683 
1684 static int read_ffserver_streams(OptionsContext *o, AVFormatContext *s, const char *filename)
1685 {
1686  int i, err;
1688 
1689  ic->interrupt_callback = int_cb;
1690  err = avformat_open_input(&ic, filename, NULL, NULL);
1691  if (err < 0)
1692  return err;
1693  /* copy stream format */
1694  for(i=0;i<ic->nb_streams;i++) {
1695  AVStream *st;
1696  OutputStream *ost;
1697  AVCodec *codec;
1698  const char *enc_config;
1699 
1700  codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
1701  if (!codec) {
1702  av_log(s, AV_LOG_ERROR, "no encoder found for codec id %i\n", ic->streams[i]->codec->codec_id);
1703  return AVERROR(EINVAL);
1704  }
1705  if (codec->type == AVMEDIA_TYPE_AUDIO)
1706  opt_audio_codec(o, "c:a", codec->name);
1707  else if (codec->type == AVMEDIA_TYPE_VIDEO)
1708  opt_video_codec(o, "c:v", codec->name);
1709  ost = new_output_stream(o, s, codec->type, -1);
1710  st = ost->st;
1711 
1714  if (enc_config) {
1715  AVDictionary *opts = NULL;
1716  av_dict_parse_string(&opts, enc_config, "=", ",", 0);
1718  av_dict_free(&opts);
1719  }
1720 
1721  if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && !ost->stream_copy)
1722  choose_sample_fmt(st, codec);
1723  else if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && !ost->stream_copy)
1724  choose_pixel_fmt(st, st->codec, codec, st->codec->pix_fmt);
1725  avcodec_copy_context(ost->enc_ctx, st->codec);
1726  if (enc_config)
1727  av_dict_parse_string(&ost->encoder_opts, enc_config, "=", ",", 0);
1728  }
1729 
1730  avformat_close_input(&ic);
1731  return err;
1732 }
1733 
1735  AVFormatContext *oc)
1736 {
1737  OutputStream *ost;
1738 
1740  ofilter->out_tmp->pad_idx)) {
1741  case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(o, oc, -1); break;
1742  case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(o, oc, -1); break;
1743  default:
1744  av_log(NULL, AV_LOG_FATAL, "Only video and audio filters are supported "
1745  "currently.\n");
1746  exit_program(1);
1747  }
1748 
1749  ost->source_index = -1;
1750  ost->filter = ofilter;
1751 
1752  ofilter->ost = ost;
1753 
1754  if (ost->stream_copy) {
1755  av_log(NULL, AV_LOG_ERROR, "Streamcopy requested for output stream %d:%d, "
1756  "which is fed from a complex filtergraph. Filtering and streamcopy "
1757  "cannot be used together.\n", ost->file_index, ost->index);
1758  exit_program(1);
1759  }
1760 
1761  if (ost->avfilter && (ost->filters || ost->filters_script)) {
1762  const char *opt = ost->filters ? "-vf/-af/-filter" : "-filter_script";
1764  "%s '%s' was specified through the %s option "
1765  "for output stream %d:%d, which is fed from a complex filtergraph.\n"
1766  "%s and -filter_complex cannot be used together for the same stream.\n",
1767  ost->filters ? "Filtergraph" : "Filtergraph script",
1768  ost->filters ? ost->filters : ost->filters_script,
1769  opt, ost->file_index, ost->index, opt);
1770  exit_program(1);
1771  }
1772 
1773  if (configure_output_filter(ofilter->graph, ofilter, ofilter->out_tmp) < 0) {
1774  av_log(NULL, AV_LOG_FATAL, "Error configuring filter.\n");
1775  exit_program(1);
1776  }
1777  avfilter_inout_free(&ofilter->out_tmp);
1778 }
1779 
1781 {
1782  int i, ret = 0;
1783 
1784  for (i = 0; i < nb_filtergraphs; i++)
1785  if (!filtergraphs[i]->graph &&
1786  (ret = configure_filtergraph(filtergraphs[i])) < 0)
1787  return ret;
1788  return 0;
1789 }
1790 
1791 static int open_output_file(OptionsContext *o, const char *filename)
1792 {
1793  AVFormatContext *oc;
1794  int i, j, err;
1795  AVOutputFormat *file_oformat;
1796  OutputFile *of;
1797  OutputStream *ost;
1798  InputStream *ist;
1799  AVDictionary *unused_opts = NULL;
1800  AVDictionaryEntry *e = NULL;
1801 
1802  if (configure_complex_filters() < 0) {
1803  av_log(NULL, AV_LOG_FATAL, "Error configuring filters.\n");
1804  exit_program(1);
1805  }
1806 
1807  if (o->stop_time != INT64_MAX && o->recording_time != INT64_MAX) {
1808  o->stop_time = INT64_MAX;
1809  av_log(NULL, AV_LOG_WARNING, "-t and -to cannot be used together; using -t.\n");
1810  }
1811 
1812  if (o->stop_time != INT64_MAX && o->recording_time == INT64_MAX) {
1813  int64_t start_time = o->start_time == AV_NOPTS_VALUE ? 0 : o->start_time;
1814  if (o->stop_time <= start_time) {
1815  av_log(NULL, AV_LOG_ERROR, "-to value smaller than -ss; aborting.\n");
1816  exit_program(1);
1817  } else {
1819  }
1820  }
1821 
1823  of = av_mallocz(sizeof(*of));
1824  if (!of)
1825  exit_program(1);
1826  output_files[nb_output_files - 1] = of;
1827 
1829  of->recording_time = o->recording_time;
1830  of->start_time = o->start_time;
1831  of->limit_filesize = o->limit_filesize;
1832  of->shortest = o->shortest;
1833  av_dict_copy(&of->opts, o->g->format_opts, 0);
1834 
1835  if (!strcmp(filename, "-"))
1836  filename = "pipe:";
1837 
1838  err = avformat_alloc_output_context2(&oc, NULL, o->format, filename);
1839  if (!oc) {
1840  print_error(filename, err);
1841  exit_program(1);
1842  }
1843 
1844  of->ctx = oc;
1845  if (o->recording_time != INT64_MAX)
1846  oc->duration = o->recording_time;
1847 
1848  file_oformat= oc->oformat;
1849  oc->interrupt_callback = int_cb;
1850 
1851  /* create streams for all unlabeled output pads */
1852  for (i = 0; i < nb_filtergraphs; i++) {
1853  FilterGraph *fg = filtergraphs[i];
1854  for (j = 0; j < fg->nb_outputs; j++) {
1855  OutputFilter *ofilter = fg->outputs[j];
1856 
1857  if (!ofilter->out_tmp || ofilter->out_tmp->name)
1858  continue;
1859 
1861  ofilter->out_tmp->pad_idx)) {
1862  case AVMEDIA_TYPE_VIDEO: o->video_disable = 1; break;
1863  case AVMEDIA_TYPE_AUDIO: o->audio_disable = 1; break;
1864  case AVMEDIA_TYPE_SUBTITLE: o->subtitle_disable = 1; break;
1865  }
1866  init_output_filter(ofilter, o, oc);
1867  }
1868  }
1869 
1870  /* ffserver seeking with date=... needs a date reference */
1871  if (!strcmp(file_oformat->name, "ffm") &&
1872  av_strstart(filename, "http:", NULL)) {
1873  int err = parse_option(o, "metadata", "creation_time=now", options);
1874  if (err < 0) {
1875  print_error(filename, err);
1876  exit_program(1);
1877  }
1878  }
1879 
1880  if (!strcmp(file_oformat->name, "ffm") && !override_ffserver &&
1881  av_strstart(filename, "http:", NULL)) {
1882  int j;
1883  /* special case for files sent to ffserver: we get the stream
1884  parameters from ffserver */
1885  int err = read_ffserver_streams(o, oc, filename);
1886  if (err < 0) {
1887  print_error(filename, err);
1888  exit_program(1);
1889  }
1890  for(j = nb_output_streams - oc->nb_streams; j < nb_output_streams; j++) {
1891  ost = output_streams[j];
1892  for (i = 0; i < nb_input_streams; i++) {
1893  ist = input_streams[i];
1894  if(ist->st->codec->codec_type == ost->st->codec->codec_type){
1895  ost->sync_ist= ist;
1896  ost->source_index= i;
1897  if(ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) ost->avfilter = av_strdup("anull");
1898  if(ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ost->avfilter = av_strdup("null");
1899  ist->discard = 0;
1900  ist->st->discard = ist->user_set_discard;
1901  break;
1902  }
1903  }
1904  if(!ost->sync_ist){
1905  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));
1906  exit_program(1);
1907  }
1908  }
1909  } else if (!o->nb_stream_maps) {
1910  char *subtitle_codec_name = NULL;
1911  /* pick the "best" stream of each type */
1912 
1913  /* video: highest resolution */
1915  int area = 0, idx = -1;
1916  int qcr = avformat_query_codec(oc->oformat, oc->oformat->video_codec, 0);
1917  for (i = 0; i < nb_input_streams; i++) {
1918  int new_area;
1919  ist = input_streams[i];
1920  new_area = ist->st->codec->width * ist->st->codec->height;
1921  if((qcr!=MKTAG('A', 'P', 'I', 'C')) && (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
1922  new_area = 1;
1923  if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
1924  new_area > area) {
1925  if((qcr==MKTAG('A', 'P', 'I', 'C')) && !(ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
1926  continue;
1927  area = new_area;
1928  idx = i;
1929  }
1930  }
1931  if (idx >= 0)
1932  new_video_stream(o, oc, idx);
1933  }
1934 
1935  /* audio: most channels */
1937  int channels = 0, idx = -1;
1938  for (i = 0; i < nb_input_streams; i++) {
1939  ist = input_streams[i];
1940  if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
1941  ist->st->codec->channels > channels) {
1942  channels = ist->st->codec->channels;
1943  idx = i;
1944  }
1945  }
1946  if (idx >= 0)
1947  new_audio_stream(o, oc, idx);
1948  }
1949 
1950  /* subtitles: pick first */
1951  MATCH_PER_TYPE_OPT(codec_names, str, subtitle_codec_name, oc, "s");
1952  if (!o->subtitle_disable && (avcodec_find_encoder(oc->oformat->subtitle_codec) || subtitle_codec_name)) {
1953  for (i = 0; i < nb_input_streams; i++)
1954  if (input_streams[i]->st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
1955  AVCodecDescriptor const *input_descriptor =
1956  avcodec_descriptor_get(input_streams[i]->st->codec->codec_id);
1957  AVCodecDescriptor const *output_descriptor = NULL;
1958  AVCodec const *output_codec =
1960  int input_props = 0, output_props = 0;
1961  if (output_codec)
1962  output_descriptor = avcodec_descriptor_get(output_codec->id);
1963  if (input_descriptor)
1964  input_props = input_descriptor->props & (AV_CODEC_PROP_TEXT_SUB | AV_CODEC_PROP_BITMAP_SUB);
1965  if (output_descriptor)
1966  output_props = output_descriptor->props & (AV_CODEC_PROP_TEXT_SUB | AV_CODEC_PROP_BITMAP_SUB);
1967  if (subtitle_codec_name ||
1968  input_props & output_props ||
1969  // Map dvb teletext which has neither property to any output subtitle encoder
1970  input_descriptor && output_descriptor &&
1971  (!input_descriptor->props ||
1972  !output_descriptor->props)) {
1973  new_subtitle_stream(o, oc, i);
1974  break;
1975  }
1976  }
1977  }
1978  /* Data only if codec id match */
1979  if (!o->data_disable ) {
1981  for (i = 0; codec_id != AV_CODEC_ID_NONE && i < nb_input_streams; i++) {
1982  if (input_streams[i]->st->codec->codec_type == AVMEDIA_TYPE_DATA
1983  && input_streams[i]->st->codec->codec_id == codec_id )
1984  new_data_stream(o, oc, i);
1985  }
1986  }
1987  } else {
1988  for (i = 0; i < o->nb_stream_maps; i++) {
1989  StreamMap *map = &o->stream_maps[i];
1990 
1991  if (map->disabled)
1992  continue;
1993 
1994  if (map->linklabel) {
1995  FilterGraph *fg;
1996  OutputFilter *ofilter = NULL;
1997  int j, k;
1998 
1999  for (j = 0; j < nb_filtergraphs; j++) {
2000  fg = filtergraphs[j];
2001  for (k = 0; k < fg->nb_outputs; k++) {
2002  AVFilterInOut *out = fg->outputs[k]->out_tmp;
2003  if (out && !strcmp(out->name, map->linklabel)) {
2004  ofilter = fg->outputs[k];
2005  goto loop_end;
2006  }
2007  }
2008  }
2009 loop_end:
2010  if (!ofilter) {
2011  av_log(NULL, AV_LOG_FATAL, "Output with label '%s' does not exist "
2012  "in any defined filter graph, or was already used elsewhere.\n", map->linklabel);
2013  exit_program(1);
2014  }
2015  init_output_filter(ofilter, o, oc);
2016  } else {
2017  int src_idx = input_files[map->file_index]->ist_index + map->stream_index;
2018 
2021  continue;
2022  if(o-> audio_disable && ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
2023  continue;
2024  if(o-> video_disable && ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
2025  continue;
2026  if(o-> data_disable && ist->st->codec->codec_type == AVMEDIA_TYPE_DATA)
2027  continue;
2028 
2029  switch (ist->st->codec->codec_type) {
2030  case AVMEDIA_TYPE_VIDEO: ost = new_video_stream (o, oc, src_idx); break;
2031  case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream (o, oc, src_idx); break;
2032  case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream (o, oc, src_idx); break;
2033  case AVMEDIA_TYPE_DATA: ost = new_data_stream (o, oc, src_idx); break;
2034  case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc, src_idx); break;
2035  case AVMEDIA_TYPE_UNKNOWN:
2036  if (copy_unknown_streams) {
2037  ost = new_unknown_stream (o, oc, src_idx);
2038  break;
2039  }
2040  default:
2042  "Cannot map stream #%d:%d - unsupported type.\n",
2043  map->file_index, map->stream_index);
2044  if (!ignore_unknown_streams) {
2045  av_log(NULL, AV_LOG_FATAL,
2046  "If you want unsupported types ignored instead "
2047  "of failing, please use the -ignore_unknown option\n"
2048  "If you want them copied, please use -copy_unknown\n");
2049  exit_program(1);
2050  }
2051  }
2052  }
2053  }
2054  }
2055 
2056  /* handle attached files */
2057  for (i = 0; i < o->nb_attachments; i++) {
2058  AVIOContext *pb;
2059  uint8_t *attachment;
2060  const char *p;
2061  int64_t len;
2062 
2063  if ((err = avio_open2(&pb, o->attachments[i], AVIO_FLAG_READ, &int_cb, NULL)) < 0) {
2064  av_log(NULL, AV_LOG_FATAL, "Could not open attachment file %s.\n",
2065  o->attachments[i]);
2066  exit_program(1);
2067  }
2068  if ((len = avio_size(pb)) <= 0) {
2069  av_log(NULL, AV_LOG_FATAL, "Could not get size of the attachment %s.\n",
2070  o->attachments[i]);
2071  exit_program(1);
2072  }
2073  if (!(attachment = av_malloc(len))) {
2074  av_log(NULL, AV_LOG_FATAL, "Attachment %s too large to fit into memory.\n",
2075  o->attachments[i]);
2076  exit_program(1);
2077  }
2078  avio_read(pb, attachment, len);
2079 
2080  ost = new_attachment_stream(o, oc, -1);
2081  ost->stream_copy = 0;
2082  ost->attachment_filename = o->attachments[i];
2083  ost->finished = 1;
2084  ost->st->codec->extradata = attachment;
2085  ost->st->codec->extradata_size = len;
2086 
2087  p = strrchr(o->attachments[i], '/');
2088  av_dict_set(&ost->st->metadata, "filename", (p && *p) ? p + 1 : o->attachments[i], AV_DICT_DONT_OVERWRITE);
2089  avio_closep(&pb);
2090  }
2091 
2092  for (i = nb_output_streams - oc->nb_streams; i < nb_output_streams; i++) { //for all streams of this output file
2093  AVDictionaryEntry *e;
2094  ost = output_streams[i];
2095 
2096  if ((ost->stream_copy || ost->attachment_filename)
2097  && (e = av_dict_get(o->g->codec_opts, "flags", NULL, AV_DICT_IGNORE_SUFFIX))
2098  && (!e->key[5] || check_stream_specifier(oc, ost->st, e->key+6)))
2099  if (av_opt_set(ost->st->codec, "flags", e->value, 0) < 0)
2100  exit_program(1);
2101  }
2102 
2103  /* check if all codec options have been used */
2104  unused_opts = strip_specifiers(o->g->codec_opts);
2105  for (i = of->ost_index; i < nb_output_streams; i++) {
2106  e = NULL;
2107  while ((e = av_dict_get(output_streams[i]->encoder_opts, "", e,
2109  av_dict_set(&unused_opts, e->key, NULL, 0);
2110  }
2111 
2112  e = NULL;
2113  while ((e = av_dict_get(unused_opts, "", e, AV_DICT_IGNORE_SUFFIX))) {
2114  const AVClass *class = avcodec_get_class();
2115  const AVOption *option = av_opt_find(&class, e->key, NULL, 0,
2117  const AVClass *fclass = avformat_get_class();
2118  const AVOption *foption = av_opt_find(&fclass, e->key, NULL, 0,
2120  if (!option || foption)
2121  continue;
2122 
2123 
2124  if (!(option->flags & AV_OPT_FLAG_ENCODING_PARAM)) {
2125  av_log(NULL, AV_LOG_ERROR, "Codec AVOption %s (%s) specified for "
2126  "output file #%d (%s) is not an encoding option.\n", e->key,
2127  option->help ? option->help : "", nb_output_files - 1,
2128  filename);
2129  exit_program(1);
2130  }
2131 
2132  // gop_timecode is injected by generic code but not always used
2133  if (!strcmp(e->key, "gop_timecode"))
2134  continue;
2135 
2136  av_log(NULL, AV_LOG_WARNING, "Codec AVOption %s (%s) specified for "
2137  "output file #%d (%s) has not been used for any stream. The most "
2138  "likely reason is either wrong type (e.g. a video option with "
2139  "no video streams) or that it is a private option of some encoder "
2140  "which was not actually used for any stream.\n", e->key,
2141  option->help ? option->help : "", nb_output_files - 1, filename);
2142  }
2143  av_dict_free(&unused_opts);
2144 
2145  /* check filename in case of an image number is expected */
2146  if (oc->oformat->flags & AVFMT_NEEDNUMBER) {
2147  if (!av_filename_number_test(oc->filename)) {
2148  print_error(oc->filename, AVERROR(EINVAL));
2149  exit_program(1);
2150  }
2151  }
2152 
2155  "No input streams but output needs an input stream\n");
2156  exit_program(1);
2157  }
2158 
2159  if (!(oc->oformat->flags & AVFMT_NOFILE)) {
2160  /* test if it already exists to avoid losing precious files */
2161  assert_file_overwrite(filename);
2162 
2163  /* open the file */
2164  if ((err = avio_open2(&oc->pb, filename, AVIO_FLAG_WRITE,
2165  &oc->interrupt_callback,
2166  &of->opts)) < 0) {
2167  print_error(filename, err);
2168  exit_program(1);
2169  }
2170  } else if (strcmp(oc->oformat->name, "image2")==0 && !av_filename_number_test(filename))
2171  assert_file_overwrite(filename);
2172 
2173  if (o->mux_preload) {
2174  av_dict_set_int(&of->opts, "preload", o->mux_preload*AV_TIME_BASE, 0);
2175  }
2176  oc->max_delay = (int)(o->mux_max_delay * AV_TIME_BASE);
2177 
2178  /* copy metadata */
2179  for (i = 0; i < o->nb_metadata_map; i++) {
2180  char *p;
2181  int in_file_index = strtol(o->metadata_map[i].u.str, &p, 0);
2182 
2183  if (in_file_index >= nb_input_files) {
2184  av_log(NULL, AV_LOG_FATAL, "Invalid input file index %d while processing metadata maps\n", in_file_index);
2185  exit_program(1);
2186  }
2187  copy_metadata(o->metadata_map[i].specifier, *p ? p + 1 : p, oc,
2188  in_file_index >= 0 ?
2189  input_files[in_file_index]->ctx : NULL, o);
2190  }
2191 
2192  /* copy chapters */
2193  if (o->chapters_input_file >= nb_input_files) {
2194  if (o->chapters_input_file == INT_MAX) {
2195  /* copy chapters from the first input file that has them*/
2196  o->chapters_input_file = -1;
2197  for (i = 0; i < nb_input_files; i++)
2198  if (input_files[i]->ctx->nb_chapters) {
2199  o->chapters_input_file = i;
2200  break;
2201  }
2202  } else {
2203  av_log(NULL, AV_LOG_FATAL, "Invalid input file index %d in chapter mapping.\n",
2204  o->chapters_input_file);
2205  exit_program(1);
2206  }
2207  }
2208  if (o->chapters_input_file >= 0)
2211 
2212  /* copy global metadata by default */
2216  if(o->recording_time != INT64_MAX)
2217  av_dict_set(&oc->metadata, "duration", NULL, 0);
2218  av_dict_set(&oc->metadata, "creation_time", NULL, 0);
2219  }
2220  if (!o->metadata_streams_manual)
2221  for (i = of->ost_index; i < nb_output_streams; i++) {
2222  InputStream *ist;
2223  if (output_streams[i]->source_index < 0) /* this is true e.g. for attached files */
2224  continue;
2226  av_dict_copy(&output_streams[i]->st->metadata, ist->st->metadata, AV_DICT_DONT_OVERWRITE);
2227  if (!output_streams[i]->stream_copy) {
2228  av_dict_set(&output_streams[i]->st->metadata, "encoder", NULL, 0);
2229  if (ist->autorotate)
2230  av_dict_set(&output_streams[i]->st->metadata, "rotate", NULL, 0);
2231  }
2232  }
2233 
2234  /* process manually set metadata */
2235  for (i = 0; i < o->nb_metadata; i++) {
2236  AVDictionary **m;
2237  char type, *val;
2238  const char *stream_spec;
2239  int index = 0, j, ret = 0;
2240 
2241  val = strchr(o->metadata[i].u.str, '=');
2242  if (!val) {
2243  av_log(NULL, AV_LOG_FATAL, "No '=' character in metadata string %s.\n",
2244  o->metadata[i].u.str);
2245  exit_program(1);
2246  }
2247  *val++ = 0;
2248 
2249  parse_meta_type(o->metadata[i].specifier, &type, &index, &stream_spec);
2250  if (type == 's') {
2251  for (j = 0; j < oc->nb_streams; j++) {
2252  ost = output_streams[nb_output_streams - oc->nb_streams + j];
2253  if ((ret = check_stream_specifier(oc, oc->streams[j], stream_spec)) > 0) {
2254  av_dict_set(&oc->streams[j]->metadata, o->metadata[i].u.str, *val ? val : NULL, 0);
2255  if (!strcmp(o->metadata[i].u.str, "rotate")) {
2256  ost->rotate_overridden = 1;
2257  }
2258  } else if (ret < 0)
2259  exit_program(1);
2260  }
2261  }
2262  else {
2263  switch (type) {
2264  case 'g':
2265  m = &oc->metadata;
2266  break;
2267  case 'c':
2268  if (index < 0 || index >= oc->nb_chapters) {
2269  av_log(NULL, AV_LOG_FATAL, "Invalid chapter index %d in metadata specifier.\n", index);
2270  exit_program(1);
2271  }
2272  m = &oc->chapters[index]->metadata;
2273  break;
2274  default:
2275  av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\n", o->metadata[i].specifier);
2276  exit_program(1);
2277  }
2278  av_dict_set(m, o->metadata[i].u.str, *val ? val : NULL, 0);
2279  }
2280  }
2281 
2282  return 0;
2283 }
2284 
2285 static int opt_target(void *optctx, const char *opt, const char *arg)
2286 {
2287  OptionsContext *o = optctx;
2288  enum { PAL, NTSC, FILM, UNKNOWN } norm = UNKNOWN;
2289  static const char *const frame_rates[] = { "25", "30000/1001", "24000/1001" };
2290 
2291  if (!strncmp(arg, "pal-", 4)) {
2292  norm = PAL;
2293  arg += 4;
2294  } else if (!strncmp(arg, "ntsc-", 5)) {
2295  norm = NTSC;
2296  arg += 5;
2297  } else if (!strncmp(arg, "film-", 5)) {
2298  norm = FILM;
2299  arg += 5;
2300  } else {
2301  /* Try to determine PAL/NTSC by peeking in the input files */
2302  if (nb_input_files) {
2303  int i, j, fr;
2304  for (j = 0; j < nb_input_files; j++) {
2305  for (i = 0; i < input_files[j]->nb_streams; i++) {
2307  if (c->codec_type != AVMEDIA_TYPE_VIDEO ||
2308  !c->time_base.num)
2309  continue;
2310  fr = c->time_base.den * 1000 / c->time_base.num;
2311  if (fr == 25000) {
2312  norm = PAL;
2313  break;
2314  } else if ((fr == 29970) || (fr == 23976)) {
2315  norm = NTSC;
2316  break;
2317  }
2318  }
2319  if (norm != UNKNOWN)
2320  break;
2321  }
2322  }
2323  if (norm != UNKNOWN)
2324  av_log(NULL, AV_LOG_INFO, "Assuming %s for target.\n", norm == PAL ? "PAL" : "NTSC");
2325  }
2326 
2327  if (norm == UNKNOWN) {
2328  av_log(NULL, AV_LOG_FATAL, "Could not determine norm (PAL/NTSC/NTSC-Film) for target.\n");
2329  av_log(NULL, AV_LOG_FATAL, "Please prefix target with \"pal-\", \"ntsc-\" or \"film-\",\n");
2330  av_log(NULL, AV_LOG_FATAL, "or set a framerate with \"-r xxx\".\n");
2331  exit_program(1);
2332  }
2333 
2334  if (!strcmp(arg, "vcd")) {
2335  opt_video_codec(o, "c:v", "mpeg1video");
2336  opt_audio_codec(o, "c:a", "mp2");
2337  parse_option(o, "f", "vcd", options);
2338 
2339  parse_option(o, "s", norm == PAL ? "352x288" : "352x240", options);
2340  parse_option(o, "r", frame_rates[norm], options);
2341  opt_default(NULL, "g", norm == PAL ? "15" : "18");
2342 
2343  opt_default(NULL, "b:v", "1150000");
2344  opt_default(NULL, "maxrate:v", "1150000");
2345  opt_default(NULL, "minrate:v", "1150000");
2346  opt_default(NULL, "bufsize:v", "327680"); // 40*1024*8;
2347 
2348  opt_default(NULL, "b:a", "224000");
2349  parse_option(o, "ar", "44100", options);
2350  parse_option(o, "ac", "2", options);
2351 
2352  opt_default(NULL, "packetsize", "2324");
2353  opt_default(NULL, "muxrate", "1411200"); // 2352 * 75 * 8;
2354 
2355  /* We have to offset the PTS, so that it is consistent with the SCR.
2356  SCR starts at 36000, but the first two packs contain only padding
2357  and the first pack from the other stream, respectively, may also have
2358  been written before.
2359  So the real data starts at SCR 36000+3*1200. */
2360  o->mux_preload = (36000 + 3 * 1200) / 90000.0; // 0.44
2361  } else if (!strcmp(arg, "svcd")) {
2362 
2363  opt_video_codec(o, "c:v", "mpeg2video");
2364  opt_audio_codec(o, "c:a", "mp2");
2365  parse_option(o, "f", "svcd", options);
2366 
2367  parse_option(o, "s", norm == PAL ? "480x576" : "480x480", options);
2368  parse_option(o, "r", frame_rates[norm], options);
2369  parse_option(o, "pix_fmt", "yuv420p", options);
2370  opt_default(NULL, "g", norm == PAL ? "15" : "18");
2371 
2372  opt_default(NULL, "b:v", "2040000");
2373  opt_default(NULL, "maxrate:v", "2516000");
2374  opt_default(NULL, "minrate:v", "0"); // 1145000;
2375  opt_default(NULL, "bufsize:v", "1835008"); // 224*1024*8;
2376  opt_default(NULL, "scan_offset", "1");
2377 
2378  opt_default(NULL, "b:a", "224000");
2379  parse_option(o, "ar", "44100", options);
2380 
2381  opt_default(NULL, "packetsize", "2324");
2382 
2383  } else if (!strcmp(arg, "dvd")) {
2384 
2385  opt_video_codec(o, "c:v", "mpeg2video");
2386  opt_audio_codec(o, "c:a", "ac3");
2387  parse_option(o, "f", "dvd", options);
2388 
2389  parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
2390  parse_option(o, "r", frame_rates[norm], options);
2391  parse_option(o, "pix_fmt", "yuv420p", options);
2392  opt_default(NULL, "g", norm == PAL ? "15" : "18");
2393 
2394  opt_default(NULL, "b:v", "6000000");
2395  opt_default(NULL, "maxrate:v", "9000000");
2396  opt_default(NULL, "minrate:v", "0"); // 1500000;
2397  opt_default(NULL, "bufsize:v", "1835008"); // 224*1024*8;
2398 
2399  opt_default(NULL, "packetsize", "2048"); // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack.
2400  opt_default(NULL, "muxrate", "10080000"); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8
2401 
2402  opt_default(NULL, "b:a", "448000");
2403  parse_option(o, "ar", "48000", options);
2404 
2405  } else if (!strncmp(arg, "dv", 2)) {
2406 
2407  parse_option(o, "f", "dv", options);
2408 
2409  parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
2410  parse_option(o, "pix_fmt", !strncmp(arg, "dv50", 4) ? "yuv422p" :
2411  norm == PAL ? "yuv420p" : "yuv411p", options);
2412  parse_option(o, "r", frame_rates[norm], options);
2413 
2414  parse_option(o, "ar", "48000", options);
2415  parse_option(o, "ac", "2", options);
2416 
2417  } else {
2418  av_log(NULL, AV_LOG_ERROR, "Unknown target: %s\n", arg);
2419  return AVERROR(EINVAL);
2420  }
2421 
2424 
2425  return 0;
2426 }
2427 
2428 static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
2429 {
2431  vstats_filename = av_strdup (arg);
2432  return 0;
2433 }
2434 
2435 static int opt_vstats(void *optctx, const char *opt, const char *arg)
2436 {
2437  char filename[40];
2438  time_t today2 = time(NULL);
2439  struct tm *today = localtime(&today2);
2440 
2441  snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min,
2442  today->tm_sec);
2443  return opt_vstats_file(NULL, opt, filename);
2444 }
2445 
2446 static int opt_video_frames(void *optctx, const char *opt, const char *arg)
2447 {
2448  OptionsContext *o = optctx;
2449  return parse_option(o, "frames:v", arg, options);
2450 }
2451 
2452 static int opt_audio_frames(void *optctx, const char *opt, const char *arg)
2453 {
2454  OptionsContext *o = optctx;
2455  return parse_option(o, "frames:a", arg, options);
2456 }
2457 
2458 static int opt_data_frames(void *optctx, const char *opt, const char *arg)
2459 {
2460  OptionsContext *o = optctx;
2461  return parse_option(o, "frames:d", arg, options);
2462 }
2463 
2464 static int opt_default_new(OptionsContext *o, const char *opt, const char *arg)
2465 {
2466  int ret;
2467  AVDictionary *cbak = codec_opts;
2468  AVDictionary *fbak = format_opts;
2469  codec_opts = NULL;
2470  format_opts = NULL;
2471 
2472  ret = opt_default(NULL, opt, arg);
2473 
2474  av_dict_copy(&o->g->codec_opts , codec_opts, 0);
2478  codec_opts = cbak;
2479  format_opts = fbak;
2480 
2481  return ret;
2482 }
2483 
2484 static int opt_preset(void *optctx, const char *opt, const char *arg)
2485 {
2486  OptionsContext *o = optctx;
2487  FILE *f=NULL;
2488  char filename[1000], line[1000], tmp_line[1000];
2489  const char *codec_name = NULL;
2490 
2491  tmp_line[0] = *opt;
2492  tmp_line[1] = 0;
2493  MATCH_PER_TYPE_OPT(codec_names, str, codec_name, NULL, tmp_line);
2494 
2495  if (!(f = get_preset_file(filename, sizeof(filename), arg, *opt == 'f', codec_name))) {
2496  if(!strncmp(arg, "libx264-lossless", strlen("libx264-lossless"))){
2497  av_log(NULL, AV_LOG_FATAL, "Please use -preset <speed> -qp 0\n");
2498  }else
2499  av_log(NULL, AV_LOG_FATAL, "File for preset '%s' not found\n", arg);
2500  exit_program(1);
2501  }
2502 
2503  while (fgets(line, sizeof(line), f)) {
2504  char *key = tmp_line, *value, *endptr;
2505 
2506  if (strcspn(line, "#\n\r") == 0)
2507  continue;
2508  av_strlcpy(tmp_line, line, sizeof(tmp_line));
2509  if (!av_strtok(key, "=", &value) ||
2510  !av_strtok(value, "\r\n", &endptr)) {
2511  av_log(NULL, AV_LOG_FATAL, "%s: Invalid syntax: '%s'\n", filename, line);
2512  exit_program(1);
2513  }
2514  av_log(NULL, AV_LOG_DEBUG, "ffpreset[%s]: set '%s' = '%s'\n", filename, key, value);
2515 
2516  if (!strcmp(key, "acodec")) opt_audio_codec (o, key, value);
2517  else if (!strcmp(key, "vcodec")) opt_video_codec (o, key, value);
2518  else if (!strcmp(key, "scodec")) opt_subtitle_codec(o, key, value);
2519  else if (!strcmp(key, "dcodec")) opt_data_codec (o, key, value);
2520  else if (opt_default_new(o, key, value) < 0) {
2521  av_log(NULL, AV_LOG_FATAL, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n",
2522  filename, line, key, value);
2523  exit_program(1);
2524  }
2525  }
2526 
2527  fclose(f);
2528 
2529  return 0;
2530 }
2531 
2532 static int opt_old2new(void *optctx, const char *opt, const char *arg)
2533 {
2534  OptionsContext *o = optctx;
2535  char *s = av_asprintf("%s:%c", opt + 1, *opt);
2536  int ret = parse_option(o, s, arg, options);
2537  av_free(s);
2538  return ret;
2539 }
2540 
2541 static int opt_bitrate(void *optctx, const char *opt, const char *arg)
2542 {
2543  OptionsContext *o = optctx;
2544 
2545  if(!strcmp(opt, "ab")){
2546  av_dict_set(&o->g->codec_opts, "b:a", arg, 0);
2547  return 0;
2548  } else if(!strcmp(opt, "b")){
2549  av_log(NULL, AV_LOG_WARNING, "Please use -b:a or -b:v, -b is ambiguous\n");
2550  av_dict_set(&o->g->codec_opts, "b:v", arg, 0);
2551  return 0;
2552  }
2553  av_dict_set(&o->g->codec_opts, opt, arg, 0);
2554  return 0;
2555 }
2556 
2557 static int opt_qscale(void *optctx, const char *opt, const char *arg)
2558 {
2559  OptionsContext *o = optctx;
2560  char *s;
2561  int ret;
2562  if(!strcmp(opt, "qscale")){
2563  av_log(NULL, AV_LOG_WARNING, "Please use -q:a or -q:v, -qscale is ambiguous\n");
2564  return parse_option(o, "q:v", arg, options);
2565  }
2566  s = av_asprintf("q%s", opt + 6);
2567  ret = parse_option(o, s, arg, options);
2568  av_free(s);
2569  return ret;
2570 }
2571 
2572 static int opt_profile(void *optctx, const char *opt, const char *arg)
2573 {
2574  OptionsContext *o = optctx;
2575  if(!strcmp(opt, "profile")){
2576  av_log(NULL, AV_LOG_WARNING, "Please use -profile:a or -profile:v, -profile is ambiguous\n");
2577  av_dict_set(&o->g->codec_opts, "profile:v", arg, 0);
2578  return 0;
2579  }
2580  av_dict_set(&o->g->codec_opts, opt, arg, 0);
2581  return 0;
2582 }
2583 
2584 static int opt_video_filters(void *optctx, const char *opt, const char *arg)
2585 {
2586  OptionsContext *o = optctx;
2587  return parse_option(o, "filter:v", arg, options);
2588 }
2589 
2590 static int opt_audio_filters(void *optctx, const char *opt, const char *arg)
2591 {
2592  OptionsContext *o = optctx;
2593  return parse_option(o, "filter:a", arg, options);
2594 }
2595 
2596 static int opt_vsync(void *optctx, const char *opt, const char *arg)
2597 {
2598  if (!av_strcasecmp(arg, "cfr")) video_sync_method = VSYNC_CFR;
2599  else if (!av_strcasecmp(arg, "vfr")) video_sync_method = VSYNC_VFR;
2600  else if (!av_strcasecmp(arg, "passthrough")) video_sync_method = VSYNC_PASSTHROUGH;
2601  else if (!av_strcasecmp(arg, "drop")) video_sync_method = VSYNC_DROP;
2602 
2605  return 0;
2606 }
2607 
2608 static int opt_timecode(void *optctx, const char *opt, const char *arg)
2609 {
2610  OptionsContext *o = optctx;
2611  char *tcr = av_asprintf("timecode=%s", arg);
2612  int ret = parse_option(o, "metadata:g", tcr, options);
2613  if (ret >= 0)
2614  ret = av_dict_set(&o->g->codec_opts, "gop_timecode", arg, 0);
2615  av_free(tcr);
2616  return 0;
2617 }
2618 
2619 static int opt_channel_layout(void *optctx, const char *opt, const char *arg)
2620 {
2621  OptionsContext *o = optctx;
2622  char layout_str[32];
2623  char *stream_str;
2624  char *ac_str;
2625  int ret, channels, ac_str_size;
2626  uint64_t layout;
2627 
2628  layout = av_get_channel_layout(arg);
2629  if (!layout) {
2630  av_log(NULL, AV_LOG_ERROR, "Unknown channel layout: %s\n", arg);
2631  return AVERROR(EINVAL);
2632  }
2633  snprintf(layout_str, sizeof(layout_str), "%"PRIu64, layout);
2634  ret = opt_default_new(o, opt, layout_str);
2635  if (ret < 0)
2636  return ret;
2637 
2638  /* set 'ac' option based on channel layout */
2639  channels = av_get_channel_layout_nb_channels(layout);
2640  snprintf(layout_str, sizeof(layout_str), "%d", channels);
2641  stream_str = strchr(opt, ':');
2642  ac_str_size = 3 + (stream_str ? strlen(stream_str) : 0);
2643  ac_str = av_mallocz(ac_str_size);
2644  if (!ac_str)
2645  return AVERROR(ENOMEM);
2646  av_strlcpy(ac_str, "ac", 3);
2647  if (stream_str)
2648  av_strlcat(ac_str, stream_str, ac_str_size);
2649  ret = parse_option(o, ac_str, layout_str, options);
2650  av_free(ac_str);
2651 
2652  return ret;
2653 }
2654 
2655 static int opt_audio_qscale(void *optctx, const char *opt, const char *arg)
2656 {
2657  OptionsContext *o = optctx;
2658  return parse_option(o, "q:a", arg, options);
2659 }
2660 
2661 static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
2662 {
2664  if (!(filtergraphs[nb_filtergraphs - 1] = av_mallocz(sizeof(*filtergraphs[0]))))
2665  return AVERROR(ENOMEM);
2668  if (!filtergraphs[nb_filtergraphs - 1]->graph_desc)
2669  return AVERROR(ENOMEM);
2670 
2672 
2673  return 0;
2674 }
2675 
2676 static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
2677 {
2678  uint8_t *graph_desc = read_file(arg);
2679  if (!graph_desc)
2680  return AVERROR(EINVAL);
2681 
2683  if (!(filtergraphs[nb_filtergraphs - 1] = av_mallocz(sizeof(*filtergraphs[0]))))
2684  return AVERROR(ENOMEM);
2686  filtergraphs[nb_filtergraphs - 1]->graph_desc = graph_desc;
2687 
2689 
2690  return 0;
2691 }
2692 
2693 void show_help_default(const char *opt, const char *arg)
2694 {
2695  /* per-file options have at least one of those set */
2696  const int per_file = OPT_SPEC | OPT_OFFSET | OPT_PERFILE;
2697  int show_advanced = 0, show_avoptions = 0;
2698 
2699  if (opt && *opt) {
2700  if (!strcmp(opt, "long"))
2701  show_advanced = 1;
2702  else if (!strcmp(opt, "full"))
2703  show_advanced = show_avoptions = 1;
2704  else
2705  av_log(NULL, AV_LOG_ERROR, "Unknown help option '%s'.\n", opt);
2706  }
2707 
2708  show_usage();
2709 
2710  printf("Getting help:\n"
2711  " -h -- print basic options\n"
2712  " -h long -- print more options\n"
2713  " -h full -- print all options (including all format and codec specific options, very long)\n"
2714  " See man %s for detailed description of the options.\n"
2715  "\n", program_name);
2716 
2717  show_help_options(options, "Print help / information / capabilities:",
2718  OPT_EXIT, 0, 0);
2719 
2720  show_help_options(options, "Global options (affect whole program "
2721  "instead of just one file:",
2722  0, per_file | OPT_EXIT | OPT_EXPERT, 0);
2723  if (show_advanced)
2724  show_help_options(options, "Advanced global options:", OPT_EXPERT,
2725  per_file | OPT_EXIT, 0);
2726 
2727  show_help_options(options, "Per-file main options:", 0,
2729  OPT_EXIT, per_file);
2730  if (show_advanced)
2731  show_help_options(options, "Advanced per-file options:",
2732  OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE, per_file);
2733 
2734  show_help_options(options, "Video options:",
2736  if (show_advanced)
2737  show_help_options(options, "Advanced Video options:",
2739 
2740  show_help_options(options, "Audio options:",
2742  if (show_advanced)
2743  show_help_options(options, "Advanced Audio options:",
2745  show_help_options(options, "Subtitle options:",
2746  OPT_SUBTITLE, 0, 0);
2747  printf("\n");
2748 
2749  if (show_avoptions) {
2753 #if CONFIG_SWSCALE
2755 #endif
2758  }
2759 }
2760 
2761 void show_usage(void)
2762 {
2763  av_log(NULL, AV_LOG_INFO, "Hyper fast Audio and Video encoder\n");
2764  av_log(NULL, AV_LOG_INFO, "usage: %s [options] [[infile options] -i infile]... {[outfile options] outfile}...\n", program_name);
2765  av_log(NULL, AV_LOG_INFO, "\n");
2766 }
2767 
2768 enum OptGroup {
2771 };
2772 
2773 static const OptionGroupDef groups[] = {
2774  [GROUP_OUTFILE] = { "output file", NULL, OPT_OUTPUT },
2775  [GROUP_INFILE] = { "input file", "i", OPT_INPUT },
2776 };
2777 
2778 static int open_files(OptionGroupList *l, const char *inout,
2779  int (*open_file)(OptionsContext*, const char*))
2780 {
2781  int i, ret;
2782 
2783  for (i = 0; i < l->nb_groups; i++) {
2784  OptionGroup *g = &l->groups[i];
2785  OptionsContext o;
2786 
2787  init_options(&o);
2788  o.g = g;
2789 
2790  ret = parse_optgroup(&o, g);
2791  if (ret < 0) {
2792  av_log(NULL, AV_LOG_ERROR, "Error parsing options for %s file "
2793  "%s.\n", inout, g->arg);
2794  return ret;
2795  }
2796 
2797  av_log(NULL, AV_LOG_DEBUG, "Opening an %s file: %s.\n", inout, g->arg);
2798  ret = open_file(&o, g->arg);
2799  uninit_options(&o);
2800  if (ret < 0) {
2801  av_log(NULL, AV_LOG_ERROR, "Error opening %s file %s.\n",
2802  inout, g->arg);
2803  return ret;
2804  }
2805  av_log(NULL, AV_LOG_DEBUG, "Successfully opened the file.\n");
2806  }
2807 
2808  return 0;
2809 }
2810 
2811 int ffmpeg_parse_options(int argc, char **argv)
2812 {
2813  OptionParseContext octx;
2814  uint8_t error[128];
2815  int ret;
2816 
2817  memset(&octx, 0, sizeof(octx));
2818 
2819  /* split the commandline into an internal representation */
2820  ret = split_commandline(&octx, argc, argv, options, groups,
2821  FF_ARRAY_ELEMS(groups));
2822  if (ret < 0) {
2823  av_log(NULL, AV_LOG_FATAL, "Error splitting the argument list: ");
2824  goto fail;
2825  }
2826 
2827  /* apply global options */
2828  ret = parse_optgroup(NULL, &octx.global_opts);
2829  if (ret < 0) {
2830  av_log(NULL, AV_LOG_FATAL, "Error parsing global options: ");
2831  goto fail;
2832  }
2833 
2834  /* open input files */
2835  ret = open_files(&octx.groups[GROUP_INFILE], "input", open_input_file);
2836  if (ret < 0) {
2837  av_log(NULL, AV_LOG_FATAL, "Error opening input files: ");
2838  goto fail;
2839  }
2840 
2841  /* open output files */
2842  ret = open_files(&octx.groups[GROUP_OUTFILE], "output", open_output_file);
2843  if (ret < 0) {
2844  av_log(NULL, AV_LOG_FATAL, "Error opening output files: ");
2845  goto fail;
2846  }
2847 
2848 fail:
2849  uninit_parse_context(&octx);
2850  if (ret < 0) {
2851  av_strerror(ret, error, sizeof(error));
2852  av_log(NULL, AV_LOG_FATAL, "%s\n", error);
2853  }
2854  return ret;
2855 }
2856 
2857 static int opt_progress(void *optctx, const char *opt, const char *arg)
2858 {
2859  AVIOContext *avio = NULL;
2860  int ret;
2861 
2862  if (!strcmp(arg, "-"))
2863  arg = "pipe:";
2864  ret = avio_open2(&avio, arg, AVIO_FLAG_WRITE, &int_cb, NULL);
2865  if (ret < 0) {
2866  av_log(NULL, AV_LOG_ERROR, "Failed to open progress URL \"%s\": %s\n",
2867  arg, av_err2str(ret));
2868  return ret;
2869  }
2870  progress_avio = avio;
2871  return 0;
2872 }
2873 
2874 #define OFFSET(x) offsetof(OptionsContext, x)
2875 const OptionDef options[] = {
2876  /* main options */
2877 #include "cmdutils_common_opts.h"
2878  { "f", HAS_ARG | OPT_STRING | OPT_OFFSET |
2879  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(format) },
2880  "force format", "fmt" },
2881  { "y", OPT_BOOL, { &file_overwrite },
2882  "overwrite output files" },
2883  { "n", OPT_BOOL, { &no_file_overwrite },
2884  "never overwrite output files" },
2885  { "ignore_unknown", OPT_BOOL, { &ignore_unknown_streams },
2886  "Ignore unknown stream types" },
2887  { "copy_unknown", OPT_BOOL | OPT_EXPERT, { &copy_unknown_streams },
2888  "Copy unknown stream types" },
2889  { "c", HAS_ARG | OPT_STRING | OPT_SPEC |
2890  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
2891  "codec name", "codec" },
2892  { "codec", HAS_ARG | OPT_STRING | OPT_SPEC |
2893  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) },
2894  "codec name", "codec" },
2895  { "pre", HAS_ARG | OPT_STRING | OPT_SPEC |
2896  OPT_OUTPUT, { .off = OFFSET(presets) },
2897  "preset name", "preset" },
2898  { "map", HAS_ARG | OPT_EXPERT | OPT_PERFILE |
2899  OPT_OUTPUT, { .func_arg = opt_map },
2900  "set input stream mapping",
2901  "[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" },
2902  { "map_channel", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_map_channel },
2903  "map an audio channel from one stream to another", "file.stream.channel[:syncfile.syncstream]" },
2904  { "map_metadata", HAS_ARG | OPT_STRING | OPT_SPEC |
2905  OPT_OUTPUT, { .off = OFFSET(metadata_map) },
2906  "set metadata information of outfile from infile",
2907  "outfile[,metadata]:infile[,metadata]" },
2908  { "map_chapters", HAS_ARG | OPT_INT | OPT_EXPERT | OPT_OFFSET |
2909  OPT_OUTPUT, { .off = OFFSET(chapters_input_file) },
2910  "set chapters mapping", "input_file_index" },
2911  { "t", HAS_ARG | OPT_TIME | OPT_OFFSET |
2912  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(recording_time) },
2913  "record or transcode \"duration\" seconds of audio/video",
2914  "duration" },
2915  { "to", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(stop_time) },
2916  "record or transcode stop time", "time_stop" },
2917  { "fs", HAS_ARG | OPT_INT64 | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(limit_filesize) },
2918  "set the limit file size in bytes", "limit_size" },
2919  { "ss", HAS_ARG | OPT_TIME | OPT_OFFSET |
2920  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(start_time) },
2921  "set the start time offset", "time_off" },
2922  { "seek_timestamp", HAS_ARG | OPT_INT | OPT_OFFSET |
2923  OPT_INPUT, { .off = OFFSET(seek_timestamp) },
2924  "enable/disable seeking by timestamp with -ss" },
2925  { "accurate_seek", OPT_BOOL | OPT_OFFSET | OPT_EXPERT |
2926  OPT_INPUT, { .off = OFFSET(accurate_seek) },
2927  "enable/disable accurate seeking with -ss" },
2928  { "itsoffset", HAS_ARG | OPT_TIME | OPT_OFFSET |
2929  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(input_ts_offset) },
2930  "set the input ts offset", "time_off" },
2931  { "itsscale", HAS_ARG | OPT_DOUBLE | OPT_SPEC |
2932  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(ts_scale) },
2933  "set the input ts scale", "scale" },
2934  { "timestamp", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_recording_timestamp },
2935  "set the recording timestamp ('now' to set the current time)", "time" },
2936  { "metadata", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(metadata) },
2937  "add metadata", "string=string" },
2938  { "dframes", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
2939  OPT_OUTPUT, { .func_arg = opt_data_frames },
2940  "set the number of data frames to output", "number" },
2941  { "benchmark", OPT_BOOL | OPT_EXPERT, { &do_benchmark },
2942  "add timings for benchmarking" },
2943  { "benchmark_all", OPT_BOOL | OPT_EXPERT, { &do_benchmark_all },
2944  "add timings for each task" },
2945  { "progress", HAS_ARG | OPT_EXPERT, { .func_arg = opt_progress },
2946  "write program-readable progress information", "url" },
2947  { "stdin", OPT_BOOL | OPT_EXPERT, { &stdin_interaction },
2948  "enable or disable interaction on standard input" },
2949  { "timelimit", HAS_ARG | OPT_EXPERT, { .func_arg = opt_timelimit },
2950  "set max runtime in seconds", "limit" },
2951  { "dump", OPT_BOOL | OPT_EXPERT, { &do_pkt_dump },
2952  "dump each input packet" },
2953  { "hex", OPT_BOOL | OPT_EXPERT, { &do_hex_dump },
2954  "when dumping packets, also dump the payload" },
2955  { "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
2956  OPT_INPUT, { .off = OFFSET(rate_emu) },
2957  "read input at native frame rate", "" },
2958  { "target", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_target },
2959  "specify target file type (\"vcd\", \"svcd\", \"dvd\","
2960  " \"dv\", \"dv50\", \"pal-vcd\", \"ntsc-svcd\", ...)", "type" },
2961  { "vsync", HAS_ARG | OPT_EXPERT, { opt_vsync },
2962  "video sync method", "" },
2963  { "frame_drop_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &frame_drop_threshold },
2964  "frame drop threshold", "" },
2965  { "async", HAS_ARG | OPT_INT | OPT_EXPERT, { &audio_sync_method },
2966  "audio sync method", "" },
2967  { "adrift_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &audio_drift_threshold },
2968  "audio drift threshold", "threshold" },
2969  { "copyts", OPT_BOOL | OPT_EXPERT, { &copy_ts },
2970  "copy timestamps" },
2971  { "start_at_zero", OPT_BOOL | OPT_EXPERT, { &start_at_zero },
2972  "shift input timestamps to start at 0 when using copyts" },
2973  { "copytb", HAS_ARG | OPT_INT | OPT_EXPERT, { &copy_tb },
2974  "copy input stream time base when stream copying", "mode" },
2975  { "shortest", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
2976  OPT_OUTPUT, { .off = OFFSET(shortest) },
2977  "finish encoding within shortest input" },
2978  { "apad", OPT_STRING | HAS_ARG | OPT_SPEC |
2979  OPT_OUTPUT, { .off = OFFSET(apad) },
2980  "audio pad", "" },
2981  { "dts_delta_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &dts_delta_threshold },
2982  "timestamp discontinuity delta threshold", "threshold" },
2983  { "dts_error_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &dts_error_threshold },
2984  "timestamp error delta threshold", "threshold" },
2985  { "xerror", OPT_BOOL | OPT_EXPERT, { &exit_on_error },
2986  "exit on error", "error" },
2987  { "copyinkf", OPT_BOOL | OPT_EXPERT | OPT_SPEC |
2988  OPT_OUTPUT, { .off = OFFSET(copy_initial_nonkeyframes) },
2989  "copy initial non-keyframes" },
2990  { "copypriorss", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(copy_prior_start) },
2991  "copy or discard frames before start time" },
2992  { "frames", OPT_INT64 | HAS_ARG | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(max_frames) },
2993  "set the number of frames to output", "number" },
2994  { "tag", OPT_STRING | HAS_ARG | OPT_SPEC |
2995  OPT_EXPERT | OPT_OUTPUT | OPT_INPUT, { .off = OFFSET(codec_tags) },
2996  "force codec tag/fourcc", "fourcc/tag" },
2997  { "q", HAS_ARG | OPT_EXPERT | OPT_DOUBLE |
2998  OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(qscale) },
2999  "use fixed quality scale (VBR)", "q" },
3000  { "qscale", HAS_ARG | OPT_EXPERT | OPT_PERFILE |
3001  OPT_OUTPUT, { .func_arg = opt_qscale },
3002  "use fixed quality scale (VBR)", "q" },
3003  { "profile", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_profile },
3004  "set profile", "profile" },
3005  { "filter", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filters) },
3006  "set stream filtergraph", "filter_graph" },
3007  { "filter_script", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filter_scripts) },
3008  "read stream filtergraph description from a file", "filename" },
3009  { "reinit_filter", HAS_ARG | OPT_INT | OPT_SPEC | OPT_INPUT, { .off = OFFSET(reinit_filters) },
3010  "reinit filtergraph on input parameter changes", "" },
3011  { "filter_complex", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex },
3012  "create a complex filtergraph", "graph_description" },
3013  { "lavfi", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex },
3014  "create a complex filtergraph", "graph_description" },
3015  { "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script },
3016  "read complex filtergraph description from a file", "filename" },
3017  { "stats", OPT_BOOL, { &print_stats },
3018  "print progress report during encoding", },
3019  { "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
3020  OPT_OUTPUT, { .func_arg = opt_attach },
3021  "add an attachment to the output file", "filename" },
3022  { "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC |
3023  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(dump_attachment) },
3024  "extract an attachment into a file", "filename" },
3025  { "debug_ts", OPT_BOOL | OPT_EXPERT, { &debug_ts },
3026  "print timestamp debugging info" },
3027  { "max_error_rate", HAS_ARG | OPT_FLOAT, { &max_error_rate },
3028  "maximum error rate", "ratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success." },
3029  { "discard", OPT_STRING | HAS_ARG | OPT_SPEC |
3030  OPT_INPUT, { .off = OFFSET(discard) },
3031  "discard", "" },
3032  { "disposition", OPT_STRING | HAS_ARG | OPT_SPEC |
3033  OPT_OUTPUT, { .off = OFFSET(disposition) },
3034  "disposition", "" },
3035  { "thread_queue_size", HAS_ARG | OPT_INT | OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
3036  { .off = OFFSET(thread_queue_size) },
3037  "set the maximum number of queued packets from the demuxer" },
3038 
3039  /* video options */
3040  { "vframes", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_frames },
3041  "set the number of video frames to output", "number" },
3042  { "r", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
3043  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_rates) },
3044  "set frame rate (Hz value, fraction or abbreviation)", "rate" },
3046  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_sizes) },
3047  "set frame size (WxH or abbreviation)", "size" },
3048  { "aspect", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
3049  OPT_OUTPUT, { .off = OFFSET(frame_aspect_ratios) },
3050  "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" },
3051  { "pix_fmt", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
3052  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_pix_fmts) },
3053  "set pixel format", "format" },
3054  { "bits_per_raw_sample", OPT_VIDEO | OPT_INT | HAS_ARG, { &frame_bits_per_raw_sample },
3055  "set the number of bits per raw sample", "number" },
3056  { "intra", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &intra_only },
3057  "deprecated use -g 1" },
3059  "disable video" },
3060  { "rc_override", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
3061  OPT_OUTPUT, { .off = OFFSET(rc_overrides) },
3062  "rate control override for specific intervals", "override" },
3063  { "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_INPUT |
3064  OPT_OUTPUT, { .func_arg = opt_video_codec },
3065  "force video codec ('copy' to copy stream)", "codec" },
3066  { "sameq", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_sameq },
3067  "Removed" },
3068  { "same_quant", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_sameq },
3069  "Removed" },
3070  { "timecode", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_timecode },
3071  "set initial TimeCode value.", "hh:mm:ss[:;.]ff" },
3072  { "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT | OPT_OUTPUT, { .off = OFFSET(pass) },
3073  "select the pass number (1 to 3)", "n" },
3074  { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC |
3075  OPT_OUTPUT, { .off = OFFSET(passlogfiles) },
3076  "select two pass log file name prefix", "prefix" },
3077  { "deinterlace", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_deinterlace },
3078  "this option is deprecated, use the yadif filter instead" },
3079  { "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr },
3080  "calculate PSNR of compressed frames" },
3081  { "vstats", OPT_VIDEO | OPT_EXPERT , { &opt_vstats },
3082  "dump video coding statistics to file" },
3083  { "vstats_file", OPT_VIDEO | HAS_ARG | OPT_EXPERT , { opt_vstats_file },
3084  "dump video coding statistics to file", "file" },
3085  { "vf", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_filters },
3086  "set video filters", "filter_graph" },
3087  { "intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
3088  OPT_OUTPUT, { .off = OFFSET(intra_matrices) },
3089  "specify intra matrix coeffs", "matrix" },
3090  { "inter_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
3091  OPT_OUTPUT, { .off = OFFSET(inter_matrices) },
3092  "specify inter matrix coeffs", "matrix" },
3093  { "chroma_intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_STRING | OPT_SPEC |
3094  OPT_OUTPUT, { .off = OFFSET(chroma_intra_matrices) },
3095  "specify intra matrix coeffs", "matrix" },
3096  { "top", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_INT| OPT_SPEC |
3097  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(top_field_first) },
3098  "top=1/bottom=0/auto=-1 field first", "" },
3099  { "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
3100  OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_old2new },
3101  "force video tag/fourcc", "fourcc/tag" },
3102  { "qphist", OPT_VIDEO | OPT_BOOL | OPT_EXPERT , { &qp_hist },
3103  "show QP histogram" },
3104  { "force_fps", OPT_VIDEO | OPT_BOOL | OPT_EXPERT | OPT_SPEC |
3105  OPT_OUTPUT, { .off = OFFSET(force_fps) },
3106  "force the selected framerate, disable the best supported framerate selection" },
3107  { "streamid", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
3108  OPT_OUTPUT, { .func_arg = opt_streamid },
3109  "set the value of an outfile streamid", "streamIndex:value" },
3110  { "force_key_frames", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
3111  OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(forced_key_frames) },
3112  "force key frames at specified timestamps", "timestamps" },
3113  { "ab", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate },
3114  "audio bitrate (please use -b:a)", "bitrate" },
3115  { "b", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate },
3116  "video bitrate (please use -b:v)", "bitrate" },
3117  { "hwaccel", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
3118  OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccels) },
3119  "use HW accelerated decoding", "hwaccel name" },
3120  { "hwaccel_device", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
3121  OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccel_devices) },
3122  "select a device for HW acceleration" "devicename" },
3123 #if HAVE_VDPAU_X11
3124  { "vdpau_api_ver", HAS_ARG | OPT_INT | OPT_EXPERT, { &vdpau_api_ver }, "" },
3125 #endif
3126  { "autorotate", HAS_ARG | OPT_BOOL | OPT_SPEC |
3127  OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) },
3128  "automatically insert correct rotate filters" },
3129 
3130  /* audio options */
3131  { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames },
3132  "set the number of audio frames to output", "number" },
3133  { "aq", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_qscale },
3134  "set audio quality (codec-specific)", "quality", },
3135  { "ar", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC |
3136  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_sample_rate) },
3137  "set audio sampling rate (in Hz)", "rate" },
3138  { "ac", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC |
3139  OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_channels) },
3140  "set number of audio channels", "channels" },
3142  "disable audio" },
3143  { "acodec", OPT_AUDIO | HAS_ARG | OPT_PERFILE |
3144  OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_audio_codec },
3145  "force audio codec ('copy' to copy stream)", "codec" },
3146  { "atag", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
3147  OPT_OUTPUT, { .func_arg = opt_old2new },
3148  "force audio tag/fourcc", "fourcc/tag" },
3149  { "vol", OPT_AUDIO | HAS_ARG | OPT_INT, { &audio_volume },
3150  "change audio volume (256=normal)" , "volume" },
3151  { "sample_fmt", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_SPEC |
3153  "set sample format", "format" },
3154  { "channel_layout", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE |
3155  OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_channel_layout },
3156  "set channel layout", "layout" },
3157  { "af", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_filters },
3158  "set audio filters", "filter_graph" },
3159  { "guess_layout_max", OPT_AUDIO | HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(guess_layout_max) },
3160  "set the maximum number of channels to try to guess the channel layout" },
3161 
3162  /* subtitle options */
3164  "disable subtitle" },
3165  { "scodec", OPT_SUBTITLE | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_subtitle_codec },
3166  "force subtitle codec ('copy' to copy stream)", "codec" },
3167  { "stag", OPT_SUBTITLE | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new }
3168  , "force subtitle tag/fourcc", "fourcc/tag" },
3169  { "fix_sub_duration", OPT_BOOL | OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT, { .off = OFFSET(fix_sub_duration) },
3170  "fix subtitles duration" },
3171  { "canvas_size", OPT_SUBTITLE | HAS_ARG | OPT_STRING | OPT_SPEC | OPT_INPUT, { .off = OFFSET(canvas_sizes) },
3172  "set canvas size (WxH or abbreviation)", "size" },
3173 
3174  /* grab options */
3175  { "vc", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_video_channel },
3176  "deprecated, use -channel", "channel" },
3177  { "tvstd", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_video_standard },
3178  "deprecated, use -standard", "standard" },
3179  { "isync", OPT_BOOL | OPT_EXPERT, { &input_sync }, "this option is deprecated and does nothing", "" },
3180 
3181  /* muxer options */
3182  { "muxdelay", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_max_delay) },
3183  "set the maximum demux-decode delay", "seconds" },
3184  { "muxpreload", OPT_FLOAT | HAS_ARG | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_preload) },
3185  "set the initial demux-decode delay", "seconds" },
3186  { "override_ffserver", OPT_BOOL | OPT_EXPERT | OPT_OUTPUT, { &override_ffserver },
3187  "override the options from ffserver", "" },
3188  { "sdp_file", HAS_ARG | OPT_EXPERT | OPT_OUTPUT, { opt_sdp_file },
3189  "specify a file in which to print sdp information", "file" },
3190 
3191  { "bsf", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(bitstream_filters) },
3192  "A comma-separated list of bitstream filters", "bitstream_filters" },
3193  { "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new },
3194  "deprecated", "audio bitstream_filters" },
3195  { "vbsf", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new },
3196  "deprecated", "video bitstream_filters" },
3197 
3198  { "apre", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
3199  "set the audio options to the indicated preset", "preset" },
3200  { "vpre", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
3201  "set the video options to the indicated preset", "preset" },
3202  { "spre", HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
3203  "set the subtitle options to the indicated preset", "preset" },
3204  { "fpre", HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset },
3205  "set options from indicated preset file", "filename" },
3206  /* data codec support */
3207  { "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_data_codec },
3208  "force data codec ('copy' to copy stream)", "codec" },
3209  { "dn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(data_disable) },
3210  "disable data" },
3211 
3212  { NULL, },
3213 };
unsigned int nb_chapters
Number of chapters in AVChapter array.
Definition: avformat.h:1471
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:909
int parse_optgroup(void *optctx, OptionGroup *g)
Parse an options group and write results into optctx.
Definition: cmdutils.c:402
char * vstats_filename
Definition: ffmpeg_opt.c:79
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:44
int nb_dump_attachment
Definition: ffmpeg.h:120
int guess_input_channel_layout(InputStream *ist)
Definition: ffmpeg.c:1824
void show_usage(void)
Definition: ffmpeg_opt.c:2761
int nb_metadata
Definition: ffmpeg.h:158
int nb_streamid_map
Definition: ffmpeg.h:155
#define NULL
Definition: coverity.c:32
const char const char void * val
Definition: avisynth_c.h:634
int audio_sync_method
Definition: ffmpeg_opt.c:87
AVDictionary * resample_opts
Definition: cmdutils.h:279
int keep_pix_fmt
Definition: ffmpeg.h:446
const char * s
Definition: avisynth_c.h:631
Bytestream IO Context.
Definition: avio.h:111
float mux_preload
Definition: ffmpeg.h:144
#define OPT_EXPERT
Definition: cmdutils.h:163
int start_at_zero
Definition: ffmpeg_opt.c:96
int64_t recording_time
desired length of the resulting file in microseconds == AV_TIME_BASE units
Definition: ffmpeg.h:464
void term_init(void)
Definition: ffmpeg.c:328
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition: aviobuf.c:281
static void choose_encoder(OptionsContext *o, AVFormatContext *s, OutputStream *ost)
Definition: ffmpeg_opt.c:1080
int nb_outputs
Definition: ffmpeg.h:244
int copy_tb
Definition: ffmpeg_opt.c:97
AVDictionary * swr_opts
Definition: ffmpeg.h:434
int qp_hist
Definition: ffmpeg_opt.c:101
AVDictionary * swr_opts
Definition: cmdutils.h:281
int resample_channels
Definition: ffmpeg.h:288
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *avctx, AVCodec *codec, enum AVPixelFormat target)
Definition: ffmpeg_filter.c:41
#define av_realloc_f(p, o, n)
int av_parse_video_rate(AVRational *rate, const char *arg)
Parse str and store the detected values in *rate.
Definition: parseutils.c:169
void term_exit(void)
Definition: ffmpeg.c:307
int stream_copy
Definition: ffmpeg.h:440
AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
Definition: utils.c:2932
static int opt_data_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2458
int do_benchmark
Definition: ffmpeg_opt.c:91
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition: avformat.h:1520
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
Definition: aviobuf.c:1125
AVOption.
Definition: opt.h:255
AVRational frame_rate
Definition: ffmpeg.h:405
int audio_channels
Definition: rtp.c:40
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:138
static void init_output_filter(OutputFilter *ofilter, OptionsContext *o, AVFormatContext *oc)
Definition: ffmpeg_opt.c:1734
char * filters
filtergraph associated to the -filter option
Definition: ffmpeg.h:429
static AVInputFormat * file_iformat
Definition: ffplay.c:303
#define OPT_VIDEO
Definition: cmdutils.h:165
#define CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:737
int data_disable
Definition: ffmpeg.h:151
float mux_max_delay
Definition: ffmpeg.h:145
int accurate_seek
Definition: ffmpeg.h:352
int * streamid_map
Definition: ffmpeg.h:154
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
int video_sync_method
Definition: ffmpeg_opt.c:88
Main libavfilter public API header.
int nb_stream_maps
Definition: ffmpeg.h:130
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
Definition: utils.c:402
static void assert_file_overwrite(const char *filename)
Definition: ffmpeg_opt.c:739
int ostream_idx
Definition: ffmpeg.h:87
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
Definition: dict.h:81
static int input_sync
Definition: ffmpeg_opt.c:111
const char * g
Definition: vf_curves.c:108
#define CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:736
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:733
AVRational framerate
Definition: ffmpeg.h:277
void choose_sample_fmt(AVStream *st, AVCodec *codec)
Definition: ffmpeg_filter.c:79
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL.
Definition: graphparser.c:184
enum AVCodecID video_codec
default video codec
Definition: avformat.h:524
int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the given stream matches a stream specifier.
Definition: cmdutils.c:1986
#define OPT_AUDIO
Definition: cmdutils.h:166
AVFilterInOut * out_tmp
Definition: ffmpeg.h:231
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx)
Get the type of an AVFilterPad.
Definition: avfilter.c:995
int qscale
Definition: avcodec.h:691
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:914
int num
numerator
Definition: rational.h:44
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:290
int rotate_overridden
Definition: ffmpeg.h:408
int index
stream index in AVFormatContext
Definition: avformat.h:843
int nb_frame_pix_fmts
Definition: ffmpeg.h:109
#define AVIO_FLAG_READ
read-only
Definition: avio.h:460
int do_deinterlace
Definition: ffmpeg_opt.c:90
static int opt_audio_filters(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2590
static OutputStream * new_unknown_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1570
#define AVIO_FLAG_WRITE
write-only
Definition: avio.h:461
static int read_ffserver_streams(OptionsContext *o, AVFormatContext *s, const char *filename)
Definition: ffmpeg_opt.c:1684
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
Definition: avcodec.h:1623
#define AV_CODEC_PROP_TEXT_SUB
Subtitle codec is text based.
Definition: avcodec.h:620
AVBitStreamFilterContext * bitstream_filters
Definition: ffmpeg.h:395
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:1444
external API header
const char * arg
Definition: cmdutils.h:272
static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2661
#define OPT_DATA
Definition: cmdutils.h:172
static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata)
Definition: ffmpeg_opt.c:1641
enum AVMediaType type
Definition: avcodec.h:3194
#define FF_ARRAY_ELEMS(a)
static int file_overwrite
Definition: ffmpeg_opt.c:108
static OutputStream * new_output_stream(OptionsContext *o, AVFormatContext *oc, enum AVMediaType type, int source_index)
Definition: ffmpeg_opt.c:1097
discard all
Definition: avcodec.h:669
int64_t input_ts_offset
Definition: ffmpeg.h:342
const AVClass * sws_get_class(void)
Get the AVClass for swsContext.
Definition: options.c:93
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:2727
int nb_input_streams
Definition: ffmpeg.c:138
static int audio_disable
Definition: ffplay.c:312
const char * name
Definition: ffmpeg.h:69
AVDictionary * metadata
Definition: avformat.h:1239
static const char * audio_codec_name
Definition: ffplay.c:333
#define OPT_DOUBLE
Definition: cmdutils.h:180
enum AVCodecID subtitle_codec_id
Forced subtitle codec_id.
Definition: avformat.h:1440
#define OPT_FLOAT
Definition: cmdutils.h:168
AVCodec.
Definition: avcodec.h:3181
#define VSYNC_VFR
Definition: ffmpeg.h:54
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
Definition: aviobuf.c:1113
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
Copy the settings of the source AVCodecContext into the destination AVCodecContext.
Definition: options.c:180
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:1994
int64_t start_time
start time in microseconds == AV_TIME_BASE units
Definition: ffmpeg.h:465
void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c)
int index
Definition: ffmpeg.h:235
static int opt_preset(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2484
Definition: ftp.c:31
SpecifierOpt * frame_pix_fmts
Definition: ffmpeg.h:108
static int opt_data_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:219
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avcodec.h:1369
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
#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:706
static int opt_audio_qscale(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2655
Format I/O context.
Definition: avformat.h:1272
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext.
Definition: options.c:256
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:405
enum HWAccelID id
Definition: ffmpeg.h:71
#define CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:746
uint64_t av_get_channel_layout(const char *name)
Return a channel layout id that matches name, or 0 if no match is found.
void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val)
static const uint8_t frame_sizes[]
Definition: rtpdec_qcelp.c:24
static int do_psnr
Definition: ffmpeg_opt.c:110
char * logfile_prefix
Definition: ffmpeg.h:424
#define AVFMT_FLAG_NONBLOCK
Do not block when reading packets from input.
Definition: avformat.h:1386
AVFilterPad * output_pads
array of output pads
Definition: avfilter.h:647
int vdpau_init(AVCodecContext *s)
Definition: ffmpeg_vdpau.c:352
int user_set_discard
Definition: ffmpeg.h:251
static int ignore_unknown_streams
Definition: ffmpeg_opt.c:114
static int64_t start_time
Definition: ffplay.c:320
int copy_initial_nonkeyframes
Definition: ffmpeg.h:442
if()
Definition: avfilter.c:975
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1993
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:532
uint8_t
static int nb_streams
Definition: ffprobe.c:226
#define av_malloc(s)
Opaque data information usually continuous.
Definition: avutil.h:196
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:533
#define OPT_OUTPUT
Definition: cmdutils.h:182
AVOptions.
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS.
Definition: avformat.h:642
#define HAS_ARG
Definition: cmdutils.h:161
static int open_input_file(OptionsContext *o, const char *filename)
Definition: ffmpeg_opt.c:800
static const OptionGroupDef groups[]
Definition: ffmpeg_opt.c:2773
static int opt_sdp_file(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:389
AVDictionary * opts
Definition: ffmpeg.h:462
#define CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
Definition: avcodec.h:758
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:67
uint16_t * chroma_intra_matrix
custom intra quantization matrix Code outside libavcodec should access this field using av_codec_g/se...
Definition: avcodec.h:3130
int id
unique ID to identify the chapter
Definition: avformat.h:1236
static int opt_vsync(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2596
int id
Format-specific stream ID.
Definition: avformat.h:849
#define OPT_OFFSET
Definition: cmdutils.h:175
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1355
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
Definition: utils.c:3672
int nb_max_frames
Definition: ffmpeg.h:160
int shortest
Definition: ffmpeg.h:468
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1340
static int opt_vstats(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2435
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition: options.c:107
int channel_idx
Definition: ffmpeg.h:86
const char * name
Definition: avcodec.h:5082
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:653
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:39
int nb_streams
Definition: ffmpeg.h:348
int flags
Flags modifying the (de)muxer behaviour.
Definition: avformat.h:1383
int sync_file_index
Definition: ffmpeg.h:80
AVDictionary * resample_opts
Definition: ffmpeg.h:435
int seek_timestamp
Definition: ffmpeg.h:95
list ifile
Definition: normalize.py:6
uint32_t tag
Definition: movenc.c:1333
#define OPT_SPEC
Definition: cmdutils.h:176
int nb_input_files
Definition: ffmpeg.c:140
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:192
int resample_sample_rate
Definition: ffmpeg.h:287
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext.
Definition: options.c:130
int print_stats
Definition: ffmpeg_opt.c:100
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:164
AVCodec * dec
Definition: ffmpeg.h:257
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
Definition: aviobuf.c:177
const OptionDef options[]
Definition: ffmpeg_opt.c:2875
int top_field_first
Definition: ffmpeg.h:278
int nb_output_streams
Definition: ffmpeg.c:143
int file_index
Definition: ffmpeg.h:248
void av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:213
struct AVBitStreamFilterContext * next
Definition: avcodec.h:5077
int resample_pix_fmt
Definition: ffmpeg.h:284
int resample_height
Definition: ffmpeg.h:282
enum AVCodecID video_codec_id
Forced video codec_id.
Definition: avformat.h:1428
int64_t filter_in_rescale_delta_last
Definition: ffmpeg.h:271
#define av_log(a,...)
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
Definition: opt.h:285
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:537
static int opt_video_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:207
float quality_factor
Definition: avcodec.h:692
static int opt_qscale(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2557
unsigned m
Definition: audioconvert.c:187
struct AVOutputFormat * oformat
The output container format.
Definition: avformat.h:1291
AVDictionary ** setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts)
Setup AVCodecContext options for avformat_find_stream_info().
Definition: cmdutils.c:2051
AVCodec * avcodec_find_encoder_by_name(const char *name)
Find a registered encoder with the specified name.
Definition: utils.c:2937
AVDictionary * format_opts
Definition: cmdutils.c:68
static OutputStream * new_subtitle_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1591
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:148
#define OPT_SUBTITLE
Definition: cmdutils.h:169
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:140
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output)
Print detailed information about the input or output format, such as duration, bitrate, streams, container, programs, metadata, side data, codec and time base.
Definition: dump.c:477
enum AVCodecID id
Definition: avcodec.h:3195
int rate_emu
Definition: ffmpeg.h:351
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:213
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:102
static int opt_profile(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2572
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
#define AV_DICT_MATCH_CASE
Only get an entry with exact-case key match.
Definition: dict.h:71
AVDictionary * metadata
Metadata that applies to the whole file.
Definition: avformat.h:1482
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:1533
static int configure_complex_filters(void)
Definition: ffmpeg_opt.c:1780
enum AVPixelFormat hwaccel_pix_fmt
Definition: ffmpeg.h:324
FilterGraph ** filtergraphs
Definition: ffmpeg.c:147
const AVIOInterruptCB int_cb
Definition: ffmpeg.c:424
static int open_files(OptionGroupList *l, const char *inout, int(*open_file)(OptionsContext *, const char *))
Definition: ffmpeg_opt.c:2778
static int opt_subtitle_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:213
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering
Definition: opt.h:302
int64_t start_time
Definition: ffmpeg.h:94
static int opt_video_channel(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:189
#define AVERROR(e)
Definition: error.h:43
int64_t last_mux_dts
Definition: ffmpeg.h:394
static int opt_recording_timestamp(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:520
void av_format_set_data_codec(AVFormatContext *s, AVCodec *c)
int ofile_idx
Definition: ffmpeg.h:87
int64_t sws_flags
Definition: ffmpeg.h:432
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
Definition: aviobuf.c:937
static int autorotate
Definition: ffplay.c:344
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
AudioChannelMap * audio_channel_maps
Definition: ffmpeg.h:131
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
Definition: dict.c:199
int debug_ts
Definition: ffmpeg_opt.c:98
const char * arg
Definition: jacosubdec.c:66
int flags
CODEC_FLAG_*.
Definition: avcodec.h:1335
const char * name
Definition: cmdutils.h:159
static int opt_bitrate(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2541
int parse_option(void *optctx, const char *opt, const char *arg, const OptionDef *options)
Parse one given option.
Definition: cmdutils.c:338
AVChapter ** chapters
Definition: avformat.h:1472
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 'arg' parameter.
Definition: ffmpeg_opt.c:403
#define CODEC_FLAG_QSCALE
Use fixed qscale.
Definition: avcodec.h:712
simple assert() macros that are a bit more flexible than ISO C assert().
const char * name
Name of the codec implementation.
Definition: avcodec.h:3188
static int opt_old2new(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2532
void remove_avoptions(AVDictionary **a, AVDictionary *b)
Definition: ffmpeg.c:538
int video_disable
Definition: ffmpeg.h:148
static int opt_sameq(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:180
HW acceleration through VDA, data[3] contains a CVPixelBufferRef.
Definition: pixfmt.h:232
int flags
Definition: cmdutils.h:160
static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
Definition: ffmpeg_opt.c:430
enum AVCodecID codec_id
Definition: mov_chan.c:433
int force_fps
Definition: ffmpeg.h:406
GLsizei count
Definition: opengl_enc.c:109
#define FFMAX(a, b)
Definition: common.h:64
static void uninit_options(OptionsContext *o)
Definition: ffmpeg_opt.c:117
Libavcodec external API header.
StreamMap * stream_maps
Definition: ffmpeg.h:129
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:83
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:149
uint64_t limit_filesize
Definition: ffmpeg.h:143
const char * format
Definition: ffmpeg.h:96
int av_codec_get_lowres(const AVCodecContext *avctx)
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
Definition: codec_desc.c:2891
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2046
#define pass
Definition: fft_template.c:509
int avio_r8(AVIOContext *s)
Definition: aviobuf.c:528
AVCodecContext * codec
Codec context associated with this stream.
Definition: avformat.h:861
OutputFilter * filter
Definition: ffmpeg.h:427
int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance)
Test if the given container can store a codec.
Definition: utils.c:4106
int ffmpeg_parse_options(int argc, char **argv)
Definition: ffmpeg_opt.c:2811
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
Definition: avcodec.h:576
AVRational frame_aspect_ratio
Definition: ffmpeg.h:410
static AVDictionary * strip_specifiers(AVDictionary *dict)
Definition: ffmpeg_opt.c:163
char * av_asprintf(const char *fmt,...)
Definition: avstring.c:113
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:1484
static const char * subtitle_codec_name
Definition: ffplay.c:334
static int subtitle_disable
Definition: ffplay.c:314
int file_index
Definition: ffmpeg.h:78
int nb_audio_channel_maps
Definition: ffmpeg.h:132
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1328
int nb_attachments
Definition: ffmpeg.h:137
OptionGroup * groups
Definition: cmdutils.h:291
AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format.
Definition: format.c:160
static int opt_video_filters(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2584
int nb_output_files
Definition: ffmpeg.c:145
int rc_override_count
ratecontrol override, see RcOverride
Definition: avcodec.h:2311
size_t off
Definition: cmdutils.h:186
char * linklabel
Definition: ffmpeg.h:82
option
Definition: libwebpenc.c:92
int void avio_flush(AVIOContext *s)
Force flushing of buffered data.
Definition: aviobuf.c:197
audio channel layout utility functions
char filename[1024]
input or output filename
Definition: avformat.h:1348
#define AV_TIME_BASE
Internal time base represented as integer.
Definition: avutil.h:247
#define FFMIN(a, b)
Definition: common.h:66
enum AVCodecID audio_codec_id
Forced audio codec_id.
Definition: avformat.h:1434
SpecifierOpt * audio_channels
Definition: ffmpeg.h:100
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition: avstring.c:213
static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
Definition: ffmpeg_opt.c:579
#define VSYNC_AUTO
Definition: ffmpeg.h:51
int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
Definition: utils.c:3243
int nb_audio_sample_rate
Definition: ffmpeg.h:103
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition: options.c:147
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:602
static int opt_progress(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2857
int exit_on_error
Definition: ffmpeg_opt.c:99
int metadata_chapters_manual
Definition: ffmpeg.h:135
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.
Definition: format.c:129
struct OutputStream * ost
Definition: ffmpeg.h:226
ret
Definition: avfilter.c:974
int accurate_seek
Definition: ffmpeg.h:114
int width
picture width / height.
Definition: avcodec.h:1414
AVBitStreamFilterContext * av_bitstream_filter_init(const char *name)
Create and initialize a bitstream filter context given a bitstream filter name.
static int open_output_file(OptionsContext *o, const char *filename)
Definition: ffmpeg_opt.c:1791
char * apad
Definition: ffmpeg.h:437
GLsizei GLboolean const GLfloat * value
Definition: opengl_enc.c:109
SpecifierOpt * audio_sample_rate
Definition: ffmpeg.h:102
char * sdp_filename
Definition: ffmpeg_opt.c:80
#define AVFMT_GLOBALHEADER
Format wants global header.
Definition: avformat.h:471
const char * name
Definition: avformat.h:513
int dxva2_init(AVCodecContext *s)
Definition: ffmpeg_dxva2.c:598
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: error.h:119
SpecifierOpt * dump_attachment
Definition: ffmpeg.h:119
A list of option groups that all have the same group type (e.g.
Definition: cmdutils.h:288
int copy_ts
Definition: ffmpeg_opt.c:95
#define OPT_EXIT
Definition: cmdutils.h:171
static AVCodec * find_codec_or_die(const char *name, enum AVMediaType type, int encoder)
Definition: ffmpeg_opt.c:535
int nb_filtergraphs
Definition: ffmpeg.c:148
int start_frame
Definition: avcodec.h:689
float frame_drop_threshold
Definition: ffmpeg_opt.c:89
SpecifierOpt * metadata_map
Definition: ffmpeg.h:185
static int open_file(AVFormatContext *avf, unsigned fileno)
Definition: concatdec.c:278
#define OPT_INT64
Definition: cmdutils.h:170
#define AV_DICT_APPEND
If the entry already exists, append to it.
Definition: dict.h:82
int64_t max_frames
Definition: ffmpeg.h:398
char * specifier
stream/chapter/program/...
Definition: cmdutils.h:148
float u
int audio_channels_mapped
Definition: ffmpeg.h:422
int n
Definition: avisynth_c.h:547
AVDictionary * metadata
Definition: avformat.h:916
Usually treated as AVMEDIA_TYPE_DATA.
Definition: avutil.h:193
Opaque data information usually sparse.
Definition: avutil.h:198
static void init_options(OptionsContext *o)
Definition: ffmpeg_opt.c:149
void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c)
const AVClass * swr_get_class(void)
Get the AVClass for SwrContext.
Definition: options.c:143
int opt_timelimit(void *optctx, const char *opt, const char *arg)
Limit the execution time.
Definition: cmdutils.c:1019
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
Definition: opt.c:1455
SpecifierOpt * frame_sizes
Definition: ffmpeg.h:106
int stream_idx
Definition: ffmpeg.h:86
const AVCodecDescriptor * avcodec_descriptor_get_by_name(const char *name)
Definition: codec_desc.c:2910
AVFilterContext * filter_ctx
filter context associated to this input/output
Definition: avfilter.h:1356
int do_hex_dump
Definition: ffmpeg_opt.c:93
RcOverride * rc_override
Definition: avcodec.h:2312
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition: avformat.h:819
void exit_program(int ret)
Wraps exit with a program-specific cleanup routine.
Definition: cmdutils.c:123
int do_pkt_dump
Definition: ffmpeg_opt.c:94
uint8_t * str
Definition: cmdutils.h:150
Stream structure.
Definition: avformat.h:842
const AVClass * avfilter_get_class(void)
Definition: avfilter.c:1176
A linked-list of the inputs/outputs of the filter chain.
Definition: avfilter.h:1351
int64_t end
chapter start/end time in time_base units
Definition: avformat.h:1238
int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags)
Parse the key/value pairs list and add the parsed entries to a dictionary.
Definition: dict.c:176
int fix_sub_duration
Definition: ffmpeg.h:291
int av_opt_get_int(void *obj, const char *name, int search_flags, int64_t *out_val)
Definition: opt.c:823
#define VSYNC_DROP
Definition: ffmpeg.h:56
int64_t recording_time
Definition: ffmpeg.h:347
int do_benchmark_all
Definition: ffmpeg_opt.c:92
Definition: ffmpeg.h:68
SpecifierOpt * frame_rates
Definition: ffmpeg.h:104
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
int frame_size
Definition: mxfenc.c:1803
int file_idx
Definition: ffmpeg.h:86
int ost_index
Definition: ffmpeg.h:463
struct InputStream * sync_ist
Definition: ffmpeg.h:388
enum AVMediaType codec_type
Definition: avcodec.h:1249
double ts_scale
Definition: ffmpeg.h:273
int64_t recording_time
Definition: ffmpeg.h:141
int chapters_input_file
Definition: ffmpeg.h:139
int64_t stop_time
Definition: ffmpeg.h:142
enum AVCodecID codec_id
Definition: avcodec.h:1258
static int intra_only
Definition: ffmpeg_opt.c:107
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:253
char * av_strdup(const char *s)
Duplicate the string s.
Definition: mem.c:265
int stdin_interaction
Definition: ffmpeg_opt.c:102
int sample_rate
samples per second
Definition: avcodec.h:1985
AVIOContext * pb
I/O context.
Definition: avformat.h:1314
#define SET_DICT(type, meta, context, index)
int ist_index
Definition: ffmpeg.h:341
const char * graph_desc
Definition: ffmpeg.h:236
int guess_layout_max
Definition: ffmpeg.h:279
int64_t start_time
Definition: ffmpeg.h:345
static int override_ffserver
Definition: ffmpeg_opt.c:112
void avio_w8(AVIOContext *s, int b)
Definition: aviobuf.c:155
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:291
main external API structure.
Definition: avcodec.h:1241
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition: utils.c:2951
int rate_emu
Definition: ffmpeg.h:113
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
Definition: utils.c:258
void av_format_set_video_codec(AVFormatContext *s, AVCodec *c)
int metadata_streams_manual
Definition: ffmpeg.h:134
const char * attachment_filename
Definition: ffmpeg.h:441
int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition: avcodec.h:1273
a very simple circular buffer FIFO implementation
#define AV_CODEC_PROP_BITMAP_SUB
Subtitle codec is bitmap based Decoded AVSubtitle data can be read from the AVSubtitleRect->pict fiel...
Definition: avcodec.h:615
void assert_avoptions(AVDictionary *m)
Definition: ffmpeg.c:547
AVCodecContext * enc_ctx
Definition: ffmpeg.h:396
int audio_disable
Definition: ffmpeg.h:149
void * buf
Definition: avisynth_c.h:553
int64_t input_ts_offset
Definition: ffmpeg.h:112
GLint GLenum type
Definition: opengl_enc.c:105
int extradata_size
Definition: avcodec.h:1356
float audio_drift_threshold
Definition: ffmpeg_opt.c:82
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
Definition: ffmpeg_opt.c:2693
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:69
struct AVBitStreamFilter * filter
Definition: avcodec.h:5075
uint16_t * intra_matrix
custom intra quantization matrix
Definition: avcodec.h:1787
AVCodecContext * dec_ctx
Definition: ffmpeg.h:256
static int opt_map_channel(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:330
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:1936
AVStream * st
Definition: ffmpeg.h:249
int * audio_channels_map
Definition: ffmpeg.h:421
#define VSYNC_PASSTHROUGH
Definition: ffmpeg.h:52
Describe the class of an AVClass context structure.
Definition: log.h:67
int configure_filtergraph(FilterGraph *fg)
#define NTSC
Definition: bktr.c:67
OutputStream ** output_streams
Definition: ffmpeg.c:142
int index
Definition: gxfenc.c:89
int pad_idx
index of the filt_ctx pad to use for linking
Definition: avfilter.h:1359
static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2676
static char * get_ost_filters(OptionsContext *o, AVFormatContext *oc, OutputStream *ost)
Definition: ffmpeg_opt.c:1286
enum AVCodecID subtitle_codec
default subtitle codec
Definition: avformat.h:525
rational number numerator/denominator
Definition: rational.h:43
int file_index
Definition: ffmpeg.h:380
int metadata_global_manual
Definition: ffmpeg.h:133
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface.
Definition: pixfmt.h:211
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:286
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:152
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:2071
#define OPT_STRING
Definition: cmdutils.h:164
char * disposition
Definition: ffmpeg.h:444
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
AVMediaType
Definition: avutil.h:192
static OutputStream * new_audio_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1484
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:914
#define AVFMT_SEEK_TO_PTS
Seeking is based on PTS.
Definition: avformat.h:506
AVDictionary * decoder_opts
Definition: ffmpeg.h:276
int shortest
Definition: ffmpeg.h:146
#define MAX_STREAMS
Definition: ffmpeg.h:58
int autorotate
Definition: ffmpeg.h:281
const char * name
Name of the codec described by this descriptor.
Definition: avcodec.h:568
#define snprintf
Definition: snprintf.h:34
int av_opt_eval_int(void *obj, const AVOption *o, const char *val, int *int_out)
int vdpau_api_ver
Definition: ffmpeg_vdpau.c:62
int64_t ts_offset
Definition: ffmpeg.h:343
char * filters_script
filtergraph script associated to the -filter_script option
Definition: ffmpeg.h:430
int audio_volume
Definition: ffmpeg_opt.c:86
misc parsing utilities
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer. ...
Definition: pixfmt.h:137
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:93
uint16_t * inter_matrix
custom inter quantization matrix
Definition: avcodec.h:1794
static int opt_channel_layout(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2619
int end_frame
Definition: avcodec.h:690
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.
Definition: utils.c:2162
static int opt_audio_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:201
This struct describes the properties of a single codec described by an AVCodecID. ...
Definition: avcodec.h:560
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:131
static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2428
char * name
unique name for this input/output in the list
Definition: avfilter.h:1353
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
Definition: avio.c:398
int nb_audio_channels
Definition: ffmpeg.h:101
#define OPT_TIME
Definition: cmdutils.h:179
int source_index
Definition: ffmpeg.h:382
int copy_prior_start
Definition: ffmpeg.h:443
SpecifierOpt * metadata
Definition: ffmpeg.h:157
static AVCodec * choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st)
Definition: ffmpeg_opt.c:564
int global_quality
Global quality for codecs which cannot change it per frame.
Definition: avcodec.h:1321
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.
Definition: utils.c:72
AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition: utils.c:2956
static int flags
Definition: cpu.c:47
static OutputStream * new_video_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1320
static int opt_attach(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:322
static void parse_matrix_coeffs(uint16_t *dest, const char *str)
Definition: ffmpeg_opt.c:1240
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds. ...
Definition: avformat.h:1357
int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
Put a description of the AVERROR code errnum in errbuf.
Definition: error.c:68
#define OFFSET(x)
Definition: ffmpeg_opt.c:2874
int resample_sample_fmt
Definition: ffmpeg.h:286
static int opt_video_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2446
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:184
int64_t start
Definition: avformat.h:1238
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:1435
OSTFinished finished
Definition: ffmpeg.h:438
char * forced_keyframes
Definition: ffmpeg.h:416
int nb_frame_rates
Definition: ffmpeg.h:105
#define OPT_BOOL
Definition: cmdutils.h:162
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:34
int resample_width
Definition: ffmpeg.h:283
float dts_error_threshold
Definition: ffmpeg_opt.c:84
int vda_init(AVCodecContext *s)
Definition: ffmpeg_vda.c:103
#define CODEC_FLAG_EMU_EDGE
Definition: avcodec.h:744
Main libavformat public API header.
static uint8_t * get_line(AVIOContext *s)
Definition: ffmpeg_opt.c:1035
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:1032
preset
Definition: vf_curves.c:46
static int get_preset_file_2(const char *preset_name, const char *codec_name, AVIOContext **s)
Definition: ffmpeg_opt.c:1054
struct FilterGraph * graph
Definition: ffmpeg.h:227
static uint8_t * read_file(const char *filename)
Definition: ffmpeg_opt.c:1258
uint64_t limit_filesize
Definition: ffmpeg.h:466
#define OPT_INT
Definition: cmdutils.h:167
static int opt_target(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2285
AVDictionary * codec_opts
Definition: cmdutils.c:68
AVIOContext * progress_avio
Definition: ffmpeg.c:131
AVDictionary * format_opts
Definition: cmdutils.h:278
static int opt_video_standard(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:195
int reinit_filters
Definition: ffmpeg.h:312
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:465
int nb_frame_sizes
Definition: ffmpeg.h:107
OptionGroupList * groups
Definition: cmdutils.h:298
OptionGroup * g
Definition: ffmpeg.h:91
#define VSYNC_CFR
Definition: ffmpeg.h:53
static int video_disable
Definition: ffplay.c:313
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
Definition: utils.c:3024
static double c[64]
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set that converts the value to a string and stores it...
Definition: dict.c:143
#define AVFMT_NOSTREAMS
Format does not require any streams.
Definition: avformat.h:477
AVStream * st
Definition: muxing.c:54
int disposition
AV_DISPOSITION_* bit field.
Definition: avformat.h:905
OptionGroup global_opts
Definition: cmdutils.h:296
const char ** attachments
Definition: ffmpeg.h:136
#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 poin...
Definition: opt.h:611
AVRational time_base
time base in which the start/end timestamps are specified
Definition: avformat.h:1237
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:206
char * key
Definition: dict.h:87
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...
Definition: options.c:90
struct AVInputFormat * iformat
The input container format.
Definition: avformat.h:1284
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
Definition: utils.c:3644
AVFormatContext * ctx
Definition: ffmpeg.h:338
int stream_index
Definition: ffmpeg.h:79
AVCodec * enc
Definition: ffmpeg.h:397
int nb_metadata_map
Definition: ffmpeg.h:186
int frame_bits_per_raw_sample
Definition: ffmpeg_opt.c:103
enum AVCodecID id
Definition: avcodec.h:561
#define GROW_ARRAY(array, nb_elems)
Definition: cmdutils.h:579
pixel format definitions
char * avfilter
Definition: ffmpeg.h:428
#define av_free(p)
enum AVCodecID data_codec_id
Forced Data codec_id.
Definition: avformat.h:1793
char * value
Definition: dict.h:88
int eof_reached
true if eof reached
Definition: avio.h:139
int len
static int opt_timecode(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2608
static void dump_attachment(AVStream *st, const char *filename)
Definition: ffmpeg_opt.c:768
int channels
number of audio channels
Definition: avcodec.h:1986
OptGroup
Definition: ffmpeg_opt.c:2768
int top_field_first
Definition: ffmpeg.h:407
OutputFilter ** outputs
Definition: ffmpeg.h:243
static const struct PPFilter filters[]
Definition: postprocess.c:136
InputFile ** input_files
Definition: ffmpeg.c:139
SpecifierOpt * max_frames
Definition: ffmpeg.h:159
int disabled
Definition: ffmpeg.h:77
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:220
AVDictionary * bsf_args
Definition: ffmpeg.h:436
#define PAL
Definition: bktr.c:65
AVFormatContext * ctx
Definition: ffmpeg.h:461
static int opt_streamid(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1619
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:193
static void check_streamcopy_filters(OptionsContext *o, AVFormatContext *oc, const OutputStream *ost, enum AVMediaType type)
Definition: ffmpeg_opt.c:1306
uint64_t layout
int thread_queue_size
Definition: ffmpeg.h:115
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;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);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> out
union SpecifierOpt::@0 u
char * hwaccel_device
Definition: ffmpeg.h:316
AVDictionary * encoder_opts
Definition: ffmpeg.h:433
char * av_stream_get_recommended_encoder_configuration(const AVStream *s)
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:701
list ofile
Definition: normalize.py:8
float max_error_rate
Definition: ffmpeg_opt.c:104
AVDictionary * codec_opts
Definition: cmdutils.h:277
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
Definition: avformat.h:1367
int read_yesno(void)
Return a positive value if a line read from standard input starts with [yY], otherwise return 0...
Definition: cmdutils.c:1867
static const char * video_codec_name
Definition: ffplay.c:335
float dts_delta_threshold
Definition: ffmpeg_opt.c:83
union OptionDef::@1 u
#define av_freep(p)
void INT64 start
Definition: avisynth_c.h:553
int sync_stream_index
Definition: ffmpeg.h:81
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string.
Definition: dict.h:72
static int input_stream_potentially_available
Definition: ffmpeg_opt.c:113
#define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)
Definition: ffmpeg_opt.c:56
OutputFile ** output_files
Definition: ffmpeg.c:144
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
Definition: log.h:170
static int opt_default_new(OptionsContext *o, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2464
const HWAccel hwaccels[]
Definition: ffmpeg_opt.c:66
static int no_file_overwrite
Definition: ffmpeg_opt.c:109
enum AVPixelFormat av_get_pix_fmt(const char *name)
Return the pixel format corresponding to name.
Definition: pixdesc.c:2023
int discard
Definition: ffmpeg.h:250
static int opt_map(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:225
#define OPT_PERFILE
Definition: cmdutils.h:173
#define OPT_INPUT
Definition: cmdutils.h:181
enum HWAccelID hwaccel_id
Definition: ffmpeg.h:315
static int opt_audio_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:2452
#define MKTAG(a, b, c, d)
Definition: common.h:315
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:907
int index
Definition: ffmpeg.h:381
static OutputStream * new_attachment_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1583
struct SwsContext * sws_opts
Definition: cmdutils.h:280
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:85
uint64_t resample_channel_layout
Definition: ffmpeg.h:289
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:955
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
Definition: opt.c:369
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:250
const char program_name[]
program name, defined by the program for show_version().
Definition: ffmpeg.c:107
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:241
#define AVFMT_NEEDNUMBER
Needs 'd' in filename.
Definition: avformat.h:466
InputStream ** input_streams
Definition: ffmpeg.c:137
discard nothing
Definition: avcodec.h:663
const char * name
Definition: opengl_enc.c:103
int subtitle_disable
Definition: ffmpeg.h:150
static int copy_unknown_streams
Definition: ffmpeg_opt.c:115
static OutputStream * new_data_stream(OptionsContext *o, AVFormatContext *oc, int source_index)
Definition: ffmpeg_opt.c:1557