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