FFmpeg
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 "config.h"
22 
23 #include <stdint.h>
24 
25 #if HAVE_SYS_RESOURCE_H
26 #include <sys/time.h>
27 #include <sys/resource.h>
28 #endif
29 
30 #include "ffmpeg.h"
31 #include "ffmpeg_sched.h"
32 #include "cmdutils.h"
33 #include "opt_common.h"
34 
35 #include "libavformat/avformat.h"
36 
37 #include "libavcodec/avcodec.h"
38 #include "libavcodec/bsf.h"
39 
40 #include "libavfilter/avfilter.h"
41 
42 #include "libavutil/avassert.h"
43 #include "libavutil/avstring.h"
44 #include "libavutil/avutil.h"
45 #include "libavutil/mathematics.h"
46 #include "libavutil/mem.h"
47 #include "libavutil/opt.h"
48 #include "libavutil/parseutils.h"
49 #include "libavutil/stereo3d.h"
50 
52 
54 
56 float dts_error_threshold = 3600*30;
57 
58 #if FFMPEG_OPT_VSYNC
60 #endif
62 int do_benchmark = 0;
64 int do_hex_dump = 0;
65 int do_pkt_dump = 0;
66 int copy_ts = 0;
67 int start_at_zero = 0;
68 int copy_tb = -1;
69 int debug_ts = 0;
70 int exit_on_error = 0;
72 int print_stats = -1;
74 float max_error_rate = 2.0/3;
80 
81 
82 static int file_overwrite = 0;
83 static int no_file_overwrite = 0;
86 int recast_media = 0;
87 
88 // this struct is passed as the optctx argument
89 // to func_arg() for global options
90 typedef struct GlobalOptionsContext {
92 
93  char **filtergraphs;
96 
98 {
99  /* all OPT_SPEC and OPT_TYPE_STRING can be freed in generic way */
100  for (const OptionDef *po = options; po->name; po++) {
101  void *dst;
102 
103  if (!(po->flags & OPT_FLAG_OFFSET))
104  continue;
105 
106  dst = (uint8_t*)o + po->u.off;
107  if (po->flags & OPT_FLAG_SPEC) {
108  SpecifierOptList *so = dst;
109  for (int i = 0; i < so->nb_opt; i++) {
110  av_freep(&so->opt[i].specifier);
111  if (po->flags & OPT_FLAG_PERSTREAM)
113  if (po->type == OPT_TYPE_STRING)
114  av_freep(&so->opt[i].u.str);
115  }
116  av_freep(&so->opt);
117  so->nb_opt = 0;
118  } else if (po->type == OPT_TYPE_STRING)
119  av_freep(dst);
120  }
121 
122  for (int i = 0; i < o->nb_stream_maps; i++)
124  av_freep(&o->stream_maps);
125 
126  for (int i = 0; i < o->nb_attachments; i++)
127  av_freep(&o->attachments[i]);
128  av_freep(&o->attachments);
129 
130  av_dict_free(&o->streamid);
131 }
132 
134 {
135  memset(o, 0, sizeof(*o));
136 
137  o->stop_time = INT64_MAX;
138  o->mux_max_delay = 0.7;
141  o->recording_time = INT64_MAX;
142  o->limit_filesize = INT64_MAX;
143  o->chapters_input_file = INT_MAX;
144  o->accurate_seek = 1;
145  o->thread_queue_size = 0;
146  o->input_sync_ref = -1;
147  o->find_stream_info = 1;
148  o->shortest_buf_duration = 10.f;
149 }
150 
151 static int show_hwaccels(void *optctx, const char *opt, const char *arg)
152 {
154 
155  printf("Hardware acceleration methods:\n");
156  while ((type = av_hwdevice_iterate_types(type)) !=
159  printf("\n");
160  return 0;
161 }
162 
164  char mediatype)
165 {
166  av_assert0(!sol->nb_opt || sol->type == OPT_TYPE_STRING);
167 
168  for (int i = 0; i < sol->nb_opt; i++) {
169  const char *spec = sol->opt[i].specifier;
170  if (spec[0] == mediatype && !spec[1])
171  return sol->opt[i].u.str;
172  }
173  return NULL;
174 }
175 
176 static unsigned opt_match_per_stream(void *logctx, enum OptionType type,
177  const SpecifierOptList *sol,
179 {
180  int matches = 0, match_idx = -1;
181 
182  av_assert0((type == sol->type) || !sol->nb_opt);
183 
184  for (int i = 0; i < sol->nb_opt; i++) {
185  const StreamSpecifier *ss = &sol->opt[i].stream_spec;
186 
187  if (stream_specifier_match(ss, fc, st, logctx)) {
188  match_idx = i;
189  matches++;
190  }
191  }
192 
193  if (matches > 1 && sol->opt_canon) {
194  const SpecifierOpt *so = &sol->opt[match_idx];
195  const char *spec = so->specifier && so->specifier[0] ? so->specifier : "";
196 
197  char namestr[128] = "";
198  char optval_buf[32];
199  const char *optval = optval_buf;
200 
201  snprintf(namestr, sizeof(namestr), "-%s", sol->opt_canon->name);
202  if (sol->opt_canon->flags & OPT_HAS_ALT) {
203  const char * const *names_alt = sol->opt_canon->u1.names_alt;
204  for (int i = 0; names_alt[i]; i++)
205  av_strlcatf(namestr, sizeof(namestr), "/-%s", names_alt[i]);
206  }
207 
208  switch (sol->type) {
209  case OPT_TYPE_STRING: optval = so->u.str; break;
210  case OPT_TYPE_INT: snprintf(optval_buf, sizeof(optval_buf), "%d", so->u.i); break;
211  case OPT_TYPE_INT64: snprintf(optval_buf, sizeof(optval_buf), "%"PRId64, so->u.i64); break;
212  case OPT_TYPE_FLOAT: snprintf(optval_buf, sizeof(optval_buf), "%f", so->u.f); break;
213  case OPT_TYPE_DOUBLE: snprintf(optval_buf, sizeof(optval_buf), "%f", so->u.dbl); break;
214  default: av_assert0(0);
215  }
216 
217  av_log(logctx, AV_LOG_WARNING, "Multiple %s options specified for "
218  "stream %d, only the last option '-%s%s%s %s' will be used.\n",
219  namestr, st->index, sol->opt_canon->name, spec[0] ? ":" : "",
220  spec, optval);
221  }
222 
223  return match_idx + 1;
224 }
225 
226 #define OPT_MATCH_PER_STREAM(name, type, opt_type, m) \
227 void opt_match_per_stream_ ## name(void *logctx, const SpecifierOptList *sol, \
228  AVFormatContext *fc, AVStream *st, type *out) \
229 { \
230  unsigned ret = opt_match_per_stream(logctx, opt_type, sol, fc, st); \
231  if (ret > 0) \
232  *out = sol->opt[ret - 1].u.m; \
233 }
234 
235 OPT_MATCH_PER_STREAM(str, const char *, OPT_TYPE_STRING, str);
238 OPT_MATCH_PER_STREAM(dbl, double, OPT_TYPE_DOUBLE, dbl);
239 
240 int view_specifier_parse(const char **pspec, ViewSpecifier *vs)
241 {
242  const char *spec = *pspec;
243  char *endptr;
244 
246 
247  if (!strncmp(spec, "view:", 5)) {
248  spec += 5;
249 
250  if (!strncmp(spec, "all", 3)) {
251  spec += 3;
253  } else {
255  vs->val = strtoul(spec, &endptr, 0);
256  if (endptr == spec) {
257  av_log(NULL, AV_LOG_ERROR, "Invalid view ID: %s\n", spec);
258  return AVERROR(EINVAL);
259  }
260  spec = endptr;
261  }
262  } else if (!strncmp(spec, "vidx:", 5)) {
263  spec += 5;
265  vs->val = strtoul(spec, &endptr, 0);
266  if (endptr == spec) {
267  av_log(NULL, AV_LOG_ERROR, "Invalid view index: %s\n", spec);
268  return AVERROR(EINVAL);
269  }
270  spec = endptr;
271  } else if (!strncmp(spec, "vpos:", 5)) {
272  spec += 5;
274 
275  if (!strncmp(spec, "left", 4) && !cmdutils_isalnum(spec[4])) {
276  spec += 4;
278  } else if (!strncmp(spec, "right", 5) && !cmdutils_isalnum(spec[5])) {
279  spec += 5;
281  } else {
282  av_log(NULL, AV_LOG_ERROR, "Invalid view position: %s\n", spec);
283  return AVERROR(EINVAL);
284  }
285  } else
286  return 0;
287 
288  *pspec = spec;
289 
290  return 0;
291 }
292 
293 int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_idx, int is_global)
294 {
295  if (!av_strcasecmp(arg, "cfr")) *vsync_var = VSYNC_CFR;
296  else if (!av_strcasecmp(arg, "vfr")) *vsync_var = VSYNC_VFR;
297  else if (!av_strcasecmp(arg, "passthrough")) *vsync_var = VSYNC_PASSTHROUGH;
298 #if FFMPEG_OPT_VSYNC_DROP
299  else if (!av_strcasecmp(arg, "drop")) {
300  av_log(NULL, AV_LOG_WARNING, "-vsync/fps_mode drop is deprecated\n");
301  *vsync_var = VSYNC_DROP;
302  }
303 #endif
304  else if (!is_global && !av_strcasecmp(arg, "auto")) *vsync_var = VSYNC_AUTO;
305  else if (!is_global) {
306  av_log(NULL, AV_LOG_FATAL, "Invalid value %s specified for fps_mode of #%d:%d.\n", arg, file_idx, st_idx);
307  return AVERROR(EINVAL);
308  }
309 
310 #if FFMPEG_OPT_VSYNC
311  if (is_global && *vsync_var == VSYNC_AUTO) {
312  int ret;
313  double num;
314 
315  ret = parse_number("vsync", arg, OPT_TYPE_INT, VSYNC_AUTO, VSYNC_VFR, &num);
316  if (ret < 0)
317  return ret;
318 
319  video_sync_method = num;
320  av_log(NULL, AV_LOG_WARNING, "Passing a number to -vsync is deprecated,"
321  " use a string argument as described in the manual.\n");
322  }
323 #endif
324 
325  return 0;
326 }
327 
328 /* Correct input file start times based on enabled streams */
329 static void correct_input_start_times(void)
330 {
331  for (int i = 0; i < nb_input_files; i++) {
332  InputFile *ifile = input_files[i];
333  AVFormatContext *is = ifile->ctx;
334  int64_t new_start_time = INT64_MAX, diff, abs_start_seek;
335 
336  ifile->start_time_effective = is->start_time;
337 
338  if (is->start_time == AV_NOPTS_VALUE ||
339  !(is->iformat->flags & AVFMT_TS_DISCONT))
340  continue;
341 
342  for (int j = 0; j < is->nb_streams; j++) {
343  AVStream *st = is->streams[j];
344  if(st->discard == AVDISCARD_ALL || st->start_time == AV_NOPTS_VALUE)
345  continue;
346  new_start_time = FFMIN(new_start_time, av_rescale_q(st->start_time, st->time_base, AV_TIME_BASE_Q));
347  }
348 
349  diff = new_start_time - is->start_time;
350  if (diff) {
351  av_log(NULL, AV_LOG_VERBOSE, "Correcting start time of Input #%d by %"PRId64" us.\n", i, diff);
352  ifile->start_time_effective = new_start_time;
353  if (copy_ts && start_at_zero)
354  ifile->ts_offset = -new_start_time;
355  else if (!copy_ts) {
356  abs_start_seek = is->start_time + ((ifile->start_time != AV_NOPTS_VALUE) ? ifile->start_time : 0);
357  ifile->ts_offset = abs_start_seek > new_start_time ? -abs_start_seek : -new_start_time;
358  } else if (copy_ts)
359  ifile->ts_offset = 0;
360 
361  ifile->ts_offset += ifile->input_ts_offset;
362  }
363  }
364 }
365 
366 static int apply_sync_offsets(void)
367 {
368  for (int i = 0; i < nb_input_files; i++) {
369  InputFile *ref, *self = input_files[i];
370  int64_t adjustment;
371  int64_t self_start_time, ref_start_time, self_seek_start, ref_seek_start;
372  int start_times_set = 1;
373 
374  if (self->input_sync_ref == -1 || self->input_sync_ref == i) continue;
375  if (self->input_sync_ref >= nb_input_files || self->input_sync_ref < -1) {
376  av_log(NULL, AV_LOG_FATAL, "-isync for input %d references non-existent input %d.\n", i, self->input_sync_ref);
377  return AVERROR(EINVAL);
378  }
379 
380  if (copy_ts && !start_at_zero) {
381  av_log(NULL, AV_LOG_FATAL, "Use of -isync requires that start_at_zero be set if copyts is set.\n");
382  return AVERROR(EINVAL);
383  }
384 
385  ref = input_files[self->input_sync_ref];
386  if (ref->input_sync_ref != -1 && ref->input_sync_ref != self->input_sync_ref) {
387  av_log(NULL, AV_LOG_ERROR, "-isync for input %d references a resynced input %d. Sync not set.\n", i, self->input_sync_ref);
388  continue;
389  }
390 
391  if (self->ctx->start_time_realtime != AV_NOPTS_VALUE && ref->ctx->start_time_realtime != AV_NOPTS_VALUE) {
392  self_start_time = self->ctx->start_time_realtime;
393  ref_start_time = ref->ctx->start_time_realtime;
394  } else if (self->start_time_effective != AV_NOPTS_VALUE && ref->start_time_effective != AV_NOPTS_VALUE) {
395  self_start_time = self->start_time_effective;
396  ref_start_time = ref->start_time_effective;
397  } else {
398  start_times_set = 0;
399  }
400 
401  if (start_times_set) {
402  self_seek_start = self->start_time == AV_NOPTS_VALUE ? 0 : self->start_time;
403  ref_seek_start = ref->start_time == AV_NOPTS_VALUE ? 0 : ref->start_time;
404 
405  adjustment = (self_start_time - ref_start_time) + !copy_ts*(self_seek_start - ref_seek_start) + ref->input_ts_offset;
406 
407  self->ts_offset += adjustment;
408 
409  av_log(NULL, AV_LOG_INFO, "Adjusted ts offset for Input #%d by %"PRId64" us to sync with Input #%d.\n", i, adjustment, self->input_sync_ref);
410  } else {
411  av_log(NULL, AV_LOG_INFO, "Unable to identify start times for Inputs #%d and %d both. No sync adjustment made.\n", i, self->input_sync_ref);
412  }
413  }
414 
415  return 0;
416 }
417 
418 static int opt_filter_threads(void *optctx, const char *opt, const char *arg)
419 {
422  return 0;
423 }
424 
425 static int opt_abort_on(void *optctx, const char *opt, const char *arg)
426 {
427  static const AVOption opts[] = {
428  { "abort_on" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, (double)INT64_MAX, .unit = "flags" },
429  { "empty_output" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT }, .unit = "flags" },
430  { "empty_output_stream", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM }, .unit = "flags" },
431  { NULL },
432  };
433  static const AVClass class = {
434  .class_name = "",
435  .item_name = av_default_item_name,
436  .option = opts,
437  .version = LIBAVUTIL_VERSION_INT,
438  };
439  const AVClass *pclass = &class;
440 
441  return av_opt_eval_flags(&pclass, &opts[0], arg, &abort_on_flags);
442 }
443 
444 static int opt_stats_period(void *optctx, const char *opt, const char *arg)
445 {
446  int64_t user_stats_period;
447  int ret = av_parse_time(&user_stats_period, arg, 1);
448  if (ret < 0)
449  return ret;
450 
451  if (user_stats_period <= 0) {
452  av_log(NULL, AV_LOG_ERROR, "stats_period %s must be positive.\n", arg);
453  return AVERROR(EINVAL);
454  }
455 
456  stats_period = user_stats_period;
457  av_log(NULL, AV_LOG_INFO, "ffmpeg stats and -progress period set to %s.\n", arg);
458 
459  return 0;
460 }
461 
462 static int opt_audio_codec(void *optctx, const char *opt, const char *arg)
463 {
464  OptionsContext *o = optctx;
465  return parse_option(o, "codec:a", arg, options);
466 }
467 
468 static int opt_video_codec(void *optctx, const char *opt, const char *arg)
469 {
470  OptionsContext *o = optctx;
471  return parse_option(o, "codec:v", arg, options);
472 }
473 
474 static int opt_subtitle_codec(void *optctx, const char *opt, const char *arg)
475 {
476  OptionsContext *o = optctx;
477  return parse_option(o, "codec:s", arg, options);
478 }
479 
480 static int opt_data_codec(void *optctx, const char *opt, const char *arg)
481 {
482  OptionsContext *o = optctx;
483  return parse_option(o, "codec:d", arg, options);
484 }
485 
486 static int opt_map(void *optctx, const char *opt, const char *arg)
487 {
488  OptionsContext *o = optctx;
489  StreamMap *m = NULL;
491  int i, negative = 0, file_idx, disabled = 0;
492  int ret, allow_unused = 0;
493 
494  memset(&ss, 0, sizeof(ss));
495 
496  if (*arg == '-') {
497  negative = 1;
498  arg++;
499  }
500 
501  if (arg[0] == '[') {
502  /* this mapping refers to lavfi output */
503  const char *c = arg + 1;
504 
506  if (ret < 0)
507  goto fail;
508 
509  m = &o->stream_maps[o->nb_stream_maps - 1];
510  m->linklabel = av_get_token(&c, "]");
511  if (!m->linklabel) {
512  av_log(NULL, AV_LOG_ERROR, "Invalid output link label: %s.\n", arg);
513  ret = AVERROR(EINVAL);
514  goto fail;
515  }
516  } else {
517  ViewSpecifier vs;
518  char *endptr;
519 
520  file_idx = strtol(arg, &endptr, 0);
521  if (file_idx >= nb_input_files || file_idx < 0) {
522  av_log(NULL, AV_LOG_FATAL, "Invalid input file index: %d.\n", file_idx);
523  ret = AVERROR(EINVAL);
524  goto fail;
525  }
526  arg = endptr;
527 
528  ret = stream_specifier_parse(&ss, *arg == ':' ? arg + 1 : arg, 1, NULL);
529  if (ret < 0) {
530  av_log(NULL, AV_LOG_ERROR, "Invalid stream specifier: %s\n", arg);
531  goto fail;
532  }
533 
534  arg = ss.remainder ? ss.remainder : "";
535 
536  ret = view_specifier_parse(&arg, &vs);
537  if (ret < 0)
538  goto fail;
539 
540  if (*arg) {
541  if (!strcmp(arg, "?"))
542  allow_unused = 1;
543  else {
545  "Trailing garbage after stream specifier: %s\n", arg);
546  ret = AVERROR(EINVAL);
547  goto fail;
548  }
549  }
550 
551  if (negative)
552  /* disable some already defined maps */
553  for (i = 0; i < o->nb_stream_maps; i++) {
554  m = &o->stream_maps[i];
555  if (file_idx == m->file_index &&
559  NULL))
560  m->disabled = 1;
561  }
562  else
563  for (i = 0; i < input_files[file_idx]->nb_streams; i++) {
565  input_files[file_idx]->ctx,
566  input_files[file_idx]->ctx->streams[i],
567  NULL))
568  continue;
569  if (input_files[file_idx]->streams[i]->user_set_discard == AVDISCARD_ALL) {
570  disabled = 1;
571  continue;
572  }
574  if (ret < 0)
575  goto fail;
576 
577  m = &o->stream_maps[o->nb_stream_maps - 1];
578 
579  m->file_index = file_idx;
580  m->stream_index = i;
581  m->vs = vs;
582  }
583  }
584 
585  if (!m) {
586  if (allow_unused) {
587  av_log(NULL, AV_LOG_VERBOSE, "Stream map '%s' matches no streams; ignoring.\n", arg);
588  } else if (disabled) {
589  av_log(NULL, AV_LOG_FATAL, "Stream map '%s' matches disabled streams.\n"
590  "To ignore this, add a trailing '?' to the map.\n", arg);
591  ret = AVERROR(EINVAL);
592  goto fail;
593  } else {
594  av_log(NULL, AV_LOG_FATAL, "Stream map '%s' matches no streams.\n"
595  "To ignore this, add a trailing '?' to the map.\n", arg);
596  ret = AVERROR(EINVAL);
597  goto fail;
598  }
599  }
600  ret = 0;
601 fail:
603  return ret;
604 }
605 
606 static int opt_attach(void *optctx, const char *opt, const char *arg)
607 {
608  OptionsContext *o = optctx;
610  if (ret < 0)
611  return ret;
612 
613  o->attachments[o->nb_attachments - 1] = av_strdup(arg);
614  if (!o->attachments[o->nb_attachments - 1])
615  return AVERROR(ENOMEM);
616 
617  return 0;
618 }
619 
620 static int opt_sdp_file(void *optctx, const char *opt, const char *arg)
621 {
622  GlobalOptionsContext *go = optctx;
623  return sch_sdp_filename(go->sch, arg);
624 }
625 
626 #if CONFIG_VAAPI
627 static int opt_vaapi_device(void *optctx, const char *opt, const char *arg)
628 {
629  const char *prefix = "vaapi:";
630  char *tmp;
631  int err;
632  tmp = av_asprintf("%s%s", prefix, arg);
633  if (!tmp)
634  return AVERROR(ENOMEM);
636  av_free(tmp);
637  return err;
638 }
639 #endif
640 
641 #if CONFIG_QSV
642 static int opt_qsv_device(void *optctx, const char *opt, const char *arg)
643 {
644  const char *prefix = "qsv=__qsv_device:hw_any,child_device=";
645  int err;
646  char *tmp = av_asprintf("%s%s", prefix, arg);
647 
648  if (!tmp)
649  return AVERROR(ENOMEM);
650 
652  av_free(tmp);
653 
654  return err;
655 }
656 #endif
657 
658 static int opt_init_hw_device(void *optctx, const char *opt, const char *arg)
659 {
660  if (!strcmp(arg, "list")) {
662  printf("Supported hardware device types:\n");
663  while ((type = av_hwdevice_iterate_types(type)) !=
666  printf("\n");
667  return AVERROR_EXIT;
668  } else {
670  }
671 }
672 
673 static int opt_filter_hw_device(void *optctx, const char *opt, const char *arg)
674 {
675  if (filter_hw_device) {
676  av_log(NULL, AV_LOG_ERROR, "Only one filter device can be used.\n");
677  return AVERROR(EINVAL);
678  }
680  if (!filter_hw_device) {
681  av_log(NULL, AV_LOG_ERROR, "Invalid filter device %s.\n", arg);
682  return AVERROR(EINVAL);
683  }
684  return 0;
685 }
686 
687 static int opt_recording_timestamp(void *optctx, const char *opt, const char *arg)
688 {
689  OptionsContext *o = optctx;
690  char buf[128];
691  int64_t recording_timestamp;
692  int ret;
693  struct tm time;
694 
695  ret = av_parse_time(&recording_timestamp, arg, 0);
696  if (ret < 0)
697  return ret;
698 
699  recording_timestamp /= 1e6;
700  time = *gmtime((time_t*)&recording_timestamp);
701  if (!strftime(buf, sizeof(buf), "creation_time=%Y-%m-%dT%H:%M:%S%z", &time))
702  return -1;
703  parse_option(o, "metadata", buf, options);
704 
705  av_log(NULL, AV_LOG_WARNING, "%s is deprecated, set the 'creation_time' metadata "
706  "tag instead.\n", opt);
707  return 0;
708 }
709 
710 int find_codec(void *logctx, const char *name,
711  enum AVMediaType type, int encoder, const AVCodec **pcodec)
712 {
713  const AVCodecDescriptor *desc;
714  const char *codec_string = encoder ? "encoder" : "decoder";
715  const AVCodec *codec;
716 
717  codec = encoder ?
720 
721  if (!codec && (desc = avcodec_descriptor_get_by_name(name))) {
722  codec = encoder ? avcodec_find_encoder(desc->id) :
724  if (codec)
725  av_log(logctx, AV_LOG_VERBOSE, "Matched %s '%s' for codec '%s'.\n",
726  codec_string, codec->name, desc->name);
727  }
728 
729  if (!codec) {
730  av_log(logctx, AV_LOG_FATAL, "Unknown %s '%s'\n", codec_string, name);
731  return encoder ? AVERROR_ENCODER_NOT_FOUND :
733  }
734  if (codec->type != type && !recast_media) {
735  av_log(logctx, AV_LOG_FATAL, "Invalid %s type '%s'\n", codec_string, name);
736  return AVERROR(EINVAL);
737  }
738 
739  *pcodec = codec;
740  return 0;;
741 }
742 
743 int assert_file_overwrite(const char *filename)
744 {
745  const char *proto_name = avio_find_protocol_name(filename);
746 
748  fprintf(stderr, "Error, both -y and -n supplied. Exiting.\n");
749  return AVERROR(EINVAL);
750  }
751 
752  if (!file_overwrite) {
753  if (proto_name && !strcmp(proto_name, "file") && avio_check(filename, 0) == 0) {
755  fprintf(stderr,"File '%s' already exists. Overwrite? [y/N] ", filename);
756  fflush(stderr);
757  term_exit();
758  signal(SIGINT, SIG_DFL);
759  if (!read_yesno()) {
760  av_log(NULL, AV_LOG_FATAL, "Not overwriting - exiting\n");
761  return AVERROR_EXIT;
762  }
763  term_init();
764  }
765  else {
766  av_log(NULL, AV_LOG_FATAL, "File '%s' already exists. Exiting.\n", filename);
767  return AVERROR_EXIT;
768  }
769  }
770  }
771 
772  if (proto_name && !strcmp(proto_name, "file")) {
773  for (int i = 0; i < nb_input_files; i++) {
774  InputFile *file = input_files[i];
775  if (file->ctx->iformat->flags & AVFMT_NOFILE)
776  continue;
777  if (!strcmp(filename, file->ctx->url)) {
778  av_log(NULL, AV_LOG_FATAL, "Output %s same as Input #%d - exiting\n", filename, i);
779  av_log(NULL, AV_LOG_WARNING, "FFmpeg cannot edit existing files in-place.\n");
780  return AVERROR(EINVAL);
781  }
782  }
783  }
784 
785  return 0;
786 }
787 
788 /* arg format is "output-stream-index:streamid-value". */
789 static int opt_streamid(void *optctx, const char *opt, const char *arg)
790 {
791  OptionsContext *o = optctx;
792  char *p;
793  char idx_str[16];
794 
795  av_strlcpy(idx_str, arg, sizeof(idx_str));
796  p = strchr(idx_str, ':');
797  if (!p) {
799  "Invalid value '%s' for option '%s', required syntax is 'index:value'\n",
800  arg, opt);
801  return AVERROR(EINVAL);
802  }
803  *p++ = '\0';
804 
805  return av_dict_set(&o->streamid, idx_str, p, 0);
806 }
807 
808 static int opt_target(void *optctx, const char *opt, const char *arg)
809 {
810  OptionsContext *o = optctx;
811  enum { PAL, NTSC, FILM, UNKNOWN } norm = UNKNOWN;
812  static const char *const frame_rates[] = { "25", "30000/1001", "24000/1001" };
813 
814  if (!strncmp(arg, "pal-", 4)) {
815  norm = PAL;
816  arg += 4;
817  } else if (!strncmp(arg, "ntsc-", 5)) {
818  norm = NTSC;
819  arg += 5;
820  } else if (!strncmp(arg, "film-", 5)) {
821  norm = FILM;
822  arg += 5;
823  } else {
824  /* Try to determine PAL/NTSC by peeking in the input files */
825  if (nb_input_files) {
826  int i, j;
827  for (j = 0; j < nb_input_files; j++) {
828  for (i = 0; i < input_files[j]->nb_streams; i++) {
829  AVStream *st = input_files[j]->ctx->streams[i];
830  int64_t fr;
832  continue;
833  fr = st->time_base.den * 1000LL / st->time_base.num;
834  if (fr == 25000) {
835  norm = PAL;
836  break;
837  } else if ((fr == 29970) || (fr == 23976)) {
838  norm = NTSC;
839  break;
840  }
841  }
842  if (norm != UNKNOWN)
843  break;
844  }
845  }
846  if (norm != UNKNOWN)
847  av_log(NULL, AV_LOG_INFO, "Assuming %s for target.\n", norm == PAL ? "PAL" : "NTSC");
848  }
849 
850  if (norm == UNKNOWN) {
851  av_log(NULL, AV_LOG_FATAL, "Could not determine norm (PAL/NTSC/NTSC-Film) for target.\n");
852  av_log(NULL, AV_LOG_FATAL, "Please prefix target with \"pal-\", \"ntsc-\" or \"film-\",\n");
853  av_log(NULL, AV_LOG_FATAL, "or set a framerate with \"-r xxx\".\n");
854  return AVERROR(EINVAL);
855  }
856 
857  if (!strcmp(arg, "vcd")) {
858  opt_video_codec(o, "c:v", "mpeg1video");
859  opt_audio_codec(o, "c:a", "mp2");
860  parse_option(o, "f", "vcd", options);
861 
862  parse_option(o, "s", norm == PAL ? "352x288" : "352x240", options);
863  parse_option(o, "r", frame_rates[norm], options);
864  opt_default(NULL, "g", norm == PAL ? "15" : "18");
865 
866  opt_default(NULL, "b:v", "1150000");
867  opt_default(NULL, "maxrate:v", "1150000");
868  opt_default(NULL, "minrate:v", "1150000");
869  opt_default(NULL, "bufsize:v", "327680"); // 40*1024*8;
870 
871  opt_default(NULL, "b:a", "224000");
872  parse_option(o, "ar", "44100", options);
873  parse_option(o, "ac", "2", options);
874 
875  opt_default(NULL, "packetsize", "2324");
876  opt_default(NULL, "muxrate", "1411200"); // 2352 * 75 * 8;
877 
878  /* We have to offset the PTS, so that it is consistent with the SCR.
879  SCR starts at 36000, but the first two packs contain only padding
880  and the first pack from the other stream, respectively, may also have
881  been written before.
882  So the real data starts at SCR 36000+3*1200. */
883  o->mux_preload = (36000 + 3 * 1200) / 90000.0; // 0.44
884  } else if (!strcmp(arg, "svcd")) {
885 
886  opt_video_codec(o, "c:v", "mpeg2video");
887  opt_audio_codec(o, "c:a", "mp2");
888  parse_option(o, "f", "svcd", options);
889 
890  parse_option(o, "s", norm == PAL ? "480x576" : "480x480", options);
891  parse_option(o, "r", frame_rates[norm], options);
892  parse_option(o, "pix_fmt", "yuv420p", options);
893  opt_default(NULL, "g", norm == PAL ? "15" : "18");
894 
895  opt_default(NULL, "b:v", "2040000");
896  opt_default(NULL, "maxrate:v", "2516000");
897  opt_default(NULL, "minrate:v", "0"); // 1145000;
898  opt_default(NULL, "bufsize:v", "1835008"); // 224*1024*8;
899  opt_default(NULL, "scan_offset", "1");
900 
901  opt_default(NULL, "b:a", "224000");
902  parse_option(o, "ar", "44100", options);
903 
904  opt_default(NULL, "packetsize", "2324");
905 
906  } else if (!strcmp(arg, "dvd")) {
907 
908  opt_video_codec(o, "c:v", "mpeg2video");
909  opt_audio_codec(o, "c:a", "ac3");
910  parse_option(o, "f", "dvd", options);
911 
912  parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
913  parse_option(o, "r", frame_rates[norm], options);
914  parse_option(o, "pix_fmt", "yuv420p", options);
915  opt_default(NULL, "g", norm == PAL ? "15" : "18");
916 
917  opt_default(NULL, "b:v", "6000000");
918  opt_default(NULL, "maxrate:v", "9000000");
919  opt_default(NULL, "minrate:v", "0"); // 1500000;
920  opt_default(NULL, "bufsize:v", "1835008"); // 224*1024*8;
921 
922  opt_default(NULL, "packetsize", "2048"); // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack.
923  opt_default(NULL, "muxrate", "10080000"); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8
924 
925  opt_default(NULL, "b:a", "448000");
926  parse_option(o, "ar", "48000", options);
927 
928  } else if (!strncmp(arg, "dv", 2)) {
929 
930  parse_option(o, "f", "dv", options);
931 
932  parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
933  parse_option(o, "pix_fmt", !strncmp(arg, "dv50", 4) ? "yuv422p" :
934  norm == PAL ? "yuv420p" : "yuv411p", options);
935  parse_option(o, "r", frame_rates[norm], options);
936 
937  parse_option(o, "ar", "48000", options);
938  parse_option(o, "ac", "2", options);
939 
940  } else {
941  av_log(NULL, AV_LOG_ERROR, "Unknown target: %s\n", arg);
942  return AVERROR(EINVAL);
943  }
944 
947 
948  return 0;
949 }
950 
951 static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
952 {
955  return 0;
956 }
957 
958 static int opt_vstats(void *optctx, const char *opt, const char *arg)
959 {
960  char filename[40];
961  time_t today2 = time(NULL);
962  struct tm *today = localtime(&today2);
963 
964  if (!today) { // maybe tomorrow
965  av_log(NULL, AV_LOG_FATAL, "Unable to get current time: %s\n", strerror(errno));
966  return AVERROR(errno);
967  }
968 
969  snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min,
970  today->tm_sec);
971  return opt_vstats_file(NULL, opt, filename);
972 }
973 
974 static int opt_video_frames(void *optctx, const char *opt, const char *arg)
975 {
976  OptionsContext *o = optctx;
977  return parse_option(o, "frames:v", arg, options);
978 }
979 
980 static int opt_audio_frames(void *optctx, const char *opt, const char *arg)
981 {
982  OptionsContext *o = optctx;
983  return parse_option(o, "frames:a", arg, options);
984 }
985 
986 static int opt_data_frames(void *optctx, const char *opt, const char *arg)
987 {
988  OptionsContext *o = optctx;
989  return parse_option(o, "frames:d", arg, options);
990 }
991 
992 static int opt_default_new(OptionsContext *o, const char *opt, const char *arg)
993 {
994  int ret;
995  AVDictionary *cbak = codec_opts;
996  AVDictionary *fbak = format_opts;
997  codec_opts = NULL;
998  format_opts = NULL;
999 
1000  ret = opt_default(NULL, opt, arg);
1001 
1002  av_dict_copy(&o->g->codec_opts , codec_opts, 0);
1006  codec_opts = cbak;
1007  format_opts = fbak;
1008 
1009  return ret;
1010 }
1011 
1012 static int opt_preset(void *optctx, const char *opt, const char *arg)
1013 {
1014  OptionsContext *o = optctx;
1015  FILE *f=NULL;
1016  char filename[1000], line[1000], tmp_line[1000];
1017  const char *codec_name = NULL;
1018  int ret = 0;
1019 
1020  codec_name = opt_match_per_type_str(&o->codec_names, *opt);
1021 
1022  if (!(f = get_preset_file(filename, sizeof(filename), arg, *opt == 'f', codec_name))) {
1023  if(!strncmp(arg, "libx264-lossless", strlen("libx264-lossless"))){
1024  av_log(NULL, AV_LOG_FATAL, "Please use -preset <speed> -qp 0\n");
1025  }else
1026  av_log(NULL, AV_LOG_FATAL, "File for preset '%s' not found\n", arg);
1027  return AVERROR(ENOENT);
1028  }
1029 
1030  while (fgets(line, sizeof(line), f)) {
1031  char *key = tmp_line, *value, *endptr;
1032 
1033  if (strcspn(line, "#\n\r") == 0)
1034  continue;
1035  av_strlcpy(tmp_line, line, sizeof(tmp_line));
1036  if (!av_strtok(key, "=", &value) ||
1037  !av_strtok(value, "\r\n", &endptr)) {
1038  av_log(NULL, AV_LOG_FATAL, "%s: Invalid syntax: '%s'\n", filename, line);
1039  ret = AVERROR(EINVAL);
1040  goto fail;
1041  }
1042  av_log(NULL, AV_LOG_DEBUG, "ffpreset[%s]: set '%s' = '%s'\n", filename, key, value);
1043 
1044  if (!strcmp(key, "acodec")) opt_audio_codec (o, key, value);
1045  else if (!strcmp(key, "vcodec")) opt_video_codec (o, key, value);
1046  else if (!strcmp(key, "scodec")) opt_subtitle_codec(o, key, value);
1047  else if (!strcmp(key, "dcodec")) opt_data_codec (o, key, value);
1048  else if (opt_default_new(o, key, value) < 0) {
1049  av_log(NULL, AV_LOG_FATAL, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n",
1050  filename, line, key, value);
1051  ret = AVERROR(EINVAL);
1052  goto fail;
1053  }
1054  }
1055 
1056 fail:
1057  fclose(f);
1058 
1059  return ret;
1060 }
1061 
1062 static int opt_old2new(void *optctx, const char *opt, const char *arg)
1063 {
1064  OptionsContext *o = optctx;
1065  int ret;
1066  char *s = av_asprintf("%s:%c", opt + 1, *opt);
1067  if (!s)
1068  return AVERROR(ENOMEM);
1069  ret = parse_option(o, s, arg, options);
1070  av_free(s);
1071  return ret;
1072 }
1073 
1074 static int opt_bitrate(void *optctx, const char *opt, const char *arg)
1075 {
1076  OptionsContext *o = optctx;
1077 
1078  if(!strcmp(opt, "ab")){
1079  av_dict_set(&o->g->codec_opts, "b:a", arg, 0);
1080  return 0;
1081  } else if(!strcmp(opt, "b")){
1082  av_log(NULL, AV_LOG_WARNING, "Please use -b:a or -b:v, -b is ambiguous\n");
1083  av_dict_set(&o->g->codec_opts, "b:v", arg, 0);
1084  return 0;
1085  }
1086  av_dict_set(&o->g->codec_opts, opt, arg, 0);
1087  return 0;
1088 }
1089 
1090 static int opt_qscale(void *optctx, const char *opt, const char *arg)
1091 {
1092  OptionsContext *o = optctx;
1093  char *s;
1094  int ret;
1095  if(!strcmp(opt, "qscale")){
1096  av_log(NULL, AV_LOG_WARNING, "Please use -q:a or -q:v, -qscale is ambiguous\n");
1097  return parse_option(o, "q:v", arg, options);
1098  }
1099  s = av_asprintf("q%s", opt + 6);
1100  if (!s)
1101  return AVERROR(ENOMEM);
1102  ret = parse_option(o, s, arg, options);
1103  av_free(s);
1104  return ret;
1105 }
1106 
1107 static int opt_profile(void *optctx, const char *opt, const char *arg)
1108 {
1109  OptionsContext *o = optctx;
1110  if(!strcmp(opt, "profile")){
1111  av_log(NULL, AV_LOG_WARNING, "Please use -profile:a or -profile:v, -profile is ambiguous\n");
1112  av_dict_set(&o->g->codec_opts, "profile:v", arg, 0);
1113  return 0;
1114  }
1115  av_dict_set(&o->g->codec_opts, opt, arg, 0);
1116  return 0;
1117 }
1118 
1119 static int opt_video_filters(void *optctx, const char *opt, const char *arg)
1120 {
1121  OptionsContext *o = optctx;
1122  return parse_option(o, "filter:v", arg, options);
1123 }
1124 
1125 static int opt_audio_filters(void *optctx, const char *opt, const char *arg)
1126 {
1127  OptionsContext *o = optctx;
1128  return parse_option(o, "filter:a", arg, options);
1129 }
1130 
1131 #if FFMPEG_OPT_VSYNC
1132 static int opt_vsync(void *optctx, const char *opt, const char *arg)
1133 {
1134  av_log(NULL, AV_LOG_WARNING, "-vsync is deprecated. Use -fps_mode\n");
1135  return parse_and_set_vsync(arg, &video_sync_method, -1, -1, 1);
1136 }
1137 #endif
1138 
1139 static int opt_timecode(void *optctx, const char *opt, const char *arg)
1140 {
1141  OptionsContext *o = optctx;
1142  int ret;
1143  char *tcr = av_asprintf("timecode=%s", arg);
1144  if (!tcr)
1145  return AVERROR(ENOMEM);
1146  ret = parse_option(o, "metadata:g", tcr, options);
1147  if (ret >= 0)
1148  ret = av_dict_set(&o->g->codec_opts, "gop_timecode", arg, 0);
1149  av_free(tcr);
1150  return ret;
1151 }
1152 
1153 static int opt_audio_qscale(void *optctx, const char *opt, const char *arg)
1154 {
1155  OptionsContext *o = optctx;
1156  return parse_option(o, "q:a", arg, options);
1157 }
1158 
1159 static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
1160 {
1161  GlobalOptionsContext *go = optctx;
1162  char *graph_desc;
1163  int ret;
1164 
1165  graph_desc = av_strdup(arg);
1166  if (!graph_desc)
1167  return AVERROR(ENOMEM);
1168 
1170  if (ret < 0) {
1171  av_freep(&graph_desc);
1172  return ret;
1173  }
1174  go->filtergraphs[go->nb_filtergraphs - 1] = graph_desc;
1175 
1176  return 0;
1177 }
1178 
1179 #if FFMPEG_OPT_FILTER_SCRIPT
1180 static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
1181 {
1182  GlobalOptionsContext *go = optctx;
1183  char *graph_desc;
1184  int ret;
1185 
1186  graph_desc = file_read(arg);
1187  if (!graph_desc)
1188  return AVERROR(EINVAL);
1189 
1190  av_log(NULL, AV_LOG_WARNING, "-%s is deprecated, use -/filter_complex %s instead\n",
1191  opt, arg);
1192 
1194  if (ret < 0) {
1195  av_freep(&graph_desc);
1196  return ret;
1197  }
1198  go->filtergraphs[go->nb_filtergraphs - 1] = graph_desc;
1199 
1200  return 0;
1201 }
1202 #endif
1203 
1204 void show_help_default(const char *opt, const char *arg)
1205 {
1206  int show_advanced = 0, show_avoptions = 0;
1207 
1208  if (opt && *opt) {
1209  if (!strcmp(opt, "long"))
1210  show_advanced = 1;
1211  else if (!strcmp(opt, "full"))
1212  show_advanced = show_avoptions = 1;
1213  else
1214  av_log(NULL, AV_LOG_ERROR, "Unknown help option '%s'.\n", opt);
1215  }
1216 
1217  show_usage();
1218 
1219  printf("Getting help:\n"
1220  " -h -- print basic options\n"
1221  " -h long -- print more options\n"
1222  " -h full -- print all options (including all format and codec specific options, very long)\n"
1223  " -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol\n"
1224  " See man %s for detailed description of the options.\n"
1225  "\n"
1226  "Per-stream options can be followed by :<stream_spec> to apply that option to specific streams only. "
1227  "<stream_spec> can be a stream index, or v/a/s for video/audio/subtitle (see manual for full syntax).\n"
1228  "\n", program_name);
1229 
1230  show_help_options(options, "Print help / information / capabilities:",
1231  OPT_EXIT, OPT_EXPERT);
1232  if (show_advanced)
1233  show_help_options(options, "Advanced information / capabilities:",
1234  OPT_EXIT | OPT_EXPERT, 0);
1235 
1236  show_help_options(options, "Global options (affect whole program "
1237  "instead of just one file):",
1239  if (show_advanced)
1240  show_help_options(options, "Advanced global options:", OPT_EXPERT,
1241  OPT_PERFILE | OPT_EXIT);
1242 
1243  show_help_options(options, "Per-file options (input and output):",
1247  if (show_advanced)
1248  show_help_options(options, "Advanced per-file options (input and output):",
1252 
1253  show_help_options(options, "Per-file options (input-only):",
1257  if (show_advanced)
1258  show_help_options(options, "Advanced per-file options (input-only):",
1262 
1263  show_help_options(options, "Per-file options (output-only):",
1267  if (show_advanced)
1268  show_help_options(options, "Advanced per-file options (output-only):",
1272 
1273  show_help_options(options, "Per-stream options:",
1275  OPT_EXIT | OPT_EXPERT |
1277  if (show_advanced)
1278  show_help_options(options, "Advanced per-stream options:",
1280  OPT_EXIT |
1282 
1283  show_help_options(options, "Video options:",
1285  if (show_advanced)
1286  show_help_options(options, "Advanced Video options:",
1288 
1289  show_help_options(options, "Audio options:",
1291  if (show_advanced)
1292  show_help_options(options, "Advanced Audio options:",
1294 
1295  show_help_options(options, "Subtitle options:",
1297  if (show_advanced)
1298  show_help_options(options, "Advanced Subtitle options:",
1300 
1301  if (show_advanced)
1302  show_help_options(options, "Data stream options:",
1304  printf("\n");
1305 
1306  if (show_avoptions) {
1310 #if CONFIG_SWSCALE
1312 #endif
1313 #if CONFIG_SWRESAMPLE
1315 #endif
1318  }
1319 }
1320 
1321 void show_usage(void)
1322 {
1323  av_log(NULL, AV_LOG_INFO, "Universal media converter\n");
1324  av_log(NULL, AV_LOG_INFO, "usage: %s [options] [[infile options] -i infile]... {[outfile options] outfile}...\n", program_name);
1325  av_log(NULL, AV_LOG_INFO, "\n");
1326 }
1327 
1328 enum OptGroup {
1329  GROUP_OUTFILE,
1330  GROUP_INFILE,
1331  GROUP_DECODER,
1332 };
1333 
1334 static const OptionGroupDef groups[] = {
1335  [GROUP_OUTFILE] = { "output url", NULL, OPT_OUTPUT },
1336  [GROUP_INFILE] = { "input url", "i", OPT_INPUT },
1337  [GROUP_DECODER] = { "loopback decoder", "dec", OPT_DECODER },
1338 };
1339 
1340 static int open_files(OptionGroupList *l, const char *inout, Scheduler *sch,
1341  int (*open_file)(const OptionsContext*, const char*,
1342  Scheduler*))
1343 {
1344  int i, ret;
1345 
1346  for (i = 0; i < l->nb_groups; i++) {
1347  OptionGroup *g = &l->groups[i];
1348  OptionsContext o;
1349 
1350  init_options(&o);
1351  o.g = g;
1352 
1353  ret = parse_optgroup(&o, g, options);
1354  if (ret < 0) {
1355  av_log(NULL, AV_LOG_ERROR, "Error parsing options for %s file "
1356  "%s.\n", inout, g->arg);
1357  uninit_options(&o);
1358  return ret;
1359  }
1360 
1361  av_log(NULL, AV_LOG_DEBUG, "Opening an %s file: %s.\n", inout, g->arg);
1362  ret = open_file(&o, g->arg, sch);
1363  uninit_options(&o);
1364  if (ret < 0) {
1365  av_log(NULL, AV_LOG_ERROR, "Error opening %s file %s.\n",
1366  inout, g->arg);
1367  return ret;
1368  }
1369  av_log(NULL, AV_LOG_DEBUG, "Successfully opened the file.\n");
1370  }
1371 
1372  return 0;
1373 }
1374 
1375 int ffmpeg_parse_options(int argc, char **argv, Scheduler *sch)
1376 {
1377  GlobalOptionsContext go = { .sch = sch };
1378  OptionParseContext octx;
1379  const char *errmsg = NULL;
1380  int ret;
1381 
1382  memset(&octx, 0, sizeof(octx));
1383 
1384  /* split the commandline into an internal representation */
1385  ret = split_commandline(&octx, argc, argv, options, groups,
1386  FF_ARRAY_ELEMS(groups));
1387  if (ret < 0) {
1388  errmsg = "splitting the argument list";
1389  goto fail;
1390  }
1391 
1392  /* apply global options */
1393  ret = parse_optgroup(&go, &octx.global_opts, options);
1394  if (ret < 0) {
1395  errmsg = "parsing global options";
1396  goto fail;
1397  }
1398 
1399  /* configure terminal and setup signal handlers */
1400  term_init();
1401 
1402  /* create complex filtergraphs */
1403  for (int i = 0; i < go.nb_filtergraphs; i++) {
1404  ret = fg_create(NULL, go.filtergraphs[i], sch);
1405  go.filtergraphs[i] = NULL;
1406  if (ret < 0)
1407  goto fail;
1408  }
1409 
1410  /* open input files */
1411  ret = open_files(&octx.groups[GROUP_INFILE], "input", sch, ifile_open);
1412  if (ret < 0) {
1413  errmsg = "opening input files";
1414  goto fail;
1415  }
1416 
1417  /* open output files */
1418  ret = open_files(&octx.groups[GROUP_OUTFILE], "output", sch, of_open);
1419  if (ret < 0) {
1420  errmsg = "opening output files";
1421  goto fail;
1422  }
1423 
1424  /* create loopback decoders */
1425  ret = open_files(&octx.groups[GROUP_DECODER], "decoder", sch, dec_create);
1426  if (ret < 0) {
1427  errmsg = "creating loopback decoders";
1428  goto fail;
1429  }
1430 
1431  // bind unbound filtegraph inputs/outputs and check consistency
1433  if (ret < 0) {
1434  errmsg = "binding filtergraph inputs/outputs";
1435  goto fail;
1436  }
1437 
1439 
1440  ret = apply_sync_offsets();
1441  if (ret < 0)
1442  goto fail;
1443 
1444 fail:
1445  for (int i = 0; i < go.nb_filtergraphs; i++)
1446  av_freep(&go.filtergraphs[i]);
1447  av_freep(&go.filtergraphs);
1448 
1449  uninit_parse_context(&octx);
1450  if (ret < 0 && ret != AVERROR_EXIT) {
1451  av_log(NULL, AV_LOG_FATAL, "Error %s: %s\n",
1452  errmsg ? errmsg : "", av_err2str(ret));
1453  }
1454  return ret;
1455 }
1456 
1457 static int opt_progress(void *optctx, const char *opt, const char *arg)
1458 {
1459  AVIOContext *avio = NULL;
1460  int ret;
1461 
1462  if (!strcmp(arg, "-"))
1463  arg = "pipe:";
1464  ret = avio_open2(&avio, arg, AVIO_FLAG_WRITE, &int_cb, NULL);
1465  if (ret < 0) {
1466  av_log(NULL, AV_LOG_ERROR, "Failed to open progress URL \"%s\": %s\n",
1467  arg, av_err2str(ret));
1468  return ret;
1469  }
1470  progress_avio = avio;
1471  return 0;
1472 }
1473 
1474 int opt_timelimit(void *optctx, const char *opt, const char *arg)
1475 {
1476 #if HAVE_SETRLIMIT
1477  int ret;
1478  double lim;
1479  struct rlimit rl;
1480 
1481  ret = parse_number(opt, arg, OPT_TYPE_INT64, 0, INT_MAX, &lim);
1482  if (ret < 0)
1483  return ret;
1484 
1485  rl = (struct rlimit){ lim, lim + 1 };
1486  if (setrlimit(RLIMIT_CPU, &rl))
1487  perror("setrlimit");
1488 #else
1489  av_log(NULL, AV_LOG_WARNING, "-%s not implemented on this OS\n", opt);
1490 #endif
1491  return 0;
1492 }
1493 
1494 #if FFMPEG_OPT_QPHIST
1495 static int opt_qphist(void *optctx, const char *opt, const char *arg)
1496 {
1497  av_log(NULL, AV_LOG_WARNING, "Option -%s is deprecated and has no effect\n", opt);
1498  return 0;
1499 }
1500 #endif
1501 
1502 #if FFMPEG_OPT_ADRIFT_THRESHOLD
1503 static int opt_adrift_threshold(void *optctx, const char *opt, const char *arg)
1504 {
1505  av_log(NULL, AV_LOG_WARNING, "Option -%s is deprecated and has no effect\n", opt);
1506  return 0;
1507 }
1508 #endif
1509 
1510 static const char *const alt_bsf[] = { "absf", "vbsf", NULL };
1511 static const char *const alt_channel_layout[] = { "ch_layout", NULL};
1512 static const char *const alt_codec[] = { "c", "acodec", "vcodec", "scodec", "dcodec", NULL };
1513 static const char *const alt_filter[] = { "af", "vf", NULL };
1514 static const char *const alt_frames[] = { "aframes", "vframes", "dframes", NULL };
1515 static const char *const alt_pre[] = { "apre", "vpre", "spre", NULL};
1516 static const char *const alt_qscale[] = { "q", NULL};
1517 static const char *const alt_tag[] = { "atag", "vtag", "stag", NULL };
1518 
1519 #define OFFSET(x) offsetof(OptionsContext, x)
1520 const OptionDef options[] = {
1521  /* main options */
1524  { .off = OFFSET(format) },
1525  "force container format (auto-detected otherwise)", "fmt" },
1526  { "y", OPT_TYPE_BOOL, 0,
1527  { &file_overwrite },
1528  "overwrite output files" },
1529  { "n", OPT_TYPE_BOOL, 0,
1530  { &no_file_overwrite },
1531  "never overwrite output files" },
1532  { "ignore_unknown", OPT_TYPE_BOOL, OPT_EXPERT,
1534  "Ignore unknown stream types" },
1535  { "copy_unknown", OPT_TYPE_BOOL, OPT_EXPERT,
1536  { &copy_unknown_streams },
1537  "Copy unknown stream types" },
1538  { "recast_media", OPT_TYPE_BOOL, OPT_EXPERT,
1539  { &recast_media },
1540  "allow recasting stream type in order to force a decoder of different media type" },
1542  { .off = OFFSET(codec_names) },
1543  "select encoder/decoder ('copy' to copy stream without reencoding)", "codec",
1544  .u1.name_canon = "codec", },
1546  { .off = OFFSET(codec_names) },
1547  "alias for -c (select encoder/decoder)", "codec",
1548  .u1.names_alt = alt_codec, },
1550  { .off = OFFSET(presets) },
1551  "preset name", "preset",
1552  .u1.names_alt = alt_pre, },
1554  { .func_arg = opt_map },
1555  "set input stream mapping",
1556  "[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" },
1557  { "map_metadata", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT | OPT_EXPERT,
1558  { .off = OFFSET(metadata_map) },
1559  "set metadata information of outfile from infile",
1560  "outfile[,metadata]:infile[,metadata]" },
1561  { "map_chapters", OPT_TYPE_INT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT,
1562  { .off = OFFSET(chapters_input_file) },
1563  "set chapters mapping", "input_file_index" },
1565  { .off = OFFSET(recording_time) },
1566  "stop transcoding after specified duration",
1567  "duration" },
1569  { .off = OFFSET(stop_time) },
1570  "stop transcoding after specified time is reached",
1571  "time_stop" },
1573  { .off = OFFSET(limit_filesize) },
1574  "set the limit file size in bytes", "limit_size" },
1576  { .off = OFFSET(start_time) },
1577  "start transcoding at specified time", "time_off" },
1578  { "sseof", OPT_TYPE_TIME, OPT_OFFSET | OPT_INPUT | OPT_EXPERT,
1579  { .off = OFFSET(start_time_eof) },
1580  "set the start time offset relative to EOF", "time_off" },
1581  { "seek_timestamp", OPT_TYPE_INT, OPT_OFFSET | OPT_INPUT | OPT_EXPERT,
1582  { .off = OFFSET(seek_timestamp) },
1583  "enable/disable seeking by timestamp with -ss" },
1584  { "accurate_seek", OPT_TYPE_BOOL, OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
1585  { .off = OFFSET(accurate_seek) },
1586  "enable/disable accurate seeking with -ss" },
1587  { "isync", OPT_TYPE_INT, OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
1588  { .off = OFFSET(input_sync_ref) },
1589  "Indicate the input index for sync reference", "sync ref" },
1590  { "itsoffset", OPT_TYPE_TIME, OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
1591  { .off = OFFSET(input_ts_offset) },
1592  "set the input ts offset", "time_off" },
1594  { .off = OFFSET(ts_scale) },
1595  "set the input ts scale", "scale" },
1597  { .func_arg = opt_recording_timestamp },
1598  "set the recording timestamp ('now' to set the current time)", "time" },
1599  { "metadata", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT,
1600  { .off = OFFSET(metadata) },
1601  "add metadata", "key=value" },
1602  { "program", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT,
1603  { .off = OFFSET(program) },
1604  "add program with specified streams", "title=string:st=number..." },
1605  { "stream_group", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT | OPT_EXPERT,
1606  { .off = OFFSET(stream_groups) },
1607  "add stream group with specified streams and group type-specific arguments", "id=number:st=number..." },
1609  { .func_arg = opt_data_frames },
1610  "set the number of data frames to output", "number",
1611  .u1.name_canon = "frames" },
1612  { "benchmark", OPT_TYPE_BOOL, OPT_EXPERT,
1613  { &do_benchmark },
1614  "add timings for benchmarking" },
1615  { "benchmark_all", OPT_TYPE_BOOL, OPT_EXPERT,
1616  { &do_benchmark_all },
1617  "add timings for each task" },
1618  { "progress", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1619  { .func_arg = opt_progress },
1620  "write program-readable progress information", "url" },
1621  { "stdin", OPT_TYPE_BOOL, OPT_EXPERT,
1622  { &stdin_interaction },
1623  "enable or disable interaction on standard input" },
1624  { "timelimit", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1625  { .func_arg = opt_timelimit },
1626  "set max runtime in seconds in CPU user time", "limit" },
1627  { "dump", OPT_TYPE_BOOL, OPT_EXPERT,
1628  { &do_pkt_dump },
1629  "dump each input packet" },
1630  { "hex", OPT_TYPE_BOOL, OPT_EXPERT,
1631  { &do_hex_dump },
1632  "when dumping packets, also dump the payload" },
1634  { .off = OFFSET(rate_emu) },
1635  "read input at native frame rate; equivalent to -readrate 1", "" },
1636  { "readrate", OPT_TYPE_FLOAT, OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
1637  { .off = OFFSET(readrate) },
1638  "read input at specified rate", "speed" },
1639  { "readrate_initial_burst", OPT_TYPE_DOUBLE, OPT_OFFSET | OPT_EXPERT | OPT_INPUT,
1640  { .off = OFFSET(readrate_initial_burst) },
1641  "The initial amount of input to burst read before imposing any readrate", "seconds" },
1643  { .func_arg = opt_target },
1644  "specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\" or \"dv50\" "
1645  "with optional prefixes \"pal-\", \"ntsc-\" or \"film-\")", "type" },
1646  { "frame_drop_threshold", OPT_TYPE_FLOAT, OPT_EXPERT,
1647  { &frame_drop_threshold },
1648  "frame drop threshold", "" },
1649  { "copyts", OPT_TYPE_BOOL, OPT_EXPERT,
1650  { &copy_ts },
1651  "copy timestamps" },
1652  { "start_at_zero", OPT_TYPE_BOOL, OPT_EXPERT,
1653  { &start_at_zero },
1654  "shift input timestamps to start at 0 when using copyts" },
1655  { "copytb", OPT_TYPE_INT, OPT_EXPERT,
1656  { &copy_tb },
1657  "copy input stream time base when stream copying", "mode" },
1658  { "shortest", OPT_TYPE_BOOL, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT,
1659  { .off = OFFSET(shortest) },
1660  "finish encoding within shortest input" },
1661  { "shortest_buf_duration", OPT_TYPE_FLOAT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT,
1662  { .off = OFFSET(shortest_buf_duration) },
1663  "maximum buffering duration (in seconds) for the -shortest option" },
1665  { .off = OFFSET(bitexact) },
1666  "bitexact mode" },
1667  { "dts_delta_threshold", OPT_TYPE_FLOAT, OPT_EXPERT,
1668  { &dts_delta_threshold },
1669  "timestamp discontinuity delta threshold", "threshold" },
1670  { "dts_error_threshold", OPT_TYPE_FLOAT, OPT_EXPERT,
1671  { &dts_error_threshold },
1672  "timestamp error delta threshold", "threshold" },
1673  { "xerror", OPT_TYPE_BOOL, OPT_EXPERT,
1674  { &exit_on_error },
1675  "exit on error", "error" },
1676  { "abort_on", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1677  { .func_arg = opt_abort_on },
1678  "abort on the specified condition flags", "flags" },
1679  { "copyinkf", OPT_TYPE_BOOL, OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1680  { .off = OFFSET(copy_initial_nonkeyframes) },
1681  "copy initial non-keyframes" },
1682  { "copypriorss", OPT_TYPE_INT, OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1683  { .off = OFFSET(copy_prior_start) },
1684  "copy or discard frames before start time" },
1686  { .off = OFFSET(max_frames) },
1687  "set the number of frames to output", "number",
1688  .u1.names_alt = alt_frames, },
1690  { .off = OFFSET(codec_tags) },
1691  "force codec tag/fourcc", "fourcc/tag",
1692  .u1.names_alt = alt_tag, },
1694  { .off = OFFSET(qscale) },
1695  "use fixed quality scale (VBR)", "q",
1696  .u1.name_canon = "qscale", },
1698  { .func_arg = opt_qscale },
1699  "use fixed quality scale (VBR)", "q",
1700  .u1.names_alt = alt_qscale, },
1702  { .func_arg = opt_profile },
1703  "set profile", "profile" },
1705  { .off = OFFSET(filters) },
1706  "apply specified filters to audio/video", "filter_graph",
1707  .u1.names_alt = alt_filter, },
1708  { "filter_threads", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1709  { .func_arg = opt_filter_threads },
1710  "number of non-complex filter threads" },
1711 #if FFMPEG_OPT_FILTER_SCRIPT
1712  { "filter_script", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1713  { .off = OFFSET(filter_scripts) },
1714  "deprecated, use -/filter", "filename" },
1715 #endif
1716  { "reinit_filter", OPT_TYPE_INT, OPT_PERSTREAM | OPT_INPUT | OPT_EXPERT,
1717  { .off = OFFSET(reinit_filters) },
1718  "reinit filtergraph on input parameter changes", "" },
1719  { "filter_complex", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1720  { .func_arg = opt_filter_complex },
1721  "create a complex filtergraph", "graph_description" },
1722  { "filter_complex_threads", OPT_TYPE_INT, OPT_EXPERT,
1724  "number of threads for -filter_complex" },
1725  { "lavfi", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1726  { .func_arg = opt_filter_complex },
1727  "create a complex filtergraph", "graph_description" },
1728 #if FFMPEG_OPT_FILTER_SCRIPT
1729  { "filter_complex_script", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1730  { .func_arg = opt_filter_complex_script },
1731  "deprecated, use -/filter_complex instead", "filename" },
1732 #endif
1733  { "auto_conversion_filters", OPT_TYPE_BOOL, OPT_EXPERT,
1735  "enable automatic conversion filters globally" },
1736  { "stats", OPT_TYPE_BOOL, 0,
1737  { &print_stats },
1738  "print progress report during encoding", },
1739  { "stats_period", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
1740  { .func_arg = opt_stats_period },
1741  "set the period at which ffmpeg updates stats and -progress output", "time" },
1743  { .func_arg = opt_attach },
1744  "add an attachment to the output file", "filename" },
1745  { "dump_attachment", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_INPUT,
1746  { .off = OFFSET(dump_attachment) },
1747  "extract an attachment into a file", "filename" },
1748  { "stream_loop", OPT_TYPE_INT, OPT_EXPERT | OPT_INPUT | OPT_OFFSET,
1749  { .off = OFFSET(loop) }, "set number of times input stream shall be looped", "loop count" },
1750  { "debug_ts", OPT_TYPE_BOOL, OPT_EXPERT,
1751  { &debug_ts },
1752  "print timestamp debugging info" },
1753  { "max_error_rate", OPT_TYPE_FLOAT, OPT_EXPERT,
1754  { &max_error_rate },
1755  "ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.", "maximum error rate" },
1757  { .off = OFFSET(discard) },
1758  "discard", "" },
1759  { "disposition", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_OUTPUT | OPT_EXPERT,
1760  { .off = OFFSET(disposition) },
1761  "disposition", "" },
1762  { "thread_queue_size", OPT_TYPE_INT, OPT_OFFSET | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT,
1763  { .off = OFFSET(thread_queue_size) },
1764  "set the maximum number of queued packets from the demuxer" },
1765  { "find_stream_info", OPT_TYPE_BOOL, OPT_INPUT | OPT_EXPERT | OPT_OFFSET,
1766  { .off = OFFSET(find_stream_info) },
1767  "read and decode the streams to fill missing information with heuristics" },
1768  { "bits_per_raw_sample", OPT_TYPE_INT, OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1769  { .off = OFFSET(bits_per_raw_sample) },
1770  "set the number of bits per raw sample", "number" },
1771 
1772  { "stats_enc_pre", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1773  { .off = OFFSET(enc_stats_pre) },
1774  "write encoding stats before encoding" },
1775  { "stats_enc_post", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1776  { .off = OFFSET(enc_stats_post) },
1777  "write encoding stats after encoding" },
1778  { "stats_mux_pre", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1779  { .off = OFFSET(mux_stats) },
1780  "write packets stats before muxing" },
1781  { "stats_enc_pre_fmt", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1782  { .off = OFFSET(enc_stats_pre_fmt) },
1783  "format of the stats written with -stats_enc_pre" },
1784  { "stats_enc_post_fmt", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1785  { .off = OFFSET(enc_stats_post_fmt) },
1786  "format of the stats written with -stats_enc_post" },
1787  { "stats_mux_pre_fmt", OPT_TYPE_STRING, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
1788  { .off = OFFSET(mux_stats_fmt) },
1789  "format of the stats written with -stats_mux_pre" },
1790 
1791  /* video options */
1793  { .func_arg = opt_video_frames },
1794  "set the number of video frames to output", "number",
1795  .u1.name_canon = "frames", },
1797  { .off = OFFSET(frame_rates) },
1798  "override input framerate/convert to given output framerate (Hz value, fraction or abbreviation)", "rate" },
1800  { .off = OFFSET(max_frame_rates) },
1801  "set max frame rate (Hz value, fraction or abbreviation)", "rate" },
1803  { .off = OFFSET(frame_sizes) },
1804  "set frame size (WxH or abbreviation)", "size" },
1806  { .off = OFFSET(frame_aspect_ratios) },
1807  "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" },
1809  { .off = OFFSET(frame_pix_fmts) },
1810  "set pixel format", "format" },
1811  { "display_rotation", OPT_TYPE_DOUBLE, OPT_VIDEO | OPT_PERSTREAM | OPT_INPUT | OPT_EXPERT,
1812  { .off = OFFSET(display_rotations) },
1813  "set pure counter-clockwise rotation in degrees for stream(s)",
1814  "angle" },
1815  { "display_hflip", OPT_TYPE_BOOL, OPT_VIDEO | OPT_PERSTREAM | OPT_INPUT | OPT_EXPERT,
1816  { .off = OFFSET(display_hflips) },
1817  "set display horizontal flip for stream(s) "
1818  "(overrides any display rotation if it is not set)"},
1819  { "display_vflip", OPT_TYPE_BOOL, OPT_VIDEO | OPT_PERSTREAM | OPT_INPUT | OPT_EXPERT,
1820  { .off = OFFSET(display_vflips) },
1821  "set display vertical flip for stream(s) "
1822  "(overrides any display rotation if it is not set)"},
1824  { .off = OFFSET(video_disable) },
1825  "disable video" },
1827  { .off = OFFSET(rc_overrides) },
1828  "rate control override for specific intervals", "override" },
1830  { .func_arg = opt_video_codec },
1831  "alias for -c:v (select encoder/decoder for video streams)", "codec",
1832  .u1.name_canon = "codec", },
1834  { .func_arg = opt_timecode },
1835  "set initial TimeCode value.", "hh:mm:ss[:;.]ff" },
1837  { .off = OFFSET(pass) },
1838  "select the pass number (1 to 3)", "n" },
1840  { .off = OFFSET(passlogfiles) },
1841  "select two pass log file name prefix", "prefix" },
1842  { "vstats", OPT_TYPE_FUNC, OPT_VIDEO | OPT_EXPERT,
1843  { .func_arg = opt_vstats },
1844  "dump video coding statistics to file" },
1845  { "vstats_file", OPT_TYPE_FUNC, OPT_VIDEO | OPT_FUNC_ARG | OPT_EXPERT,
1846  { .func_arg = opt_vstats_file },
1847  "dump video coding statistics to file", "file" },
1848  { "vstats_version", OPT_TYPE_INT, OPT_VIDEO | OPT_EXPERT,
1849  { &vstats_version },
1850  "Version of the vstats format to use."},
1852  { .func_arg = opt_video_filters },
1853  "alias for -filter:v (apply filters to video streams)", "filter_graph",
1854  .u1.name_canon = "filter", },
1855  { "intra_matrix", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1856  { .off = OFFSET(intra_matrices) },
1857  "specify intra matrix coeffs", "matrix" },
1858  { "inter_matrix", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1859  { .off = OFFSET(inter_matrices) },
1860  "specify inter matrix coeffs", "matrix" },
1861  { "chroma_intra_matrix", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1862  { .off = OFFSET(chroma_intra_matrices) },
1863  "specify intra matrix coeffs", "matrix" },
1865  { .func_arg = opt_old2new },
1866  "force video tag/fourcc", "fourcc/tag",
1867  .u1.name_canon = "tag", },
1869  { .off = OFFSET(fps_mode) },
1870  "set framerate mode for matching video streams; overrides vsync" },
1872  { .off = OFFSET(force_fps) },
1873  "force the selected framerate, disable the best supported framerate selection" },
1875  { .func_arg = opt_streamid },
1876  "set the value of an outfile streamid", "streamIndex:value" },
1877  { "force_key_frames", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1878  { .off = OFFSET(forced_key_frames) },
1879  "force key frames at specified timestamps", "timestamps" },
1881  { .func_arg = opt_bitrate },
1882  "video bitrate (please use -b:v)", "bitrate" },
1884  { .off = OFFSET(hwaccels) },
1885  "use HW accelerated decoding", "hwaccel name" },
1886  { "hwaccel_device", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_INPUT,
1887  { .off = OFFSET(hwaccel_devices) },
1888  "select a device for HW acceleration", "devicename" },
1889  { "hwaccel_output_format", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_INPUT,
1890  { .off = OFFSET(hwaccel_output_formats) },
1891  "select output format used with HW accelerated decoding", "format" },
1892  { "hwaccels", OPT_TYPE_FUNC, OPT_EXIT | OPT_EXPERT,
1893  { .func_arg = show_hwaccels },
1894  "show available HW acceleration methods" },
1895  { "autorotate", OPT_TYPE_BOOL, OPT_VIDEO | OPT_PERSTREAM | OPT_EXPERT | OPT_INPUT,
1896  { .off = OFFSET(autorotate) },
1897  "automatically insert correct rotate filters" },
1899  { .off = OFFSET(autoscale) },
1900  "automatically insert a scale filter at the end of the filter graph" },
1901  { "apply_cropping", OPT_TYPE_STRING, OPT_VIDEO | OPT_PERSTREAM | OPT_EXPERT | OPT_INPUT,
1902  { .off = OFFSET(apply_cropping) },
1903  "select the cropping to apply" },
1904  { "fix_sub_duration_heartbeat", OPT_TYPE_BOOL, OPT_VIDEO | OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1905  { .off = OFFSET(fix_sub_duration_heartbeat) },
1906  "set this video output stream to be a heartbeat stream for "
1907  "fix_sub_duration, according to which subtitles should be split at "
1908  "random access points" },
1909 
1910  /* audio options */
1912  { .func_arg = opt_audio_frames },
1913  "set the number of audio frames to output", "number",
1914  .u1.name_canon = "frames", },
1916  { .func_arg = opt_audio_qscale },
1917  "set audio quality (codec-specific)", "quality", },
1919  { .off = OFFSET(audio_sample_rate) },
1920  "set audio sampling rate (in Hz)", "rate" },
1922  { .off = OFFSET(audio_channels) },
1923  "set number of audio channels", "channels" },
1925  { .off = OFFSET(audio_disable) },
1926  "disable audio" },
1928  { .func_arg = opt_audio_codec },
1929  "alias for -c:a (select encoder/decoder for audio streams)", "codec",
1930  .u1.name_canon = "codec", },
1932  { .func_arg = opt_bitrate },
1933  "alias for -b:a (select bitrate for audio streams)", "bitrate" },
1935  { .off = OFFSET(apad) },
1936  "audio pad", "" },
1938  { .func_arg = opt_old2new },
1939  "force audio tag/fourcc", "fourcc/tag",
1940  .u1.name_canon = "tag", },
1942  { .off = OFFSET(sample_fmts) },
1943  "set sample format", "format" },
1945  { .off = OFFSET(audio_ch_layouts) },
1946  "set channel layout", "layout",
1947  .u1.names_alt = alt_channel_layout, },
1949  { .off = OFFSET(audio_ch_layouts) },
1950  "set channel layout", "layout",
1951  .u1.name_canon = "channel_layout", },
1953  { .func_arg = opt_audio_filters },
1954  "alias for -filter:a (apply filters to audio streams)", "filter_graph",
1955  .u1.name_canon = "filter", },
1956  { "guess_layout_max", OPT_TYPE_INT, OPT_AUDIO | OPT_PERSTREAM | OPT_EXPERT | OPT_INPUT,
1957  { .off = OFFSET(guess_layout_max) },
1958  "set the maximum number of channels to try to guess the channel layout" },
1959 
1960  /* subtitle options */
1962  { .off = OFFSET(subtitle_disable) },
1963  "disable subtitle" },
1965  { .func_arg = opt_subtitle_codec },
1966  "alias for -c:s (select encoder/decoder for subtitle streams)", "codec",
1967  .u1.name_canon = "codec", },
1969  { .func_arg = opt_old2new }
1970  , "force subtitle tag/fourcc", "fourcc/tag",
1971  .u1.name_canon = "tag" },
1972  { "fix_sub_duration", OPT_TYPE_BOOL, OPT_EXPERT | OPT_SUBTITLE | OPT_PERSTREAM | OPT_INPUT,
1973  { .off = OFFSET(fix_sub_duration) },
1974  "fix subtitles duration" },
1976  { .off = OFFSET(canvas_sizes) },
1977  "set canvas size (WxH or abbreviation)", "size" },
1978 
1979  /* muxer options */
1980  { "muxdelay", OPT_TYPE_FLOAT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT,
1981  { .off = OFFSET(mux_max_delay) },
1982  "set the maximum demux-decode delay", "seconds" },
1983  { "muxpreload", OPT_TYPE_FLOAT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT,
1984  { .off = OFFSET(mux_preload) },
1985  "set the initial demux-decode delay", "seconds" },
1986  { "sdp_file", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT | OPT_OUTPUT,
1987  { .func_arg = opt_sdp_file },
1988  "specify a file in which to print sdp information", "file" },
1989 
1990  { "time_base", OPT_TYPE_STRING, OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1991  { .off = OFFSET(time_bases) },
1992  "set the desired time base hint for output stream (1:24, 1:48000 or 0.04166, 2.0833e-5)", "ratio" },
1993  { "enc_time_base", OPT_TYPE_STRING, OPT_EXPERT | OPT_PERSTREAM | OPT_OUTPUT,
1994  { .off = OFFSET(enc_time_bases) },
1995  "set the desired time base for the encoder (1:24, 1:48000 or 0.04166, 2.0833e-5). "
1996  "two special values are defined - "
1997  "0 = use frame rate (video) or sample rate (audio),"
1998  "-1 = match source time base", "ratio" },
1999 
2001  { .off = OFFSET(bitstream_filters) },
2002  "A comma-separated list of bitstream filters", "bitstream_filters", },
2003 
2005  { .func_arg = opt_preset },
2006  "set the audio options to the indicated preset", "preset",
2007  .u1.name_canon = "pre", },
2009  { .func_arg = opt_preset },
2010  "set the video options to the indicated preset", "preset",
2011  .u1.name_canon = "pre", },
2013  { .func_arg = opt_preset },
2014  "set the subtitle options to the indicated preset", "preset",
2015  .u1.name_canon = "pre", },
2017  { .func_arg = opt_preset },
2018  "set options from indicated preset file", "filename",
2019  .u1.name_canon = "pre", },
2020 
2021  { "max_muxing_queue_size", OPT_TYPE_INT, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
2022  { .off = OFFSET(max_muxing_queue_size) },
2023  "maximum number of packets that can be buffered while waiting for all streams to initialize", "packets" },
2024  { "muxing_queue_data_threshold", OPT_TYPE_INT, OPT_PERSTREAM | OPT_EXPERT | OPT_OUTPUT,
2025  { .off = OFFSET(muxing_queue_data_threshold) },
2026  "set the threshold after which max_muxing_queue_size is taken into account", "bytes" },
2027 
2028  /* data codec support */
2030  { .func_arg = opt_data_codec },
2031  "alias for -c:d (select encoder/decoder for data streams)", "codec",
2032  .u1.name_canon = "codec", },
2034  { .off = OFFSET(data_disable) }, "disable data" },
2035 
2036 #if CONFIG_VAAPI
2037  { "vaapi_device", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
2038  { .func_arg = opt_vaapi_device },
2039  "set VAAPI hardware device (DirectX adapter index, DRM path or X11 display name)", "device" },
2040 #endif
2041 
2042 #if CONFIG_QSV
2043  { "qsv_device", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
2044  { .func_arg = opt_qsv_device },
2045  "set QSV hardware device (DirectX adapter index, DRM path or X11 display name)", "device"},
2046 #endif
2047 
2048  { "init_hw_device", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
2049  { .func_arg = opt_init_hw_device },
2050  "initialise hardware device", "args" },
2051  { "filter_hw_device", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
2052  { .func_arg = opt_filter_hw_device },
2053  "set hardware device used when filtering", "device" },
2054 
2055  // deprecated options
2056 #if FFMPEG_OPT_ADRIFT_THRESHOLD
2057  { "adrift_threshold", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
2058  { .func_arg = opt_adrift_threshold },
2059  "deprecated, does nothing", "threshold" },
2060 #endif
2061 #if FFMPEG_OPT_TOP
2063  { .off = OFFSET(top_field_first) },
2064  "deprecated, use the setfield video filter", "" },
2065 #endif
2066 #if FFMPEG_OPT_QPHIST
2067  { "qphist", OPT_TYPE_FUNC, OPT_VIDEO | OPT_EXPERT,
2068  { .func_arg = opt_qphist },
2069  "deprecated, does nothing" },
2070 #endif
2071 #if FFMPEG_OPT_VSYNC
2072  { "vsync", OPT_TYPE_FUNC, OPT_FUNC_ARG | OPT_EXPERT,
2073  { .func_arg = opt_vsync },
2074  "set video sync method globally; deprecated, use -fps_mode", "" },
2075 #endif
2076 
2077  { NULL, },
2078 };
OPT_EXIT
#define OPT_EXIT
Definition: cmdutils.h:203
show_help_options
void show_help_options(const OptionDef *options, const char *msg, int req_flags, int rej_flags)
Print help for all options matching specified flags.
Definition: cmdutils.c:107
AVCodec
AVCodec.
Definition: codec.h:187
fix_sub_duration_heartbeat
static int fix_sub_duration_heartbeat(DecoderPriv *dp, int64_t signal_pts)
Definition: ffmpeg_dec.c:617
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:215
InputFile::start_time
int64_t start_time
Definition: ffmpeg.h:482
ignore_unknown_streams
int ignore_unknown_streams
Definition: ffmpeg_opt.c:84
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
OptionsContext::stop_time
int64_t stop_time
Definition: ffmpeg.h:189
StreamMap::file_index
int file_index
Definition: ffmpeg.h:136
show_hwaccels
static int show_hwaccels(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:151
program
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C program
Definition: undefined.txt:6
AV_STEREO3D_VIEW_LEFT
@ AV_STEREO3D_VIEW_LEFT
Frame contains only the left view.
Definition: stereo3d.h:158
opt_abort_on
static int opt_abort_on(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:425
VSYNC_VFR
@ VSYNC_VFR
Definition: ffmpeg.h:69
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
nb_input_files
int nb_input_files
Definition: ffmpeg.c:105
opt.h
assert_file_overwrite
int assert_file_overwrite(const char *filename)
Definition: ffmpeg_opt.c:743
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
opt_video_filters
static int opt_video_filters(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1119
show_help_default
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
Definition: ffmpeg_opt.c:1204
debug_ts
int debug_ts
Definition: ffmpeg_opt.c:69
stats_period
int64_t stats_period
Definition: ffmpeg_opt.c:79
apply_cropping
static int apply_cropping(AVCodecContext *avctx, AVFrame *frame)
Definition: decode.c:761
is
The official guide to swscale for confused that is
Definition: swscale.txt:28
sample_fmts
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:948
opt_old2new
static int opt_old2new(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1062
AVStream::discard
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:819
stream_specifier_parse
int stream_specifier_parse(StreamSpecifier *ss, const char *spec, int allow_remainder, void *logctx)
Parse a stream specifier string into a form suitable for matching.
Definition: cmdutils.c:1009
AV_TIME_BASE_Q
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:264
int64_t
long long int64_t
Definition: coverity.c:34
av_asprintf
char * av_asprintf(const char *fmt,...)
Definition: avstring.c:115
av_strcasecmp
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition: avstring.c:207
avformat_get_class
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext.
Definition: options.c:201
program_name
const char program_name[]
program name, defined by the program for show_version().
Definition: ffmpeg.c:85
no_file_overwrite
static int no_file_overwrite
Definition: ffmpeg_opt.c:83
opt_default_new
static int opt_default_new(OptionsContext *o, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:992
OptionsContext::nb_attachments
int nb_attachments
Definition: ffmpeg.h:184
avcodec_find_encoder
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
Definition: allcodecs.c:1014
auto_conversion_filters
int auto_conversion_filters
Definition: ffmpeg_opt.c:78
audio_channels
int audio_channels
Definition: rtp.c:40
opt_audio_codec
static int opt_audio_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:462
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
AVFormatContext::streams
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1368
OptionsContext::mux_max_delay
float mux_max_delay
Definition: ffmpeg.h:192
OPT_FLAG_OFFSET
#define OPT_FLAG_OFFSET
Definition: cmdutils.h:219
OPT_INPUT
#define OPT_INPUT
Definition: cmdutils.h:233
copy_unknown_streams
int copy_unknown_streams
Definition: ffmpeg_opt.c:85
parse_number
int parse_number(const char *context, const char *numstr, enum OptionType type, double min, double max, double *dst)
Parse a string and return its corresponding value as a double.
Definition: cmdutils.c:84
AV_HWDEVICE_TYPE_NONE
@ AV_HWDEVICE_TYPE_NONE
Definition: hwcontext.h:28
StreamSpecifier
Definition: cmdutils.h:113
AVOption
AVOption.
Definition: opt.h:429
OptionGroupList::groups
OptionGroup * groups
Definition: cmdutils.h:356
OptionGroupList::nb_groups
int nb_groups
Definition: cmdutils.h:357
opt_timelimit
int opt_timelimit(void *optctx, const char *opt, const char *arg)
Limit the execution time.
format_opts
AVDictionary * format_opts
Definition: cmdutils.c:58
filter_hw_device
HWDevice * filter_hw_device
Definition: ffmpeg_opt.c:51
ffmpeg.h
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:225
progress_avio
AVIOContext * progress_avio
Definition: ffmpeg.c:102
opt_filter_hw_device
static int opt_filter_hw_device(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:673
fg_create
int fg_create(FilterGraph **pfg, char *graph_desc, Scheduler *sch)
Create a new filtergraph in the global filtergraph list.
Definition: ffmpeg_filter.c:1066
fc
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:472
show_help_children
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:140
av_hwdevice_iterate_types
enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev)
Iterate over supported device types.
Definition: hwcontext.c:125
autorotate
static int autorotate
Definition: ffplay.c:348
ViewSpecifier
Definition: ffmpeg.h:128
UNKNOWN
@ UNKNOWN
Definition: ftp.c:39
video_disable
static int video_disable
Definition: ffplay.c:315
mathematics.h
AVDictionary
Definition: dict.c:34
HWDevice
Definition: ffmpeg.h:109
hw_device_init_from_string
int hw_device_init_from_string(const char *arg, HWDevice **dev)
Definition: ffmpeg_hw.c:92
VIEW_SPECIFIER_TYPE_ALL
@ VIEW_SPECIFIER_TYPE_ALL
Definition: ffmpeg.h:125
do_benchmark
int do_benchmark
Definition: ffmpeg_opt.c:62
AV_STEREO3D_VIEW_RIGHT
@ AV_STEREO3D_VIEW_RIGHT
Frame contains only the right view.
Definition: stereo3d.h:163
av_strlcatf
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
Definition: avstring.c:103
GlobalOptionsContext
Definition: ffmpeg_opt.c:90
OptionDef
Definition: cmdutils.h:191
subtitle_disable
static int subtitle_disable
Definition: ffplay.c:316
OPT_DATA
#define OPT_DATA
Definition: cmdutils.h:211
stream_specifier_uninit
void stream_specifier_uninit(StreamSpecifier *ss)
Definition: cmdutils.c:1000
SpecifierOpt::i
int i
Definition: cmdutils.h:171
OptionsContext::chapters_input_file
int chapters_input_file
Definition: ffmpeg.h:186
opt_filter_threads
static int opt_filter_threads(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:418
do_hex_dump
int do_hex_dump
Definition: ffmpeg_opt.c:64
OptionGroupList
A list of option groups that all have the same group type (e.g.
Definition: cmdutils.h:353
bsf.h
do_pkt_dump
int do_pkt_dump
Definition: ffmpeg_opt.c:65
uninit_options
static void uninit_options(OptionsContext *o)
Definition: ffmpeg_opt.c:97
presets
static const Preset presets[]
Definition: vf_pseudocolor.c:286
opt_timecode
static int opt_timecode(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1139
OptionsContext::g
OptionGroup * g
Definition: ffmpeg.h:144
fail
#define fail()
Definition: checkasm.h:193
StreamMap::disabled
int disabled
Definition: ffmpeg.h:135
GlobalOptionsContext::nb_filtergraphs
int nb_filtergraphs
Definition: ffmpeg_opt.c:94
opt_data_frames
static int opt_data_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:986
VIEW_SPECIFIER_TYPE_POS
@ VIEW_SPECIFIER_TYPE_POS
Definition: ffmpeg.h:123
ifile_open
int ifile_open(const OptionsContext *o, const char *filename, Scheduler *sch)
Definition: ffmpeg_demux.c:1588
OptionParseContext
Definition: cmdutils.h:360
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
sws_get_class
const AVClass * sws_get_class(void)
Get the AVClass for SwsContext.
Definition: options.c:106
OptionsContext
Definition: ffmpeg.h:143
OPT_TYPE_FLOAT
@ OPT_TYPE_FLOAT
Definition: cmdutils.h:86
ss
#define ss(width, name, subs,...)
Definition: cbs_vp9.c:202
loop
static int loop
Definition: ffplay.c:335
AVRational::num
int num
Numerator.
Definition: rational.h:59
opt_audio_filters
static int opt_audio_filters(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1125
InputFile
Definition: ffmpeg.h:468
opt_filter_complex_script
static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1180
OptionGroupDef
Definition: cmdutils.h:321
AV_OPT_FLAG_AUDIO_PARAM
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:357
OptionsContext::recording_time
int64_t recording_time
Definition: ffmpeg.h:188
OPT_PERSTREAM
#define OPT_PERSTREAM
Definition: cmdutils.h:229
OptionsContext::nb_stream_maps
int nb_stream_maps
Definition: ffmpeg.h:182
avassert.h
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:209
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM
#define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM
Definition: ffmpeg.h:501
OptionGroup::codec_opts
AVDictionary * codec_opts
Definition: cmdutils.h:343
SpecifierOptList::nb_opt
int nb_opt
Definition: cmdutils.h:181
StreamMap::vs
ViewSpecifier vs
Definition: ffmpeg.h:140
opt_attach
static int opt_attach(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:606
opt_recording_timestamp
static int opt_recording_timestamp(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:687
StreamMap::linklabel
char * linklabel
Definition: ffmpeg.h:138
SpecifierOpt::specifier
char * specifier
Definition: cmdutils.h:165
AVCodecDescriptor
This struct describes the properties of a single codec described by an AVCodecID.
Definition: codec_desc.h:38
stereo3d.h
SpecifierOptList::type
enum OptionType type
Definition: cmdutils.h:188
s
#define s(width, name)
Definition: cbs_vp9.c:198
split_commandline
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:787
format
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
AVFormatContext::iformat
const struct AVInputFormat * iformat
The input container format.
Definition: avformat.h:1312
g
const char * g
Definition: vf_curves.c:128
OptionsContext::limit_filesize
int64_t limit_filesize
Definition: ffmpeg.h:190
VIEW_SPECIFIER_TYPE_NONE
@ VIEW_SPECIFIER_TYPE_NONE
Definition: ffmpeg.h:117
av_strtok
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:178
OPT_TYPE_DOUBLE
@ OPT_TYPE_DOUBLE
Definition: cmdutils.h:87
opt_audio_qscale
static int opt_audio_qscale(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1153
filters
#define filters(fmt, type, inverse, clp, inverset, clip, one, clip_fn, packed)
Definition: af_crystalizer.c:55
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
AVHWDeviceType
AVHWDeviceType
Definition: hwcontext.h:27
term_init
void term_init(void)
Definition: ffmpeg.c:201
AVIO_FLAG_WRITE
#define AVIO_FLAG_WRITE
write-only
Definition: avio.h:618
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:230
exit_on_error
int exit_on_error
Definition: ffmpeg_opt.c:70
ctx
AVFormatContext * ctx
Definition: movenc.c:49
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
term_exit
void term_exit(void)
Definition: ffmpeg.c:131
opt_match_per_stream
static unsigned opt_match_per_stream(void *logctx, enum OptionType type, const SpecifierOptList *sol, AVFormatContext *fc, AVStream *st)
Definition: ffmpeg_opt.c:176
av_hwdevice_get_type_name
const char * av_hwdevice_get_type_name(enum AVHWDeviceType type)
Get the string name of an AVHWDeviceType.
Definition: hwcontext.c:116
do_benchmark_all
int do_benchmark_all
Definition: ffmpeg_opt.c:63
OptionsContext::accurate_seek
int accurate_seek
Definition: ffmpeg.h:167
key
const char * key
Definition: hwcontext_opencl.c:189
opt_video_frames
static int opt_video_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:974
AV_OPT_FLAG_BSF_PARAM
#define AV_OPT_FLAG_BSF_PARAM
A generic parameter which can be set by the user for bit stream filtering.
Definition: opt.h:372
sch_sdp_filename
int sch_sdp_filename(Scheduler *sch, const char *sdp_filename)
Set the file path for the SDP.
Definition: ffmpeg_sched.c:611
arg
const char * arg
Definition: jacosubdec.c:67
if
if(ret)
Definition: filter_design.txt:179
OPT_SPEC
#define OPT_SPEC
Definition: cmdutils.h:225
OptionsContext::start_time
int64_t start_time
Definition: ffmpeg.h:147
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:221
AVFormatContext
Format I/O context.
Definition: avformat.h:1300
OptionGroup::format_opts
AVDictionary * format_opts
Definition: cmdutils.h:344
opts
AVDictionary * opts
Definition: movenc.c:51
opt_target
static int opt_target(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:808
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:771
open_file
static int open_file(AVFormatContext *avf, unsigned fileno)
Definition: concatdec.c:335
opt_profile
static int opt_profile(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1107
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:75
dec_create
int dec_create(const OptionsContext *o, const char *arg, Scheduler *sch)
Create a standalone decoder.
Definition: ffmpeg_dec.c:1684
avcodec_get_class
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext.
Definition: options.c:184
AVStream::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avformat.h:787
NULL
#define NULL
Definition: coverity.c:32
OPT_HAS_ALT
#define OPT_HAS_ALT
Definition: cmdutils.h:238
OptionParseContext::global_opts
OptionGroup global_opts
Definition: cmdutils.h:361
avcodec_find_decoder_by_name
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition: allcodecs.c:1047
av_bsf_get_class
const AVClass * av_bsf_get_class(void)
Get the AVClass for AVBSFContext.
Definition: bsf.c:99
OPT_EXPERT
#define OPT_EXPERT
Definition: cmdutils.h:207
swr_get_class
const AVClass * swr_get_class(void)
Get the AVClass for SwrContext.
Definition: options.c:143
InputFile::start_time_effective
int64_t start_time_effective
Effective format start time based on enabled streams.
Definition: ffmpeg.h:479
AVCodec::type
enum AVMediaType type
Definition: codec.h:200
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:239
parseutils.h
GlobalOptionsContext::sch
Scheduler * sch
Definition: ffmpeg_opt.c:91
options
Definition: swscale.c:42
ViewSpecifier::val
unsigned val
Definition: ffmpeg.h:130
double
double
Definition: af_crystalizer.c:132
parse_and_set_vsync
int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_idx, int is_global)
Definition: ffmpeg_opt.c:293
av_parse_time
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
Definition: parseutils.c:592
AV_DICT_DONT_OVERWRITE
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
Definition: dict.h:81
stream_specifier_match
unsigned stream_specifier_match(const StreamSpecifier *ss, const AVFormatContext *s, const AVStream *st, void *logctx)
Definition: cmdutils.c:1224
OptionsContext::input_sync_ref
int input_sync_ref
Definition: ffmpeg.h:169
OptionGroup
Definition: cmdutils.h:336
correct_input_start_times
static void correct_input_start_times(void)
Definition: ffmpeg_opt.c:329
AV_OPT_FLAG_ENCODING_PARAM
#define AV_OPT_FLAG_ENCODING_PARAM
A generic parameter which can be set by the user for muxing or encoding.
Definition: opt.h:352
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
input_files
InputFile ** input_files
Definition: ffmpeg.c:104
Scheduler
Definition: ffmpeg_sched.c:275
avcodec_find_decoder
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition: allcodecs.c:1019
opt_streamid
static int opt_streamid(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:789
file_read
char * file_read(const char *filename)
Definition: cmdutils.c:1495
opt_preset
static int opt_preset(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1012
opt_vstats_file
static int opt_vstats_file(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:951
codec_opts
AVDictionary * codec_opts
Definition: cmdutils.c:58
VideoSyncMethod
VideoSyncMethod
Definition: ffmpeg.h:65
opt_bitrate
static int opt_bitrate(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1074
AV_OPT_FLAG_FILTERING_PARAM
#define AV_OPT_FLAG_FILTERING_PARAM
A generic parameter which can be set by the user for filtering.
Definition: opt.h:381
max_error_rate
float max_error_rate
Definition: ffmpeg_opt.c:74
frame_sizes
static const uint8_t frame_sizes[]
Definition: rtpdec_qcelp.c:24
f
f
Definition: af_crystalizer.c:122
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
OptionsContext::thread_queue_size
int thread_queue_size
Definition: ffmpeg.h:168
AVMediaType
AVMediaType
Definition: avutil.h:199
OPT_TYPE_INT
@ OPT_TYPE_INT
Definition: cmdutils.h:84
opt_init_hw_device
static int opt_init_hw_device(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:658
SpecifierOptList
Definition: cmdutils.h:179
OPT_AUDIO
#define OPT_AUDIO
Definition: cmdutils.h:209
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:83
opt_map
static int opt_map(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:486
av_err2str
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: error.h:122
start_time
static int64_t start_time
Definition: ffplay.c:326
AVFormatContext::url
char * url
input or output URL.
Definition: avformat.h:1416
get_preset_file
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:921
StreamMap
Definition: ffmpeg.h:134
file_overwrite
static int file_overwrite
Definition: ffmpeg_opt.c:82
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
opt_subtitle_codec
static int opt_subtitle_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:474
OptionsContext::streamid
AVDictionary * streamid
Definition: ffmpeg.h:203
PAL
#define PAL
Definition: bktr.c:68
avio_check
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:664
AVFMT_NOFILE
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:468
vstats_filename
char * vstats_filename
Definition: ffmpeg_opt.c:53
OPT_TYPE_INT64
@ OPT_TYPE_INT64
Definition: cmdutils.h:85
printf
printf("static const uint8_t my_array[100] = {\n")
OptionType
OptionType
Definition: cmdutils.h:80
show_usage
void show_usage(void)
Definition: ffmpeg_opt.c:1321
opt_sdp_file
static int opt_sdp_file(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:620
fg_finalise_bindings
int fg_finalise_bindings(void)
Definition: ffmpeg_filter.c:1412
diff
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
Definition: vf_paletteuse.c:166
OPT_FLAG_SPEC
#define OPT_FLAG_SPEC
Definition: cmdutils.h:224
OptionsContext::find_stream_info
int find_stream_info
Definition: ffmpeg.h:170
SpecifierOptList::opt
SpecifierOpt * opt
Definition: cmdutils.h:180
line
Definition: graph2dot.c:48
opt_data_codec
static int opt_data_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:480
init_options
static void init_options(OptionsContext *o)
Definition: ffmpeg_opt.c:133
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:223
NTSC
#define NTSC
Definition: bktr.c:70
OPT_TYPE_FUNC
@ OPT_TYPE_FUNC
Definition: cmdutils.h:81
OPT_DECODER
#define OPT_DECODER
Definition: cmdutils.h:244
OPT_TYPE_BOOL
@ OPT_TYPE_BOOL
Definition: cmdutils.h:82
video_sync_method
enum VideoSyncMethod video_sync_method
Definition: ffmpeg_opt.c:59
OPT_HAS_CANON
#define OPT_HAS_CANON
Definition: cmdutils.h:241
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:220
start_at_zero
int start_at_zero
Definition: ffmpeg_opt.c:67
OptionDef::u1
union OptionDef::@2 u1
apply_sync_offsets
static int apply_sync_offsets(void)
Definition: ffmpeg_opt.c:366
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
StreamMap::stream_index
int stream_index
Definition: ffmpeg.h:137
OPT_TYPE_TIME
@ OPT_TYPE_TIME
Definition: cmdutils.h:88
OptionsContext::codec_names
SpecifierOptList codec_names
Definition: ffmpeg.h:152
OptionsContext::stream_maps
StreamMap * stream_maps
Definition: ffmpeg.h:181
OptionsContext::start_time_eof
int64_t start_time_eof
Definition: ffmpeg.h:148
VSYNC_CFR
@ VSYNC_CFR
Definition: ffmpeg.h:68
OptionsContext::shortest_buf_duration
float shortest_buf_duration
Definition: ffmpeg.h:193
opt_video_codec
static int opt_video_codec(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:468
opt_qscale
static int opt_qscale(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1090
stdin_interaction
int stdin_interaction
Definition: ffmpeg_opt.c:73
value
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
Definition: writing_filters.txt:86
InputFile::ctx
AVFormatContext * ctx
Definition: ffmpeg.h:473
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
AV_OPT_FLAG_VIDEO_PARAM
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:358
OPT_FUNC_ARG
#define OPT_FUNC_ARG
Definition: cmdutils.h:201
opt_vstats
static int opt_vstats(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:958
OPT_OUTPUT
#define OPT_OUTPUT
Definition: cmdutils.h:234
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:194
dts_error_threshold
float dts_error_threshold
Definition: ffmpeg_opt.c:56
cmdutils_isalnum
int cmdutils_isalnum(char c)
Definition: cmdutils.c:993
int_cb
const AVIOInterruptCB int_cb
Definition: ffmpeg.c:307
OPT_OFFSET
#define OPT_OFFSET
Definition: cmdutils.h:220
OptionParseContext::groups
OptionGroupList * groups
Definition: cmdutils.h:363
opt_audio_frames
static int opt_audio_frames(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:980
avcodec.h
SpecifierOpt::i64
int64_t i64
Definition: cmdutils.h:172
SpecifierOptList::opt_canon
const struct OptionDef * opt_canon
Definition: cmdutils.h:184
av_opt_eval_flags
int av_opt_eval_flags(void *obj, const AVOption *o, const char *val, int *flags_out)
SpecifierOpt
Definition: cmdutils.h:163
find_codec
int find_codec(void *logctx, const char *name, enum AVMediaType type, int encoder, const AVCodec **pcodec)
Definition: ffmpeg_opt.c:710
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:748
AV_LOG_FATAL
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
Definition: log.h:203
read_yesno
int read_yesno(void)
Return a positive value if a line read from standard input starts with [yY], otherwise return 0.
Definition: cmdutils.c:910
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:80
VIEW_SPECIFIER_TYPE_IDX
@ VIEW_SPECIFIER_TYPE_IDX
Definition: ffmpeg.h:119
VSYNC_DROP
@ VSYNC_DROP
Definition: ffmpeg.h:72
uninit_parse_context
void uninit_parse_context(OptionParseContext *octx)
Free all allocated memory in an OptionParseContext.
Definition: cmdutils.c:762
OPT_PERFILE
#define OPT_PERFILE
Definition: cmdutils.h:215
SpecifierOpt::stream_spec
StreamSpecifier stream_spec
Definition: cmdutils.h:167
find_stream_info
static int find_stream_info
Definition: ffplay.c:349
avformat.h
CMDUTILS_COMMON_OPTIONS
#define CMDUTILS_COMMON_OPTIONS
Definition: opt_common.h:199
filter_nbthreads
char * filter_nbthreads
Definition: ffmpeg_opt.c:75
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:754
OPT_FLAG_PERSTREAM
#define OPT_FLAG_PERSTREAM
Definition: cmdutils.h:228
parse_option
int parse_option(void *optctx, const char *opt, const char *arg, const OptionDef *options)
Parse one given option.
Definition: cmdutils.c:377
OptionsContext::mux_preload
float mux_preload
Definition: ffmpeg.h:191
OptionDef::names_alt
const char *const * names_alt
Definition: cmdutils.h:260
opt_match_per_type_str
const char * opt_match_per_type_str(const SpecifierOptList *sol, char mediatype)
Definition: ffmpeg_opt.c:163
opt_common.h
AVInputFormat::flags
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, AVFMT_NOTIMESTAMPS,...
Definition: avformat.h:567
AVRational::den
int den
Denominator.
Definition: rational.h:60
SpecifierOpt::str
uint8_t * str
Definition: cmdutils.h:170
OPT_SUBTITLE
#define OPT_SUBTITLE
Definition: cmdutils.h:210
avfilter.h
av_get_token
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:143
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:117
ffmpeg_parse_options
int ffmpeg_parse_options(int argc, char **argv, Scheduler *sch)
GROW_ARRAY
#define GROW_ARRAY(array, nb_elems)
Definition: cmdutils.h:532
InputFile::ts_offset
int64_t ts_offset
Definition: ffmpeg.h:480
VSYNC_AUTO
@ VSYNC_AUTO
Definition: ffmpeg.h:66
opt_vsync
static int opt_vsync(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1132
parse_optgroup
int parse_optgroup(void *optctx, OptionGroup *g, const OptionDef *defs)
Parse an options group and write results into optctx.
Definition: cmdutils.c:453
GlobalOptionsContext::filtergraphs
char ** filtergraphs
Definition: ffmpeg_opt.c:93
AVERROR_DECODER_NOT_FOUND
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
Definition: error.h:54
opt_default
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:596
av_strdup
char * av_strdup(const char *s)
Duplicate a string.
Definition: mem.c:272
AV_OPT_FLAG_DECODING_PARAM
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition: opt.h:356
desc
const char * desc
Definition: libsvtav1.c:79
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AVERROR_ENCODER_NOT_FOUND
#define AVERROR_ENCODER_NOT_FOUND
Encoder not found.
Definition: error.h:56
avutil.h
ViewSpecifier::type
enum ViewSpecifierType type
Definition: ffmpeg.h:129
AVFMT_TS_DISCONT
#define AVFMT_TS_DISCONT
Format allows timestamp discontinuities.
Definition: avformat.h:481
mem.h
copy_tb
int copy_tb
Definition: ffmpeg_opt.c:68
SpecifierOpt::u
union SpecifierOpt::@0 u
opt_stats_period
static int opt_stats_period(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:444
vstats_version
int vstats_version
Definition: ffmpeg_opt.c:77
avio_open2
int avio_open2(AVIOContext **s, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
Definition: avio.c:491
of_open
int of_open(const OptionsContext *o, const char *filename, Scheduler *sch)
Definition: ffmpeg_mux_init.c:3262
OptionDef::name
const char * name
Definition: cmdutils.h:192
ffmpeg_sched.h
OPT_VIDEO
#define OPT_VIDEO
Definition: cmdutils.h:208
av_free
#define av_free(p)
Definition: tableprint_vlc.h:33
OptionsContext::attachments
const char ** attachments
Definition: ffmpeg.h:183
SpecifierOpt::dbl
double dbl
Definition: cmdutils.h:175
OPT_TYPE_STRING
@ OPT_TYPE_STRING
Definition: cmdutils.h:83
audio_disable
static int audio_disable
Definition: ffplay.c:314
VIEW_SPECIFIER_TYPE_ID
@ VIEW_SPECIFIER_TYPE_ID
Definition: ffmpeg.h:121
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
av_dict_set
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:88
av_dict_copy
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:237
copy_ts
int copy_ts
Definition: ffmpeg_opt.c:66
cmdutils.h
OFFSET
#define OFFSET(x)
InputFile::input_ts_offset
int64_t input_ts_offset
Definition: ffmpeg.h:474
avio_find_protocol_name
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
Definition: avio.c:657
codec_string
Definition: dashenc.c:209
AV_OPT_TYPE_FLAGS
@ AV_OPT_TYPE_FLAGS
Underlying C type is unsigned int.
Definition: opt.h:255
frame_drop_threshold
float frame_drop_threshold
Definition: ffmpeg_opt.c:61
recast_media
int recast_media
Definition: ffmpeg_opt.c:86
view_specifier_parse
int view_specifier_parse(const char **pspec, ViewSpecifier *vs)
Definition: ffmpeg_opt.c:240
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:482
av_strlcpy
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:85
print_stats
int print_stats
Definition: ffmpeg_opt.c:72
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_EXIT
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
Definition: error.h:58
AVStream::start_time
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition: avformat.h:797
avstring.h
avcodec_descriptor_get_by_name
const AVCodecDescriptor * avcodec_descriptor_get_by_name(const char *name)
Definition: codec_desc.c:3795
InputFile::nb_streams
int nb_streams
Definition: ffmpeg.h:488
OPT_MATCH_PER_STREAM
#define OPT_MATCH_PER_STREAM(name, type, opt_type, m)
Definition: ffmpeg_opt.c:226
hw_device_get_by_name
HWDevice * hw_device_get_by_name(const char *name)
Definition: ffmpeg_hw.c:42
avfilter_get_class
const AVClass * avfilter_get_class(void)
Definition: avfilter.c:1650
dump_attachment
static int dump_attachment(InputStream *ist, const char *filename)
Definition: ffmpeg_demux.c:1521
VSYNC_PASSTHROUGH
@ VSYNC_PASSTHROUGH
Definition: ffmpeg.h:67
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:299
snprintf
#define snprintf
Definition: snprintf.h:34
ABORT_ON_FLAG_EMPTY_OUTPUT
#define ABORT_ON_FLAG_EMPTY_OUTPUT
Definition: ffmpeg.h:500
SpecifierOpt::f
float f
Definition: cmdutils.h:174
opt_filter_complex
static int opt_filter_complex(void *optctx, const char *opt, const char *arg)
Definition: ffmpeg_opt.c:1159
avcodec_find_encoder_by_name
const AVCodec * avcodec_find_encoder_by_name(const char *name)
Find a registered encoder with the specified name.
Definition: allcodecs.c:1042
dts_delta_threshold
float dts_delta_threshold
Definition: ffmpeg_opt.c:55
abort_on_flags
int abort_on_flags
Definition: ffmpeg_opt.c:71
filter_complex_nbthreads
int filter_complex_nbthreads
Definition: ffmpeg_opt.c:76
OptionDef::flags
int flags
Definition: cmdutils.h:194