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