youtubeDlSpec top-level property

FigSpec youtubeDlSpec
final

Completion spec for youtube-dl CLI

Implementation

final FigSpec youtubeDlSpec = FigSpec(
    name: 'youtube-dl',
    description: 'Download videos from YouTube',
    args: [
      Arg(
          name: 'URL',
          generators: youtubeDlGenerators['listClipboard'],
          isVariadic: true)
    ],
    options: [
      Option(
          name: ['--help', '-h'], description: 'Print the help text and exit'),
      Option(name: '--version', description: 'Print program version and exit'),
      Option(
          name: ['-U', '--update'],
          description:
              'Update this program to latest version. Make sure you have sufficient permissions (run with sudo if needed)'),
      Option(
          name: ['--ignore-errors', '-i'],
          description:
              'Continue on download errors, for example to skip unavailable videos in a playlist'),
      Option(
          name: '--abort-on-error',
          description:
              'Abort downloading of further videos (in the playlist or the command line) if an error occurs'),
      Option(
          name: '--dump-user-agent',
          description: 'Display the current browser identification'),
      Option(
          name: '--list-extractors',
          description: 'List all supported extractors'),
      Option(
          name: '--extractor-descriptions',
          description: 'Output descriptions of all supported extractors'),
      Option(
          name: '--default-search',
          description:
              'Use this prefix for unqualified URLs. For example "gvsearch2:" downloads two videos from google videos for youtube-dl "large apple"',
          args: [Arg(name: 'PREFIX')]),
      Option(
          name: '--config-location',
          description:
              'Location of the configuration file; either the path to the config or its containing directory',
          args: [
            Arg(name: 'PATH', template: ['filepaths', 'folders'])
          ]),
      Option(
          name: '--force-generic-extractor',
          description: 'Force extraction to use the generic extractor'),
      Option(
          name: '--ignore-config',
          description: 'Do not read configuration files'),
      Option(
          name: '--flat-playlist',
          description:
              'Do not extract the videos of a playlist, only list them'),
      Option(
          name: '--mark-watched',
          description: 'Mark videos watched (YouTube only)'),
      Option(
          name: '--no-mark-watched',
          description: 'Do not mark videos watched (YouTube only)'),
      Option(
          name: '--no-color', description: 'Do not emit color codes in output'),
      Option(
          name: '--proxy',
          description:
              'Use the specified HTTP/HTTPS/SOCKS proxy. Pass in an empty string for direct connection',
          insertValue: '--proxy "{cursor}"',
          args: [Arg(name: 'URL')]),
      Option(
          name: '--socket-timeout',
          description: 'Time to wait before giving up, in seconds',
          args: [Arg(name: 'SECONDS')]),
      Option(
          name: '--source-address',
          description: 'Client-side IP address to bind to',
          args: [Arg(name: 'IP')]),
      Option(
          name: ['-4', '--force-ipv4'],
          description: 'Make all connections via IPv4'),
      Option(
          name: ['-6', '--force-ipv6'],
          description: 'Make all connections via IPv6'),
      Option(
          name: '--geo-verification-proxy',
          description:
              'Use this proxy to verify the IP address for some geo-restricted sites',
          args: [Arg(name: 'URL')]),
      Option(
          name: '--geo-bypass',
          description:
              'Bypass geographic restriction via faking X-Forwarded-For HTTP header'),
      Option(
          name: '--no-geo-bypass',
          description:
              'Do not bypass geographic restriction via faking X-Forwarded-For HTTP header'),
      Option(
          name: '--geo-bypass-country',
          description:
              'Force bypass geographic restriction with explicitly provided two-letter ISO 3166-2 county code',
          args: [Arg(name: 'CODE')]),
      Option(
          name: '--geo-bypass-ip-block',
          description:
              'Force bypass geographic restriction with explicitly provided IP block in CIDR notation',
          args: [Arg(name: 'IP_BLOCK')]),
      Option(
          name: '--playlist-start',
          description: 'Playlist video to start at (default is 1)',
          args: [
            Arg(name: 'NUMBER', generators: youtubeDlGenerators['listVideos'])
          ]),
      Option(
          name: '--playlist-end',
          description: 'Playlist video to end at (default is last)',
          args: [
            Arg(name: 'NUMBER', generators: youtubeDlGenerators['listVideos'])
          ]),
      Option(
          name: '--playlist-items',
          description: 'Playlist video to end at (default is last)',
          args: [
            Arg(
                name: 'ITEM_SPEC',
                generators: youtubeDlGenerators['listVideos'])
          ]),
      Option(
          name: '--match-title',
          description:
              'Download only matching titles (regex or caseless sub-string)',
          args: [Arg(name: 'REGEX')]),
      Option(
          name: '--reject-title',
          description:
              'Skip download for matching titles (regex or caseless sub-string)',
          args: [Arg(name: 'REGEX')]),
      Option(
          name: '--max-downloads',
          description: 'Abort after downloading NUMBER files',
          args: [Arg(name: 'NUMBER')]),
      Option(
          name: '--min-filesize',
          description:
              'Do not download any videos smaller than SIZE (e.g. 50k or 44.6)',
          args: [Arg(name: 'SIZE')]),
      Option(
          name: '--max-filesize',
          description:
              'Do not download any videos larger than SIZE (e.g. 50k or 44.6)',
          args: [Arg(name: 'SIZE')]),
      Option(
          name: '--date',
          description: 'Download only videos uploaded in this date',
          args: [Arg(name: 'DATE')]),
      Option(
          name: '--datebefore',
          description:
              'Download only videos uploaded on or before this date (i.e. inclusive)',
          args: [Arg(name: 'DATE')]),
      Option(
          name: '--dateafter',
          description:
              'Download only videos uploaded on or after this date (i.e. inclusive)',
          args: [Arg(name: 'DATE')]),
      Option(
          name: '--min-views',
          description: 'Do not download any videos with less than COUNT views',
          args: [Arg(name: 'COUNT')]),
      Option(
          name: '--max-views',
          description: 'Do not download any videos with more than COUNT views',
          args: [Arg(name: 'COUNT')]),
      Option(
          name: '--match-filter',
          description: 'Generic video filter',
          args: [Arg(name: 'FILTER')]),
      Option(
          name: '--no-playlist',
          description:
              'Download only the video, if the URL refers to a video and a playlist'),
      Option(
          name: '--yes-playlist',
          description:
              'Download the playlist, if the URL refers to a video and a playlist'),
      Option(
          name: '--age-limit',
          description: 'Download only videos suitable for the given age',
          args: [Arg(name: 'YEARS')]),
      Option(
          name: '--download-archive',
          description:
              'Download only videos not listed in the archive file. Record the IDs of all downloaded videos in it',
          args: [Arg(name: 'FILE')]),
      Option(
          name: '--include-ads',
          description: 'Download advertisements as well (experimental)'),
      Option(
          name: ['-r', '--limit-rate'],
          description:
              'Maximum download rate in bytes per second (e.g. 50K or 4.2M)',
          args: [Arg(name: 'RATE')]),
      Option(
          name: ['-R', '--retries'],
          description: 'Number of retries or "infinite"',
          args: [Arg(name: 'RETRIES', defaultValue: '10')]),
      Option(
          name: '--fragment-retries',
          description: 'Number of retries for a fragment or "infinite"',
          args: [Arg(name: 'RETRIES', defaultValue: '10')]),
      Option(
          name: '--skip-unavailable-fragments',
          description: 'Skip unavailable fragments'),
      Option(
          name: '--abort-on-unavailable-fragments',
          description: 'Abort downloading when some fragment is not available'),
      Option(
          name: '--keep-fragments',
          description:
              'Keep downloaded fragments on disk after downloading is finished; fragments are erased by default'),
      Option(
          name: '--buffer-size',
          description: 'Size of download buffer (e.g. 1024 or 16K)',
          args: [Arg(name: 'SIZE', defaultValue: '1024')]),
      Option(
          name: '--no-resize-buffer',
          description: 'Do not automatically adjust the buffer size'),
      Option(
          name: '--http-chunk-size',
          description:
              'Size of a chunk for chunk-based HTTP downloading (e.g. 10385760 or 10M)',
          args: [Arg(name: 'SIZE')]),
      Option(
          name: '--playlist-reverse',
          description: 'Download playlist videos in reverse order'),
      Option(
          name: '--playlist-random',
          description: 'Download playlist videos in random order'),
      Option(
          name: '--xattr-set-filesize',
          description:
              'Set file xattribute ytdl.filesize with expected file size'),
      Option(
          name: '--hls-prefer-native',
          description: 'Use the native HLS downloader instead of ffmpeg'),
      Option(
          name: '--hls-prefer-ffmpeg',
          description: 'Use ffmpeg instead of the native HLS downloader'),
      Option(
          name: '--hls-prefer-mpegts',
          description:
              'Use the mpegts container for HLS videos, allowing to play the video while downloading'),
      Option(
          name: '--external-downloader',
          description: 'Use the specified external downloader',
          args: [
            Arg(name: 'COMMAND', suggestions: [
              FigSuggestion(name: 'aria2c'),
              FigSuggestion(name: 'avconv'),
              FigSuggestion(name: 'axel'),
              FigSuggestion(name: 'curl'),
              FigSuggestion(name: 'ffmpeg'),
              FigSuggestion(name: 'httpie'),
              FigSuggestion(name: 'wget')
            ])
          ]),
      Option(
          name: '--external-downloader-args',
          description: 'Give these arguments to the external downloader',
          dependsOn: ['--external-downloader'],
          args: [Arg(name: 'ARGS')]),
      Option(
          name: ['-a', '--batch-file'],
          description:
              'File containing URLs to download (\'-\' for stdin), one URL per line. Lines starting with \'#\', \';\' or \']\' are considered as comments and ignored',
          args: [
            Arg(
                name: 'FILE',
                suggestions: [FigSuggestion(name: '-')],
                template: ['filepaths'])
          ]),
      Option(name: '--id', description: 'Use only video ID in file name'),
      Option(
          name: ['-o', '--output'],
          description: 'Output filename template',
          args: [Arg(name: 'TEMPLATE')]),
      Option(
          name: '--output-na-placeholder',
          description:
              'Placeholder value for unavailable meta fields in output filename template',
          args: [Arg(name: 'PLACEHOLDER', defaultValue: 'NA')]),
      Option(
          name: '--autonumber-start',
          description: 'Specify the start value for %(autonumber)s',
          args: [Arg(name: 'NUMBER', defaultValue: '1')]),
      Option(
          name: '--restrict-filenames',
          description:
              'Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames'),
      Option(
          name: ['-w', '--no-overwrites'],
          description: 'Do not overwrite files'),
      Option(
          name: ['-c', '--continue'],
          description:
              'Do not resume partially downloaded files (restart from beginning)'),
      Option(
          name: '--no-part',
          description:
              'Do not use .part files - write directly into output file'),
      Option(
          name: '--no-mtime',
          description:
              'Do not use the Last-modified header to set the file modification time'),
      Option(
          name: '--write-description',
          description: 'Write video descriptions to a .description file'),
      Option(
          name: '--write-info-json',
          description: 'Write video metadata to a .info.json file'),
      Option(
          name: '--write-annotations',
          description: 'Write video annotations to a .annotations.xml file'),
      Option(
          name: '--load-info-json',
          description:
              'JSON file containing the video information (created with the "--write-info-json" option',
          args: [Arg(name: 'FILE', template: 'filepaths')]),
      Option(
          name: '--cookies',
          description: 'File to read cookies from and dump cookie jar in',
          args: [Arg(name: 'FILE', template: 'filepaths')]),
      Option(
          name: '--cache-dir',
          description:
              'Location in the filesystem where youtube-dl can store some downloaded information permanently',
          args: [
            Arg(
                name: 'DIR',
                template: 'folders',
                defaultValue: '\$XDG_CACHE_HOME/youtube-dl')
          ]),
      Option(name: '--no-cache-dir', description: 'Disable filesystem caching'),
      Option(
          name: '--rm-cache-dir',
          description: 'Delete all filesystem cache files'),
      Option(
          name: '--write-thumbnail',
          description: 'Write thumbnail image to disk'),
      Option(
          name: '--write-all-thumbnail',
          description: 'Write all thumbnail image formats to disk'),
      Option(
          name: '--list-thumbnails',
          description: 'Simulate and list all available thumbnail formats'),
      Option(name: ['-q', '--quiet'], description: 'Activate quite mode'),
      Option(name: '--no-warnings', description: 'Ignore warnings'),
      Option(
          name: ['-s', '--simulate'],
          description:
              'Do not download the video and do note write anything to disk'),
      Option(name: '--skip-download', description: 'Do not download the video'),
      Option(
          name: ['-g', '--get-url'],
          description: 'Simulate, quiet but print URL'),
      Option(
          name: ['-e', '--get-title'],
          description: 'Simulate, quiet but print title'),
      Option(name: '--get-id', description: 'Simulate, quiet but print id'),
      Option(
          name: '--get-thumbnail',
          description: 'Simulate, quiet but print thumbnail URL'),
      Option(
          name: '--get-description',
          description: 'Simulate, quiet but print video description'),
      Option(
          name: '--get-duration',
          description: 'Simulate, quiet but print video length'),
      Option(
          name: '--get-filename',
          description: 'Simulate, quiet but print output filename'),
      Option(
          name: '--get-format',
          description: 'Simulate, quiet but print output format'),
      Option(
          name: ['-j', '--dump-json'],
          description: 'Simulate, quiet but JSON information'),
      Option(
          name: ['-J', '--dump-single-json'],
          description:
              'Simulate, quiet but JSON information for each command-line argument'),
      Option(
          name: '--print-json',
          description:
              'Be quiet and print the video information as JSON (video is still being downloaded)'),
      Option(
          name: '--newline',
          description: 'Output the progress bar as new lines'),
      Option(
          name: '--no-progress', description: 'Do not print the progress bar'),
      Option(
          name: '--console-title',
          description: 'Display progress in console titlebar'),
      Option(
          name: ['-v', '--verbose'],
          description: 'Print various debugging information'),
      Option(
          name: '--dump-pages',
          description:
              'Print downloaded pages encoded using base64 to debug problems (very verbose)'),
      Option(
          name: '--write-pages',
          description:
              'Write downloaded intermediary pages to files in the current directory to debug problems'),
      Option(
          name: '--print-traffic',
          description: 'Display sent and read HTTP traffic'),
      Option(
          name: ['-C', '--call-home'],
          description: 'Contact the youtube-dl server for debugging'),
      Option(
          name: '--no-call-home',
          description: 'Do NOT contact the youtube-dl server for debugging'),
      Option(
          name: '--encoding',
          description: 'Force the specified encoding (experimental)',
          args: [Arg(name: 'ENCODING')]),
      Option(
          name: '--no-check-certificate',
          description: 'Suppress HTTPS certificate validation'),
      Option(
          name: '--prefer-insecure',
          description:
              'Use an unencrypted connection to retrieve information about the video. (Currently supported only for YouTube)'),
      Option(
          name: '--user-agent',
          description: 'Specify a custom user agent',
          args: [Arg(name: 'UA')]),
      Option(
          name: '--referer',
          description:
              'Specify a custom referer, use if the video access is restricted to one domain',
          args: [Arg(name: 'URL')]),
      Option(
          name: '--add-header',
          description:
              'Specify a custom HTTP header and its value, separated by a colon \':\'',
          isRepeatable: true,
          args: [Arg(name: 'FIELD:VALUE')]),
      Option(
          name: '--bidi-workaround',
          description:
              'Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH'),
      Option(
          name: '--sleep-interval',
          description:
              'Number of seconds to sleep before each download when used alone or a lower bound of a range for randomized sleep before each download when used along with --max-sleep-interval',
          args: [Arg(name: 'SECONDS')]),
      Option(
          name: '--max-sleep-interval',
          dependsOn: ['--sleep-interval'],
          description:
              'Upper bound of a range for randomized sleep before each download. Must only be used along with --min- sleep-interval',
          args: [Arg(name: 'SECONDS')]),
      Option(
          name: ['-f', '--format'],
          description: 'Video format code',
          args: [Arg(name: 'FORMAT')]),
      Option(
          name: '--all-formats',
          description: 'Download all available video formats'),
      Option(
          name: '--prefer-free-formats',
          description:
              'Prefer free video formats unless a specific one is requested'),
      Option(
          name: ['-F', '--list-formats'],
          description: 'List all available formats of requested videos'),
      Option(
          name: '--youtube-skip-dash-manifest',
          description:
              'Do not download the DASH manifests and related data on YouTube videos'),
      Option(
          name: '--merge-output-format',
          description:
              'If a merge is required (e.g. bestvideo+bestaudio), output to given container format',
          args: [
            Arg(name: 'FORMAT', suggestions: [
              FigSuggestion(name: 'mkv'),
              FigSuggestion(name: 'mp4'),
              FigSuggestion(name: 'ogg'),
              FigSuggestion(name: 'webm'),
              FigSuggestion(name: 'flv')
            ])
          ]),
      Option(name: '--write-sub', description: 'Write subtitle file'),
      Option(
          name: '--write-auto-sub',
          description:
              'Write automatically generated subtitle file (YouTube only)'),
      Option(
          name: '--all-subs',
          description: 'Download all the available subtitles of the video'),
      Option(
          name: '--list-subs',
          description: 'List all available subtitles for the video'),
      Option(
          name: '--sub-format',
          description:
              'Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"',
          args: [Arg(name: 'FORMAT')]),
      Option(
          name: '--sub-lang',
          description:
              'Languages of the subtitles to download (optional) separated by commas',
          args: [
            Arg(
                name: 'LANGS',
                generators: FigGenerator(getQueryTerm: ','),
                suggestions: [
                  FigSuggestion(name: 'af'),
                  FigSuggestion(name: 'sq'),
                  FigSuggestion(name: 'am'),
                  FigSuggestion(name: 'ar'),
                  FigSuggestion(name: 'hy'),
                  FigSuggestion(name: 'az'),
                  FigSuggestion(name: 'bn'),
                  FigSuggestion(name: 'eu'),
                  FigSuggestion(name: 'be'),
                  FigSuggestion(name: 'bs'),
                  FigSuggestion(name: 'bg'),
                  FigSuggestion(name: 'my'),
                  FigSuggestion(name: 'ca'),
                  FigSuggestion(name: 'ceb'),
                  FigSuggestion(name: 'zh-Hans'),
                  FigSuggestion(name: 'zh-Hant'),
                  FigSuggestion(name: 'co'),
                  FigSuggestion(name: 'hr'),
                  FigSuggestion(name: 'cs'),
                  FigSuggestion(name: 'da'),
                  FigSuggestion(name: 'nl'),
                  FigSuggestion(name: 'en'),
                  FigSuggestion(name: 'eo'),
                  FigSuggestion(name: 'et'),
                  FigSuggestion(name: 'fil'),
                  FigSuggestion(name: 'fi'),
                  FigSuggestion(name: 'fr'),
                  FigSuggestion(name: 'gl'),
                  FigSuggestion(name: 'ka'),
                  FigSuggestion(name: 'de'),
                  FigSuggestion(name: 'el'),
                  FigSuggestion(name: 'gu'),
                  FigSuggestion(name: 'ht'),
                  FigSuggestion(name: 'ha'),
                  FigSuggestion(name: 'haw'),
                  FigSuggestion(name: 'iw'),
                  FigSuggestion(name: 'hi'),
                  FigSuggestion(name: 'hmn'),
                  FigSuggestion(name: 'hu'),
                  FigSuggestion(name: 'is'),
                  FigSuggestion(name: 'ig'),
                  FigSuggestion(name: 'id'),
                  FigSuggestion(name: 'ga'),
                  FigSuggestion(name: 'it'),
                  FigSuggestion(name: 'ja'),
                  FigSuggestion(name: 'jv'),
                  FigSuggestion(name: 'kn'),
                  FigSuggestion(name: 'kk'),
                  FigSuggestion(name: 'km'),
                  FigSuggestion(name: 'rw'),
                  FigSuggestion(name: 'ko'),
                  FigSuggestion(name: 'ku'),
                  FigSuggestion(name: 'ky'),
                  FigSuggestion(name: 'lo'),
                  FigSuggestion(name: 'la'),
                  FigSuggestion(name: 'lv'),
                  FigSuggestion(name: 'lt'),
                  FigSuggestion(name: 'lb'),
                  FigSuggestion(name: 'mk'),
                  FigSuggestion(name: 'mg'),
                  FigSuggestion(name: 'ms'),
                  FigSuggestion(name: 'ml'),
                  FigSuggestion(name: 'mt'),
                  FigSuggestion(name: 'mi'),
                  FigSuggestion(name: 'mr'),
                  FigSuggestion(name: 'mn'),
                  FigSuggestion(name: 'ne'),
                  FigSuggestion(name: 'no'),
                  FigSuggestion(name: 'ny'),
                  FigSuggestion(name: 'or'),
                  FigSuggestion(name: 'ps'),
                  FigSuggestion(name: 'fa'),
                  FigSuggestion(name: 'pl'),
                  FigSuggestion(name: 'pt'),
                  FigSuggestion(name: 'pa'),
                  FigSuggestion(name: 'ro'),
                  FigSuggestion(name: 'ru'),
                  FigSuggestion(name: 'sm'),
                  FigSuggestion(name: 'gd'),
                  FigSuggestion(name: 'sr'),
                  FigSuggestion(name: 'sn'),
                  FigSuggestion(name: 'sd'),
                  FigSuggestion(name: 'si'),
                  FigSuggestion(name: 'sk'),
                  FigSuggestion(name: 'sl'),
                  FigSuggestion(name: 'so'),
                  FigSuggestion(name: 'st'),
                  FigSuggestion(name: 'es'),
                  FigSuggestion(name: 'su'),
                  FigSuggestion(name: 'sw'),
                  FigSuggestion(name: 'sv'),
                  FigSuggestion(name: 'tg'),
                  FigSuggestion(name: 'ta'),
                  FigSuggestion(name: 'tt'),
                  FigSuggestion(name: 'te'),
                  FigSuggestion(name: 'th'),
                  FigSuggestion(name: 'tr'),
                  FigSuggestion(name: 'tk'),
                  FigSuggestion(name: 'uk'),
                  FigSuggestion(name: 'ur'),
                  FigSuggestion(name: 'ug'),
                  FigSuggestion(name: 'uz'),
                  FigSuggestion(name: 'vi'),
                  FigSuggestion(name: 'cy'),
                  FigSuggestion(name: 'fy'),
                  FigSuggestion(name: 'xh'),
                  FigSuggestion(name: 'yi'),
                  FigSuggestion(name: 'yo'),
                  FigSuggestion(name: 'zu')
                ])
          ]),
      Option(
          name: ['-u', '--username'],
          description: 'Login with this account ID',
          args: [Arg(name: 'USERNAME')]),
      Option(
          name: ['-p', '--password'],
          description:
              'Account password. If this option is left out, youtube-dl will ask interactively',
          args: [Arg(name: 'PASSWORD')]),
      Option(
          name: ['-2', '--twofactor'],
          description: 'Two-factor authentication code',
          args: [Arg(name: 'TWOFACTOR')]),
      Option(
          name: ['-n', '--netrc'],
          description: 'Use .netrc authentication data'),
      Option(
          name: '--video-password',
          description: 'Video password (vimeo, youku)',
          args: [Arg(name: 'PASSWORD')]),
      Option(
          name: '--ap-mso',
          description:
              'Adobe Pass multiple-system operator (TV provider) identifier',
          args: [
            Arg(
              name: 'MSO',
              // generators: (
              //   custom: async (tokens
              // )
            )
          ]),
      Option(
          name: '--ap-username',
          description: 'Multiple-system operator account login',
          args: [Arg(name: 'USERNAME')]),
      Option(
          name: '--ap-password',
          description:
              'Multiple-system operator account password. If this option is left out, youtube-dl will ask interactively',
          args: [Arg(name: 'PASSWORD')]),
      Option(
          name: '--ap-list-mso',
          description: 'List all supported multiple-system operators'),
      Option(
          name: ['-x', '--extract-audio'],
          description:
              'Convert audio files to audio-only files (requires ffmpeg/avconv and ffprobe/avprobe)'),
      Option(
          name: '--audio-format',
          dependsOn: ['-x'],
          description: 'Specify audio format',
          args: [
            Arg(
                name: 'FORMAT',
                suggestions: [
                  FigSuggestion(name: 'best'),
                  FigSuggestion(name: 'aac'),
                  FigSuggestion(name: 'flac'),
                  FigSuggestion(name: 'mp3'),
                  FigSuggestion(name: 'm4a'),
                  FigSuggestion(name: 'opus'),
                  FigSuggestion(name: 'vorbis'),
                  FigSuggestion(name: 'wav')
                ],
                defaultValue: 'best')
          ]),
      Option(
          name: '--audio-quality',
          description:
              'Specify ffmpeg/avconv audio quality, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K',
          args: [Arg(name: 'QUALITY', defaultValue: '5')]),
      Option(
          name: '--recode-video',
          description: 'Encode the video to another format if necessary',
          args: [
            Arg(name: 'FORMAT', suggestions: [
              FigSuggestion(name: 'mp4'),
              FigSuggestion(name: 'flv'),
              FigSuggestion(name: 'ogg'),
              FigSuggestion(name: 'webm'),
              FigSuggestion(name: 'mkv'),
              FigSuggestion(name: 'avi')
            ])
          ]),
      Option(
          name: '--postprocessor-args',
          description: 'Give these arguments to the postprocessor',
          args: [Arg(name: 'ARGS')]),
      Option(
          name: ['-k', '--keep-video'],
          description:
              'Keep the video file on disk after the post-processing; the video is erased by default'),
      Option(
          name: '--no-post-overwrites',
          description:
              'Do not overwrite post-processed files; the post-processed files are overwritten by default'),
      Option(
          name: '--embed-subs',
          description:
              'Embed subtitles in the video (only for mp4, webm and mkv videos)'),
      Option(
          name: '--embed-thumbnail',
          description: 'Embed thumbnail in the audio as cover art'),
      Option(
          name: '--embed-metadata',
          description: 'Write metadata to the video file'),
      Option(
          name: '--metadata-from-title',
          description:
              'Parse additional metadata like song title / artist from the video title. The format syntax is the same as --output. Regular expressions with named capture groups may also be used. The parsed parameters replace existing values',
          args: [Arg(name: 'FORMAT')]),
      Option(
          name: '--xattrs',
          description:
              'Write metadata to the video file\'s xattrs (using dublin core and xdg standards)'),
      Option(
          name: '--fixup',
          description: 'Automatically correct known faults of the file',
          args: [
            Arg(
                name: 'POLICY',
                suggestions: [
                  FigSuggestion(name: 'never', description: 'Do nothing'),
                  FigSuggestion(
                      name: 'warn', description: 'Only emit a warning'),
                  FigSuggestion(
                      name: 'detect_or_warn',
                      description: 'Fix file if we can, warn otherwise')
                ],
                defaultValue: 'detect_or_warn')
          ]),
      Option(
          name: '--prefer-avconv',
          description:
              'Prefer avconv over ffmpeg for running the postprocessors'),
      Option(
          name: '--prefer-ffmpeg',
          description:
              'Prefer ffmpeg over avconv for running the postprocessors (default)'),
      Option(
          name: '--ffmpeg-location',
          description:
              'Location of the ffmpeg/avconv binary; either the path to the binary or its containing directory',
          args: [
            Arg(name: 'PATH', template: ['folders', 'filepaths'])
          ]),
      Option(
          name: '--exec',
          description:
              'Execute a command on the file after downloading and post-processing, similar to find\'s -exec syntax',
          args: [Arg(name: 'CMD')]),
      Option(
          name: '--convert-subs',
          description: 'Convert the subtitles to other format',
          args: [
            Arg(name: 'FORMAT', suggestions: [
              FigSuggestion(name: 'srt'),
              FigSuggestion(name: 'ass'),
              FigSuggestion(name: 'vtt'),
              FigSuggestion(name: 'lrc')
            ])
          ])
    ]);