ffmpegSpec top-level property

FigSpec ffmpegSpec
final

Completion spec for ffmpeg CLI

Implementation

final FigSpec ffmpegSpec = FigSpec(
    name: 'ffmpeg',
    description: 'Play, record, convert, and stream audio and video',
    parserDirectives: ParserDirectives(flagsArePosixNoncompliant: true),
    args: [
      Arg(name: 'outfile', description: 'Output file', template: 'filepaths')
    ],
    options: [
      Option(
          name: '-i',
          description: 'Input file',
          args: [Arg(name: 'infile', template: 'filepath')]),
      Option(name: '-L', description: 'Show license'),
      Option(name: '-h', description: 'Show help', args: [Arg(name: 'topi')]),
      Option(name: '-?', description: 'Show help', args: [Arg(name: 'topi')]),
      Option(
          name: '-help', description: 'Show help', args: [Arg(name: 'topi')]),
      Option(
          name: '--help', description: 'Show help', args: [Arg(name: 'topi')]),
      Option(name: '-version', description: 'Show version'),
      Option(name: '-buildconf', description: 'Show build configuration'),
      Option(name: '-formats', description: 'Show available formats'),
      Option(name: '-muxers', description: 'Show available muxers'),
      Option(name: '-demuxers', description: 'Show available demuxers'),
      Option(name: '-devices', description: 'Show available devices'),
      Option(name: '-codecs', description: 'Show available codecs'),
      Option(name: '-decoders', description: 'Show available decoders'),
      Option(name: '-encoders', description: 'Show available encoders'),
      Option(name: '-bsfs', description: 'Show available bit stream filters'),
      Option(name: '-protocols', description: 'Show available protocols'),
      Option(name: '-filters', description: 'Show available filters'),
      Option(name: '-pix_fmts', description: 'Show available pixel formats'),
      Option(name: '-layouts', description: 'Show standard channel layouts'),
      Option(
          name: '-sample_fmts',
          description: 'Show available audio sample formats'),
      Option(
          name: '-dispositions',
          description: 'Show available stream dispositions'),
      Option(name: '-colors', description: 'Show available color names'),
      Option(
          name: '-sources',
          description: 'List sources of the input device',
          args: [
            Arg(
                name: 'device',
                generators: Generator(
                    script: ['ffmpeg', '-devices'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(
          name: '-sinks',
          description: 'List sinks of the output device',
          args: [
            Arg(
                name: 'device',
                generators: Generator(
                    script: ['ffmpeg', '-devices'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(
          name: '-hwaccels',
          description: 'Show available HW acceleration methods'),
      Option(
          name: '-loglevel',
          description: 'Set logging level',
          args: [Arg(name: 'logleve')]),
      Option(
          name: '-v',
          description: 'Set logging level',
          args: [Arg(name: 'logleve')]),
      Option(name: '-report', description: 'Generate a report'),
      Option(
          name: '-max_alloc',
          description: 'Set maximum size of a single allocated block',
          args: [Arg(name: 'byte')]),
      Option(name: '-y', description: 'Overwrite output files'),
      Option(name: '-n', description: 'Never overwrite output files'),
      Option(
          name: '-ignore_unknown', description: 'Ignore unknown stream types'),
      Option(
          name: '-filter_threads',
          description: 'Number of non-complex filter threads'),
      Option(
          name: '-filter_complex_threads',
          description: 'Number of threads for -filter_complex'),
      Option(
          name: '-stats', description: 'Print progress report during encoding'),
      Option(
          name: '-max_error_rate',
          description:
              'Ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success',
          args: [Arg(name: 'maximum error rat')]),
      Option(
          name: '-vol',
          description: 'Change audio volume (256=normal)',
          args: [Arg(name: 'volum')]),
      Option(
          name: '-cpuflags',
          description: 'Force specific cpu flags',
          args: [Arg(name: 'flag')]),
      Option(
          name: '-cpucount',
          description: 'Force specific cpu count',
          args: [Arg(name: 'coun')]),
      Option(
          name: '-hide_banner',
          description: 'Do not show program banner',
          args: [Arg(name: 'hide_banne')]),
      Option(name: '-copy_unknown', description: 'Copy unknown stream types'),
      Option(
          name: '-recast_media',
          description:
              'Allow recasting stream type in order to force a decoder of different media type'),
      Option(name: '-benchmark', description: 'Add timings for benchmarking'),
      Option(name: '-benchmark_all', description: 'Add timings for each task'),
      Option(
          name: '-progress',
          description: 'Write program-readable progress information',
          args: [Arg(name: 'ur')]),
      Option(
          name: '-stdin',
          description: 'Enable or disable interaction on standard input'),
      Option(
          name: '-timelimit',
          description: 'Set max runtime in seconds in CPU user time',
          args: [Arg(name: 'limi')]),
      Option(name: '-dump', description: 'Dump each input packet'),
      Option(
          name: '-hex',
          description: 'When dumping packets, also dump the payload'),
      Option(
          name: '-vsync',
          description:
              'Set video sync method globally; deprecated, use -fps_mode'),
      Option(
          name: '-frame_drop_threshold', description: 'Frame drop threshold'),
      Option(name: '-async', description: 'Audio sync method'),
      Option(
          name: '-adrift_threshold',
          description: 'Audio drift threshold',
          args: [Arg(name: 'threshol')]),
      Option(name: '-copyts', description: 'Copy timestamps'),
      Option(
          name: '-start_at_zero',
          description:
              'Shift input timestamps to start at 0 when using copyts'),
      Option(
          name: '-copytb',
          description: 'Copy input stream time base when stream copying',
          args: [Arg(name: 'mod')]),
      Option(
          name: '-dts_delta_threshold',
          description: 'Timestamp discontinuity delta threshold',
          args: [Arg(name: 'threshol')]),
      Option(
          name: '-dts_error_threshold',
          description: 'Timestamp error delta threshold',
          args: [Arg(name: 'threshol')]),
      Option(
          name: '-xerror',
          description: 'Exit on error',
          args: [Arg(name: 'erro')]),
      Option(
          name: '-abort_on',
          description: 'Abort on the specified condition flags',
          args: [Arg(name: 'flag')]),
      Option(
          name: '-filter_complex',
          description: 'Create a complex filtergraph',
          args: [Arg(name: 'graph_descriptio')]),
      Option(
          name: '-lavfi',
          description: 'Create a complex filtergraph',
          args: [Arg(name: 'graph_descriptio')]),
      Option(
          name: '-filter_complex_script',
          description: 'Read complex filtergraph description from a file',
          args: [Arg(name: 'filenam')]),
      Option(
          name: '-auto_conversion_filters',
          description: 'Enable automatic conversion filters globally'),
      Option(
          name: '-stats_period',
          description:
              'Set the period at which ffmpeg updates stats and -progress output',
          args: [Arg(name: 'tim')]),
      Option(name: '-debug_ts', description: 'Print timestamp debugging info'),
      Option(name: '-psnr', description: 'Calculate PSNR of compressed frames'),
      Option(
          name: '-vstats', description: 'Dump video coding statistics to file'),
      Option(
          name: '-vstats_file',
          description: 'Dump video coding statistics to file',
          args: [Arg(name: 'fil')]),
      Option(
          name: '-vstats_version',
          description: 'Version of the vstats format to use'),
      Option(name: '-qphist', description: 'Show QP histogram'),
      Option(
          name: '-sdp_file',
          description: 'Specify a file in which to print sdp information',
          args: [Arg(name: 'fil')]),
      Option(
          name: '-init_hw_device',
          description: 'Initialise hardware device',
          args: [Arg(name: 'arg')]),
      Option(
          name: '-filter_hw_device',
          description: 'Set hardware device used when filtering',
          args: [
            Arg(
                name: 'device',
                generators: Generator(
                    script: ['ffmpeg', '-devices'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(name: '-f', description: 'Force format', args: [Arg(name: 'fm')]),
      Option(name: '-c', description: 'Codec name', args: [
        Arg(
            name: 'codec',
            generators: Generator(
                script: ['ffmpeg', '-codecs'],
                // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                postProcess: null))
      ]),
      Option(name: '-codec', description: 'Codec name', args: [
        Arg(
            name: 'codec',
            generators: Generator(
                script: ['ffmpeg', '-codecs'],
                // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                postProcess: null))
      ]),
      Option(
          name: '-pre', description: 'Preset name', args: [Arg(name: 'prese')]),
      Option(
          name: '-map_metadata',
          description: 'Set metadata information of outfile from infile',
          args: [Arg(name: 'outfile[,metadata]:infile[,metadata')]),
      Option(
          name: '-t',
          description: 'Record or transcode "duration" seconds of audio/video',
          args: [Arg(name: 'duratio')]),
      Option(
          name: '-to',
          description: 'Record or transcode stop time',
          args: [Arg(name: 'time_sto')]),
      Option(
          name: '-fs',
          description: 'Set the limit file size in bytes',
          args: [Arg(name: 'limit_siz')]),
      Option(
          name: '-ss',
          description: 'Set the start time offset',
          args: [Arg(name: 'time_of')]),
      Option(
          name: '-sseof',
          description: 'Set the start time offset relative to EOF',
          args: [Arg(name: 'time_of')]),
      Option(
          name: '-seek_timestamp',
          description: 'Enable/disable seeking by timestamp with -ss'),
      Option(
          name: '-timestamp',
          description:
              'Set the recording timestamp (\'now\' to set the current time)',
          args: [Arg(name: 'tim')]),
      Option(
          name: '-metadata',
          description: 'Add metadata',
          args: [Arg(name: 'string=strin')]),
      Option(
          name: '-program',
          description: 'Add program with specified streams',
          args: [Arg(name: 'title=string:st=number..')]),
      Option(
          name: '-target',
          description:
              'Specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")',
          args: [Arg(name: 'typ')]),
      Option(name: '-apad', description: 'Audio pad'),
      Option(
          name: '-frames',
          description: 'Set the number of frames to output',
          args: [Arg(name: 'numbe')]),
      Option(
          name: '-filter',
          description: 'Set stream filtergraph',
          args: [Arg(name: 'filter_grap')]),
      Option(
          name: '-filter_script',
          description: 'Read stream filtergraph description from a file',
          args: [Arg(name: 'filenam')]),
      Option(
          name: '-reinit_filter',
          description: 'Reinit filtergraph on input parameter changes'),
      Option(name: '-discard', description: 'Discard'),
      Option(name: '-disposition', description: 'Disposition'),
      Option(name: '-map', description: 'Set input stream mapping', args: [
        Arg(
            name:
                '[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]')
      ]),
      Option(
          name: '-map_channel',
          description: 'Map an audio channel from one stream to another',
          args: [Arg(name: 'file.stream.channel[:syncfile.syncstream')]),
      Option(
          name: '-map_chapters',
          description: 'Set chapters mapping',
          args: [Arg(name: 'input_file_inde')]),
      Option(
          name: '-accurate_seek',
          description: 'Enable/disable accurate seeking with -ss'),
      Option(
          name: '-isync',
          description: 'Indicate the input index for sync reference',
          args: [Arg(name: 'sync re')]),
      Option(
          name: '-itsoffset',
          description: 'Set the input ts offset',
          args: [Arg(name: 'time_of')]),
      Option(
          name: '-itsscale',
          description: 'Set the input ts scale',
          args: [Arg(name: 'scal')]),
      Option(
          name: '-dframes',
          description: 'Set the number of data frames to output',
          args: [Arg(name: 'numbe')]),
      Option(
          name: '-re',
          description:
              'Read input at native frame rate; equivalent to -readrate 1'),
      Option(
          name: '-readrate',
          description: 'Read input at specified rate',
          args: [Arg(name: 'spee')]),
      Option(
          name: '-shortest',
          description: 'Finish encoding within shortest input'),
      Option(name: '-bitexact', description: 'Bitexact mode'),
      Option(name: '-copyinkf', description: 'Copy initial non-keyframes'),
      Option(
          name: '-copypriorss',
          description: 'Copy or discard frames before start time'),
      Option(
          name: '-tag',
          description: 'Force codec tag/fourcc',
          args: [Arg(name: 'fourcc/ta')]),
      Option(
          name: '-q',
          description: 'Use fixed quality scale (VBR)',
          args: [Arg(name: '')]),
      Option(
          name: '-qscale',
          description: 'Use fixed quality scale (VBR)',
          args: [Arg(name: '')]),
      Option(
          name: '-profile',
          description: 'Set profile',
          args: [Arg(name: 'profil')]),
      Option(
          name: '-attach',
          description: 'Add an attachment to the output file',
          args: [Arg(name: 'filenam')]),
      Option(
          name: '-dump_attachment',
          description: 'Extract an attachment into a file',
          args: [Arg(name: 'filenam')]),
      Option(
          name: '-stream_loop',
          description: 'Set number of times input stream shall be looped',
          args: [Arg(name: 'loop coun')]),
      Option(
          name: '-thread_queue_size',
          description:
              'Set the maximum number of queued packets from the demuxer'),
      Option(
          name: '-find_stream_info',
          description:
              'Read and decode the streams to fill missing information with heuristics'),
      Option(
          name: '-bits_per_raw_sample',
          description: 'Set the number of bits per raw sample',
          args: [Arg(name: 'numbe')]),
      Option(
          name: '-autorotate',
          description: 'Automatically insert correct rotate filters'),
      Option(
          name: '-autoscale',
          description:
              'Automatically insert a scale filter at the end of the filter graph'),
      Option(
          name: '-muxdelay',
          description: 'Set the maximum demux-decode delay',
          args: [Arg(name: 'second')]),
      Option(
          name: '-muxpreload',
          description: 'Set the initial demux-decode delay',
          args: [Arg(name: 'second')]),
      Option(
          name: '-time_base',
          description:
              'Set the desired time base hint for output stream (1:24, 1:48000 or 0.04166, 2.0833e-5)',
          args: [Arg(name: 'rati')]),
      Option(
          name: '-enc_time_base',
          description:
              'Set the desired time base for the encoder (1:24, 1:48000 or 0.04166, 2.0833e-5). two special values are defined - 0 = use frame rate (video) or sample rate (audio),-1 = match source time base',
          args: [Arg(name: 'rati')]),
      Option(
          name: '-bsf',
          description: 'A comma-separated list of bitstream filters',
          args: [Arg(name: 'bitstream_filter')]),
      Option(
          name: '-fpre',
          description: 'Set options from indicated preset file',
          args: [Arg(name: 'filenam')]),
      Option(
          name: '-max_muxing_queue_size',
          description:
              'Maximum number of packets that can be buffered while waiting for all streams to initialize',
          args: [Arg(name: 'packet')]),
      Option(
          name: '-muxing_queue_data_threshold',
          description:
              'Set the threshold after which max_muxing_queue_size is taken into account',
          args: [Arg(name: 'byte')]),
      Option(
          name: '-dcodec',
          description: 'Force data codec (\'copy\' to copy stream)',
          args: [
            Arg(
                name: 'codec',
                generators: Generator(
                    script: ['ffmpeg', '-codecs'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(
          name: '-vframes',
          description: 'Set the number of video frames to output',
          args: [Arg(name: 'numbe')]),
      Option(
          name: '-r',
          description: 'Set frame rate (Hz value, fraction or abbreviation)',
          args: [Arg(name: 'rat')]),
      Option(
          name: '-fpsmax',
          description:
              'Set max frame rate (Hz value, fraction or abbreviation)',
          args: [Arg(name: 'rat')]),
      Option(
          name: '-s',
          description: 'Set frame size (WxH or abbreviation)',
          args: [Arg(name: 'siz')]),
      Option(
          name: '-aspect',
          description: 'Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)',
          args: [Arg(name: 'aspec')]),
      Option(name: '-vn', description: 'Disable video'),
      Option(
          name: '-vcodec',
          description: 'Force video codec (\'copy\' to copy stream)',
          args: [
            Arg(
                name: 'codec',
                generators: Generator(
                    script: ['ffmpeg', '-codecs'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(
          name: '-timecode',
          description: 'Set initial TimeCode value',
          args: [Arg(name: 'hh:mm:ss[:;.]f')]),
      Option(
          name: '-pass',
          description: 'Select the pass number (1 to 3)',
          args: [Arg(name: '')]),
      Option(
          name: '-vf',
          description: 'Set video filters',
          args: [Arg(name: 'filter_grap')]),
      Option(
          name: '-ab',
          description: 'Audio bitrate (please use -b:a)',
          args: [Arg(name: 'bitrat')]),
      Option(
          name: '-b',
          description: 'Video bitrate (please use -b:v)',
          args: [Arg(name: 'bitrat')]),
      Option(name: '-dn', description: 'Disable data'),
      Option(
          name: '-pix_fmt',
          description: 'Set pixel format',
          args: [Arg(name: 'forma')]),
      Option(
          name: '-rc_override',
          description: 'Rate control override for specific intervals',
          args: [Arg(name: 'overrid')]),
      Option(
          name: '-passlogfile',
          description: 'Select two pass log file name prefix',
          args: [Arg(name: 'prefi')]),
      Option(
          name: '-intra_matrix',
          description: 'Specify intra matrix coeffs',
          args: [Arg(name: 'matri')]),
      Option(
          name: '-inter_matrix',
          description: 'Specify inter matrix coeffs',
          args: [Arg(name: 'matri')]),
      Option(
          name: '-chroma_intra_matrix',
          description: 'Specify intra matrix coeffs',
          args: [Arg(name: 'matri')]),
      Option(name: '-top', description: 'Top=1/bottom=0/auto=-1 field first'),
      Option(
          name: '-vtag',
          description: 'Force video tag/fourcc',
          args: [Arg(name: 'fourcc/ta')]),
      Option(
          name: '-fps_mode',
          description:
              'Set framerate mode for matching video streams; overrides vsync'),
      Option(
          name: '-force_fps',
          description:
              'Force the selected framerate, disable the best supported framerate selection'),
      Option(
          name: '-streamid',
          description: 'Set the value of an outfile streamid',
          args: [Arg(name: 'streamIndex:valu')]),
      Option(
          name: '-force_key_frames',
          description: 'Force key frames at specified timestamps',
          args: [Arg(name: 'timestamp')]),
      Option(
          name: '-hwaccel',
          description: 'Use HW accelerated decoding',
          args: [Arg(name: 'hwaccel nam')]),
      Option(
          name: '-hwaccel_device',
          description: 'Select a device for HW acceleration',
          args: [Arg(name: 'devicenam')]),
      Option(
          name: '-hwaccel_output_format',
          description: 'Select output format used with HW accelerated decoding',
          args: [Arg(name: 'forma')]),
      Option(
          name: '-vbsf',
          description: 'Deprecated',
          args: [Arg(name: 'video bitstream_filter')]),
      Option(
          name: '-vpre',
          description: 'Set the video options to the indicated preset',
          args: [Arg(name: 'prese')]),
      Option(
          name: '-aframes',
          description: 'Set the number of audio frames to output',
          args: [Arg(name: 'numbe')]),
      Option(
          name: '-aq',
          description: 'Set audio quality (codec-specific)',
          args: [Arg(name: 'qualit')]),
      Option(
          name: '-ar',
          description: 'Set audio sampling rate (in Hz)',
          args: [Arg(name: 'rat')]),
      Option(
          name: '-ac',
          description: 'Set number of audio channels',
          args: [Arg(name: 'channel')]),
      Option(name: '-an', description: 'Disable audio'),
      Option(
          name: '-acodec',
          description: 'Force audio codec (\'copy\' to copy stream)',
          args: [
            Arg(
                name: 'codec',
                generators: Generator(
                    script: ['ffmpeg', '-codecs'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(
          name: '-af',
          description: 'Set audio filters',
          args: [Arg(name: 'filter_grap')]),
      Option(
          name: '-atag',
          description: 'Force audio tag/fourcc',
          args: [Arg(name: 'fourcc/ta')]),
      Option(
          name: '-sample_fmt',
          description: 'Set sample format',
          args: [Arg(name: 'forma')]),
      Option(
          name: '-channel_layout',
          description: 'Set channel layout',
          args: [Arg(name: 'layou')]),
      Option(
          name: '-ch_layout',
          description: 'Set channel layout',
          args: [Arg(name: 'layou')]),
      Option(
          name: '-guess_layout_max',
          description:
              'Set the maximum number of channels to try to guess the channel layout'),
      Option(
          name: '-absf',
          description: 'Deprecated',
          args: [Arg(name: 'audio bitstream_filter')]),
      Option(
          name: '-apre',
          description: 'Set the audio options to the indicated preset',
          args: [Arg(name: 'prese')]),
      Option(name: '-sn', description: 'Disable subtitle'),
      Option(
          name: '-scodec',
          description: 'Force subtitle codec (\'copy\' to copy stream)',
          args: [
            Arg(
                name: 'codec',
                generators: Generator(
                    script: ['ffmpeg', '-codecs'],
                    // TS_UNCONVERTED_START (postProcess)
// (out) => {
//             return out
//               .split("\n")
//               .filter(Boolean)
//               .map((k) => k.split(" ").filter(Boolean)[1])
//               .filter(Boolean)
//               .filter((k) => k !== "=")
//               .map((k) => ({
//                 name: k,
//               }));
// TS_UNCONVERTED_END
                    postProcess: null))
          ]),
      Option(
          name: '-stag',
          description: 'Force subtitle tag/fourcc',
          args: [Arg(name: 'fourcc/ta')]),
      Option(name: '-fix_sub_duration', description: 'Fix subtitles duration'),
      Option(
          name: '-canvas_size',
          description: 'Set canvas size (WxH or abbreviation)',
          args: [Arg(name: 'siz')]),
      Option(
          name: '-spre',
          description: 'Set the subtitle options to the indicated preset',
          args: [Arg(name: 'prese')])
    ]);