gpac(1)

NAME

gpac - GPAC command-line filter session manager

SYNOPSIS

gpac [options]FILTER[LINK]FILTER[...]
gpac is GPAC's command line tool for setting up and running filter chains.
FILTER: a single filter declaration (eg, -i file, -o dump, inspect, ...), see gpac -h doc.
[LINK]: a link instruction (eg, @, @2, @2#StreamType=Visual, ...), see gpac -h doc.
[options]: one or more option strings, each starting with a - character.
  - an option using a single - indicates an option of gpac (see gpac -hx) or of libgpac (see gpac -hx core)
  - an option using -- indicates a global filter option, for example --block_size=1000 (see gpac -h doc)
  - an option using -+ indicates a global meta-filter filter (eg FFMPEG) option, for example -+profile=Baseline (see gpac -h doc)

Filter declaration order may impact the link resolver which will try linking in declaration order. Most of the time for simple graphs, this has no impact. However, for complex graphs with no link declarations, this can lead to different results.
Options do not require any specific order, and may be present anywhere, including between link statements or filter declarations.
Boolean values do not need any value specified. Other types shall be formatted as opt=val, except .I -i, -src, .I -o, -dst and .I -h options.
The possible options for gpac are:

-mem-track
    enable memory tracker

-mem-track-stack
    enable memory tracker with stack dumping

-ltf
    load test-unit filters (used for for unit tests only)

-sloop (int)
    loop execution of session, creating a session at each loop, mainly used for testing. If no value is given, loops forever

-runfor (int)
    run for the given amount of milliseconds

-runforx (int)
    run for the given amount of milliseconds and exit with no cleanup

-stats
    print stats after execution

-graph
    print graph after execution

-k
    enable keyboard interaction from command line

-r (string)
    enable reporting
    * r: runtime reporting
    * r=FA[,FB]: runtime reporting but only print given filters, eg r=mp4mxfor ISOBMFF muxer only
    * r=: only print final report

-seps (string, default: :=#,!@)
    set the default character sets used to separate various arguments
    - the first char is used to separate argument names
    - the second char, if present, is used to separate names and values
    - the third char, if present, is used to separate fragments for PID sources
    - the fourth char, if present, is used for list separators (sourceIDs, gfreg, ...)
    - the fifth char, if present, is used for boolean negation
    - the sixth char, if present, is used for LINK directives (see filters help (-h doc))

-i,-src (string)
    specify an input file - see filters help (-h doc)

-o,-dst (string)
    specify an output file - see filters help (-h doc)

-ib (string)
    specify an input file to wrap as GF_FileIO object (testing of GF_FileIO)

-ob (string)
    specify an output file to wrap as GF_FileIO object (testing of GF_FileIO)

-h,-help,-ha,-hx,-hh (string)
    print help. Use -help or -h for basic options, -ha for advanced options, -hx for expert options and -hh for all.
    Note: The @ character can be used in place of the * character. String parameter can be:
    * empty: print command line options help
    * doc: print the general filter info
    * alias: print the gpac alias syntax
    * log: print the log system help
    * core: print the supported libgpac core options. Use -ha/-hx/-hh for advanced/expert options
    * cfg: print the GPAC configuration help
    * prompt: print the GPAC prompt help when running in interactive mode (see .I -k )
    * modules: print available modules
    * filters: print name of all available filters
    * filters:*: print name of all available filters, including meta filters
    * codecs: print the supported builtin codecs
    * props: print the supported builtin PID and packet properties
    * colors: print the builtin color names and their values
    * links: print possible connections between each supported filters
    * links FNAME: print sources and sinks for filter FNAME (either builtin or JS filter)
    * FNAME: print filter FNAME info (multiple FNAME can be given)
      - For meta-filters, use FNAME:INST, eg ffavin:avfoundation
      - Use * to print info on all filters (big output!), *:* to print info on all filters including meta filter instances (really big output!)
      - By default only basic filter options and description are shown. Use -ha to show advanced options capabilities, -hx for expert options, -hh for all options and filter capabilities including on filters disabled in this build
    * FNAME.OPT: print option OPT in filter FNAME
    * OPT: look in filter names and options for OPT and suggest possible matches if none found. Use -hx to look for keyword in all option descriptions

-p (string)
    use indicated profile for the global GPAC config. If not found, config file is created. If a file path is indicated, this will load profile from that file. Otherwise, this will create a directory of the specified name and store new config there. Reserved name 0 means a new profile, not stored to disk. Appending :reload to the profile name will force recreating a new configuration file

-alias (string)
    assign a new alias or remove an alias. Can be specified several times. See alias usage (-h alias)

-aliasdoc (string)
    assign documentation for a given alias (optional). Can be specified several times

-uncache
    revert all items in GPAC cache directory to their original name and server path

-js (string)
    specify javascript file to use as controller of filter session

-wc
    write all core options in the config file unless already set

-we
    write all file extensions in the config file unless already set (useful to change some default file extensions)

-wf
    write all filter options in the config file unless already set

-wfx
    write all filter options and all meta filter arguments in the config file unless already set (large config file !)

-xopt
    do not throw error on any unrecognized options following this option - used to pass arguments to GUI

    The following libgpac core options allow customizing the filter session:

-dbg-edges
    log edges status in filter graph before dijkstra resolution (for debug). Edges are logged as edge_source(status, weight, src_cap_idx, dst_cap_idx)

-full-link
    throw error if any pid in the filter graph cannot be linked

-no-block (Enum, default: no)
    disable blocking mode of filters
    * no: enable blocking mode
    * fanout: disable blocking on fanout, unblocking the PID as soon as one of its destinations requires a packet
    * all: disable blocking

-no-reg
    disable regulation (no sleep) in session

-no-reassign
    disable source filter reassignment in pid graph resolution

-sched (Enum, default: free)
    set scheduler mode
    * free: lock-free queues except for task list (default)
    * lock: mutexes for queues when several threads
    * freex: lock-free queues including for task lists (experimental)
    * flock: mutexes for queues even when no thread (debug mode)
    * direct: no threads and direct dispatch of tasks whenever possible (debug mode)

-max-chain (int, default: 6)
    set maximum chain length when resolving filter links. Default value covers for [ in -> ] demux -> reframe -> decode -> encode -> reframe -> mux [ -> out]. Filter chains loaded for adaptation (eg pixel format change) are loaded after the link resolution. Setting the value to 0 disables dynamic link resolution. You will have to specify the entire chain manually

-max-sleep (int, default: 50)
    set maximum sleep time slot in milliseconds when regulation is enabled

-threads (int)
    set N extra thread for the session. -1 means use all available cores

-no-probe
    disable data probing on sources and relies on extension (faster load but more error-prone)

-no-argchk
    disable tracking of argument usage (all arguments will be considered as used)

-blacklist (string)
    blacklist the filters listed in the given string (comma-separated list)

-no-graph-cache
    disable internal caching of filter graph connections. If disabled, the graph will be recomputed at each link resolution (lower memory usage but slower)

-no-reservoir
    disable memory recycling for packets and properties. This uses much less memory but stresses the system memory allocator much more

Using Aliases
The gpac command line can become quite complex when many sources or filters are used. In order to simplify this, an alias system is provided.
To assign an alias, use the syntax gpac -alias="NAME VALUE".
* `NAME`: shall be a single string, with no space.
* `VALUE`: the list of argument this alias replaces. If not set, the alias is destroyed
When parsing arguments, the alias will be replace by its value.
Example
gpac -alias="output aout vout"
This allows later audio and video playback using gpac -i src.mp4 output
Aliases can use arguments from the command line. The allowed syntaxes are:
* `@{a}`: replaced by the value of the argument with index a after the alias
* `@{a,b}`: replaced by the value of the arguments with index a and b
* `@{a:b}`: replaced by the value of the arguments between index a and b
* `@{-a,b}`: replaced by the value of the arguments with index a and b, inserting a list separator (comma by default) between them
* `@{-a:b}`: replaced by the value of the arguments between index a and b, inserting a list separator (comma by default) between them
* `@{+a,b}`: clones the parent word in the alias for a and b, replacing this pattern in each clone by the corresponding argument
* `@{+a:b}`: clones the parent word in the alias for each argument between index a and b, replacing this pattern in each clone by the corresponding argument
The specified index can be:
* forward index: a strictly positive integer, 1 being the first argument after the alias
* backward index: the value 'n' (or 'N') to indicate the last argument on the command line. This can be followed by -x to rewind arguments (eg @{n-1} is the before last argument)
Arguments not used by any aliases are kept on the command line, other ones are removed
Example
-alias="foo src=@{N} dst=test.mp4"
The command gpac foo f1 f2 expands to gpac src=f2 dst=test.mp4 f1
Example
-alias="list: inspect src=@{+:N}"
The command gpac list f1 f2 f3 expands to gpac inspect src=f1 src=f2 src=f3
Example
-alias="list inspect src=@{+2:N}"
The command gpac list f1 f2 f3 expands to gpac inspect src=f2 src=f3 f1
Example
-alias="plist aout vout flist:srcs=@{-,N}"
The command gpac plist f1 f2 f3 expands to gpac aout vout plist:srcs="f1,f2,f3"
Alias documentation can be set using gpac -aliasdoc="NAME VALUE", with NAME the alias name and VALUE the documentation.
Alias documentation will then appear in gpac help.

Configuration file

GPAC uses a configuration file to modify default options of libgpac and filters. This configuration file is located in $HOME/.gpac/GPAC.cfg.
Applications in GPAC can also specify a different configuration file through the .I -p option to indicate a profile. This allows different configurations for different usages and simplifies command line typing.
Example
gpac -p=foo []
This will load configuration from $HOME/.gpac/foo/GPAC.cfg, creating it if needed.
The reserved name 0 is used to disable configuration file writing.
By default the configuration file only holds a few system specific options and directories. It is possible to serialize the entire set of options to the configuration file, using .I -wc .I -wf. This should be avoided as the resulting configuration file size will be quite large, hence larger memory usage for the applications.
The options specified in the configuration file may be overridden by the values in restrict.cfg file located in GPAC share system directory (e.g. /usr/share/gpac), if present; this allows enforcing system-wide configuration values.
Note: The methods describe in this section apply to any application in GPAC transferring their arguments to libgpac. This is the case for gpac, MP4Box, MP4Client/Osmo4.

Core options

The options from libgpac core can also be assigned though the config file from section core using option name without initial dash as key name.
Example
[core]threads=2
Setting this in the config file is equivalent to using -threads=2.
The options specified at prompt overrides the value of the config file.

Filter options in configuration

It is possible to alter the default value of a filter option by modifing the configuration file. Filter foo options are stored in section [filter@foo], using option name and value as key-value pair. Options specified through the configuration file do not take precedence over options specified at prompt or through alias.
Example
[filter@rtpin]interleave=yes
This will force the rtp input filter to always request RTP over RTSP by default.
To generate a configuration file with all filters options serialized, use .I -wf.

Global filter options

It is possible to specify options global to multiple filters using --OPTNAME=VAL. Global options do not override filter options but take precedence over options loaded from configuration file.
This will set option OPTNAME, when present, to VAL in any loaded filter.
Example
--buffer=100 -i file vout aout
This is equivalent to specifying vout:buffer=100 aout:buffer=100.
Example
--buffer=100 -i file vout aout:buffer=10
This is equivalent to specifying vout:buffer=100 aout:buffer=10.
Warning: This syntax only applies to regular filter options. It cannot be used with builtin shortcuts (gfreg, enc, ...).
Meta-filter options can be set in the same way using the syntax -+OPT_NAME=VAL.
Example
-+profile=Baseline -i file.cmp -o dump.264
This is equivalent to specifying -o dump.264:profile=Baseline.

For both syntax, it is possible to specify the filter registry name of the option, using --FNAME@OPTNAME=VAL.
In this case the option will only be set for filters which are instances of registry FNAME. This is used when several registries use same option names.
Example
--flist@timescale=100 -i plist1 -i plist2 -o live.mpd
This will set the timescale option on the playlists filters but not on the dasher filter.

libgpac core options:

-noprog
    disable progress messages

-quiet
    disable all messages, including errors

-strict-error,-se
    exit after the first error is reported

-store-dir (string)
    set storage directory

-mod-dirs (string list)
    set module directories

-js-dirs (string list)
    set javascript directories

-no-js-mods (string list)
    disable javascript module loading

-ifce (string)
    set default multicast interface through interface IP address

-lang (string)
    set preferred language

-cfg,-opt (string)
    set configuration file value. The string parameter can be formatted as:
    * `section:key=val`: set the key to a new value
    * `section:key=null`, `section:key`: remove the key
    * `section:*=null`: remove the section

-no-save
    discard any changes made to the config file upon exit

-mod-reload
    unload / reload module shared libs when no longer used

-for-test
    disable all creation/modif dates and GPAC versions in files

-old-arch
    enable compatibility with pre-filters versions of GPAC

-ntp-shift (int)
    shift NTP clock by given amount in seconds

-bs-cache-size (int, default: 512)
    cache size for bitstream read and write from file (0 disable cache, slower IOs)

-cache (string)
    cache directory location

-proxy-on
    enable HTTP proxy

-proxy-name (string)
    set HTTP proxy address

-proxy-port (int, default: 80)
    set HTTP proxy port

-maxrate (int)
    set max HTTP download rate in bits per sec. 0 means unlimited

-no-cache
    disable HTTP caching

-offline-cache
    enable offline HTTP caching (no revalidation of existing resource in cache)

-clean-cache
    indicate if HTTP cache should be clean upon launch/exit

-cache-size (int, default: 100M)
    specify cache size in bytes

-head-timeout (int, default: 5000)
    set HTTP head request timeout in milliseconds

-req-timeout (int, default: 20000)
    set HTTP/RTSP request timeout in milliseconds

-broken-cert
    enable accepting broken SSL certificates

-user-agent,-ua (string)
    set user agent name for HTTP/RTSP

-user-profileid (string)
    set user profile ID (through X-UserProfileID entity header) in HTTP requests

-user-profile (string)
    set user profile filename. Content of file is appended as body to HTTP HEAD/GET requests, associated Mime is text/xml

-query-string (string)
    insert query string (without ?) to URL on requests

-dm-threads
    force using threads for async download requests rather than session scheduler

-dbg-edges
    log edges status in filter graph before dijkstra resolution (for debug). Edges are logged as edge_source(status, weight, src_cap_idx, dst_cap_idx)

-full-link
    throw error if any pid in the filter graph cannot be linked

-no-block (Enum, default: no)
    disable blocking mode of filters
    * no: enable blocking mode
    * fanout: disable blocking on fanout, unblocking the PID as soon as one of its destinations requires a packet
    * all: disable blocking

-no-reg
    disable regulation (no sleep) in session

-no-reassign
    disable source filter reassignment in pid graph resolution

-sched (Enum, default: free)
    set scheduler mode
    * free: lock-free queues except for task list (default)
    * lock: mutexes for queues when several threads
    * freex: lock-free queues including for task lists (experimental)
    * flock: mutexes for queues even when no thread (debug mode)
    * direct: no threads and direct dispatch of tasks whenever possible (debug mode)

-max-chain (int, default: 6)
    set maximum chain length when resolving filter links. Default value covers for [ in -> ] demux -> reframe -> decode -> encode -> reframe -> mux [ -> out]. Filter chains loaded for adaptation (eg pixel format change) are loaded after the link resolution. Setting the value to 0 disables dynamic link resolution. You will have to specify the entire chain manually

-max-sleep (int, default: 50)
    set maximum sleep time slot in milliseconds when regulation is enabled

-threads (int)
    set N extra thread for the session. -1 means use all available cores

-no-probe
    disable data probing on sources and relies on extension (faster load but more error-prone)

-no-argchk
    disable tracking of argument usage (all arguments will be considered as used)

-blacklist (string)
    blacklist the filters listed in the given string (comma-separated list)

-no-graph-cache
    disable internal caching of filter graph connections. If disabled, the graph will be recomputed at each link resolution (lower memory usage but slower)

-no-reservoir
    disable memory recycling for packets and properties. This uses much less memory but stresses the system memory allocator much more

-switch-vres
    select smallest video resolution larger than scene size, otherwise use current video resolution

-hwvmem (Enum, default: auto)
    specify (2D rendering only) memory type of main video backbuffer. Depending on the scene type, this may drastically change the playback speed
    * always: always on hardware
    * never: always on system memory
    * auto: selected by GPAC based on content type (graphics or video)

-pref-yuv4cc (string)
    set prefered YUV 4CC for overlays (used by DirectX only)

-offscreen-yuv
    indicate if offscreen yuv->rgb is enabled. can be set to false to force disabling

-overlay-color-key (string)
    color to use for overlay keying, hex format

-gl-bits-comp (int, default: 8)
    number of bits per color component in openGL

-gl-bits-depth (int, default: 16)
    number of bits for depth buffer in openGL

-gl-doublebuf
    enable openGL double buffering

-sdl-defer
    use defer rendering for SDL

-no-colorkey
    disable color keying at the video output level

-glfbo-txid (int)
    set output texture ID when using glfbo output. The OpenGL context shall be initialized and gf_term_process shall be called with the OpenGL context active

-video-output (string)
    indicate the name of the video output module to use (see gpac -h modules). The reserved name glfbo is used in player mode to draw in the openGL texture identified by .I glfbo-txid. In this mode, the application is responsible for sending event to the terminal

-audio-output (string)
    indicate the name of the audio output module to use

-alsa-devname (string)
    set ALSA dev name

-force-alsarate (int)
    force ALSA and OSS output sample rate

-ds-disable-notif
    disable DirectSound audio buffer notifications when supported

-font-reader (string)
    indicate name of font reader module

-font-dirs (string)
    indicate comma-separated list of directories to scan for fonts

-rescan-fonts
    indicate the font directory must be rescanned

-wait-fonts
    wait for SVG fonts to be loaded before displaying frames

-rmt
    enable profiling through Remotery. A copy of Remotery visualizer is in gpac/share/vis, usually installed in /usr/share/gpac/vis or Program Files/GPAC/vis

-rmt-port (int, default: 17815)
    set remotery port

-rmt-reuse
    allow remotery to reuse port

-rmt-localhost
    make remotery only accepts localhost connection

-rmt-sleep (int, default: 10)
    set remotery sleep (ms) between server updates

-rmt-nmsg (int, default: 10)
    set remotery number of messages per update

-rmt-qsize (int, default: 131072)
    set remotery message queue size in bytes

-rmt-log
    redirect logs to remotery (experimental, usually not well handled by browser)

-rmt-ogl
    make remotery sample opengl calls

libgpac logs options:

-noprog
    disable progress messages

-quiet
    disable all messages, including errors

-log-file,-lf (string)
    set output log file

-log-clock,-lc
    log time in micro sec since start time of GPAC before each log line

-log-utc,-lu
    log UTC time in ms before each log line

-logs (string)
    set log tools and levels.

    You can independently log different tools involved in a session.
    log_args is formatted as a ':'-separated list of toolX[:toolZ]@levelX
    levelX can be one of:
    * quiet: skip logs
    * error: logs only error messages
    * warning: logs error+warning messages
    * info: logs error+warning+info messages
    * debug: logs all messages
    toolX can be one of:
    * core: libgpac core
    * coding: bitstream formats (audio, video, scene)
    * container: container formats (ISO File, MPEG-2 TS, AVI, ...)
    * network: network data except RTP trafic
    * http: HTTP trafic
    * rtp: RTP trafic
    * author: authoring tools (hint, import, export)
    * sync: terminal sync layer
    * codec: terminal codec messages
    * parser: scene parsers (svg, xmt, bt) and other
    * media: terminal media object management
    * scene: scene graph and scene manager
    * script: scripting engine messages
    * interact: interaction engine (events, scripts, etc)
    * smil: SMIL timing engine
    * compose: composition engine (2D, 3D, etc)
    * mmio: Audio/Video HW I/O management
    * rti: various run-time stats
    * cache: HTTP cache subsystem
    * audio: Audio renderer and mixers
    * mem: GPAC memory tracker
    * dash: HTTP streaming logs
    * module: GPAC modules (av out, font engine, 2D rasterizer)
    * filter: filters debugging
    * sched: filter session scheduler debugging
    * mutex: log all mutex calls
    * atsc: ATSC3 debugging
    * all: all tools logged - other tools can be specified afterwards.
    The special keyword ncl can be set to disable color logs.
    The special keyword strict can be set to exit at first error.
    Example
    -logs all@info:dash@debug:ncl
    This moves all log to info level, dash to debug level and disable color logs

General

Filters are configurable processing units consuming and producing data packets. These packets are carried between filters through a data channel called pid. A PID is in charge of allocating/tracking data packets, and passing the packets to the destination filter(s). A filter output PID may be connected to zero or more filters. This fan-out is handled internally by GPAC (no such thing as a tee filter in GPAC).
Note: When a PID cannot be connected to any filter, a warning is thrown and all packets dispatched on this PID will be destroyed. The session may however still run, unless .I -full-link is set.

Each output PID carries a set of properties describing the data it delivers (eg width, height, codec, ...). Properties can be built-in (identified by a 4 character code abcd, see properties (-h props) ), or user-defined (identified by a string). Each PID tracks its properties changes and triggers filter reconfiguration during packet processing. This allows the filter chain to be reconfigured at run time, potentially reloading part of the chain (eg unload a video decoder when switching from compressed to uncompressed sources).

Each filter exposes one or more sets of capabilities, called capability bundle, which are property type and values that must be matched or excluded by connecting PIDs.

Each filter exposes a set of argument to configure itself, using property types and values described as strings formated with separators. This help is given with default separator sets :=#,@ to specify filters, properties and options. Use .I -seps to change them.

Property format

* boolean: formatted as yes|true|1 or no|false|0
* enumeration (for filter arguments only): must use the syntax given in the argument description, otherwise value 0 (first in enum) is assumed.
* 1-dimension (numbers, floats, ints...): formatted as value[unit], where unit can be k|K (x1000) or m|M (x1000000) or g|G (x1000000000). For such properties, value +I means maximum possible value, -I minimum possible value.
* fraction: formatted as num/den or num-den or num, in which case the denominator is 1 if num is an integer, or 1000000 if num is a floating-point value.
* unsigned 32 bit integer: formated as number or hexadecimal using the format 0xAABBCCDD.
* N-dimension (vectors): formatted as DIM1xDIM2[xDIM3[xDIM4]] values, without unit multiplier.
* string: formatted as:
 * `value`: copies value to string.
 * `file@FILE`: load string from local FILE (opened in binary mode).
 * `bxml@FILE`: binarize XML from local FILE and set property type to data - see https://wiki.gpac.io/NHML-Format.
* data: formatted as:
 * `size@address`: constant data block, not internally copied; size gives the size of the block, address the data pointer.
 * `0xBYTESTRING`: data block specified in hexadecimal, internally copied.
 * `file@FILE`: load data from local FILE (opened in binary mode).
 * `bxml@FILE`: binarize XML from local FILE - see https://wiki.gpac.io/NHML-Format.
* pointer: are formatted as address giving the pointer address (32 or 64 bit depending on platforms).
* string lists: formatted as val1,val2[,...]. Each value can also use file@FILE syntax.
* integer lists: formatted as val1,val2[,...]
Note: The special characters in property formats (0x,/,-,+I,-I,x) cannot be configured.

Filter declaration [FILTER]

Generic declaration
Each filter is declared by its name, with optional filter arguments appended as a list of colon-separated name=value pairs. Additional syntax is provided for:
* boolean: value can be omitted, defaulting to true (eg :noedit). Using ! before the name negates the result (eg :!moof_first)
* enumerations: name can be omitted (eg :disp=pbo is equivalent to :pbo), provided that filter developers pay attention to not reuse enumeration names in the same filter.

When string parameters are used (eg URLs), it is recommended to escape the string using the keyword gpac.
Example
filter:ARG=http://foo/bar?yes:gpac:opt=VAL
This will properly extract the URL.
Example
filter:ARG=http://foo/bar?yes:opt=VAL
This will fail to extract it and keep :opt=VAL as part of the URL.
The escape mechanism is not needed for local source, for which file existence is probed during argument parsing. It is also not needed for builtin procotol handlers (avin://, video://, audio://, pipe://)
For tcp:// and udp:// protocols, the escape is not needed if a trailing / is appended after the port number.
Example
-i tcp://127.0.0.1:1234:OPT
This will fail to extract the URL and options.
Example
-i tcp://127.0.0.1:1234/:OPT
This will extract the URL and options.
Note: one trick to avoid the escape sequence is to declare the URLs option at the end, eg f1:opt1=foo:url=http://bar, provided you have only one URL parameter to specify on the filter.
It is possible to disable option parsing (for string options) by duplicating the seperator.
Example
filter::opt1=UDP://IP:PORT/:someopt=VAL::opt2=VAL2
This will pass UDP://IP:PORT/:someopt=VAL to opt1 without inspecting it, and VAL2 to opt2.

A filter may be assigned a name (for inspection purposes) using :N=name option. This name is not used in link resolution and may be changed at runtime by the filter instance.

Source and Sink filters
Source and sink filters do not need to be addressed by the filter name, specifying src= or dst= instead is enough. You can also use the syntax -src URL or -i URL for sources and -dst URL or -o URL for destination, this allows prompt completion in shells.
Example
"src=file.mp4" or "-src file.mp4" or "-i file.mp4"
This will find a filter (for example fin) able to load file.mp4. The same result can be achieved by using fin:src=file.mp4.
Example
"dst=dump.yuv" or "-dst dump.yuv" or "-o dump.yuv"
This will dump the video content in dump.yuv. The same result can be achieved by using fout:dst=dump.yuv.
Specific source or sink filters may also be specified using filterName:src=URL or filterName:dst=URL.
The src= and dst= syntaxes can also be used in alias for dynamic argument cloning (see gpac -hx alias).

Forcing specific filters
There is a special option called gfreg which allows specifying preferred filters to use when handling URLs.
Example
src=file.mp4:gfreg=ffdmx,ffdec
This will use ffdmx to read file.mp4 and ffdec to decode it.
This can be used to test a specific filter when alternate filter chains are possible.

Specifying encoders and decoders
By default filters chain will be resolved without any decoding/encoding if the destination accepts the desired format. Otherwise, decoders/encoders will be dynamically loaded to perform the conversion, unless dynamic resolution is disabled. There is a special shorcut filter name for encoders enc allowing to match a filter providing the desired encoding. The parameters for enc are:
* c=NAME: identifes the desired codec. NAME can be the gpac codec name or the encoder instance for ffmpeg/others
* b=UINT, rate=UINT, bitrate=UINT: indicates the bitrate in bits per second
* g=UINT, gop=UINT: indicates the GOP size in frames
* pfmt=NAME: indicates the target pixel format name (see properties (-h props) ) of the source, if supported by codec
* all_intra=BOOL: indicates all frames should be intra frames, if supported by codec

Other options will be passed to the filter if it accepts generic argument parsing (as is the case for ffmpeg).
Example
src=dump.yuv:size=320x240:fps=25 enc:c=avc:b=150000:g=50:cgop=true:fast=true dst=raw.264
This creates a 25 fps AVC at 175kbps with a gop duration of 2 seconds, using closed gop and fast encoding settings for ffmpeg.
The inverse operation (forcing a decode to happen) is possible using the reframer filter.
Example
src=file.mp4 reframer:raw @ -o null
This will force decoding media from file.mp4 and trash (send to null) the result (doing a decoder benchmark for example).
When a filter uses an option defined as a string using the same separator character as gpac, you can either modify the set of separators, or escape the seperator by duplicating it. The options enclosed by duplicated separator are not parsed. This is mostly used for meta filters, such as ffmpeg, to pass options to subfilters such as libx264 (cf x264opts parameter).
Example
f:a=foo:b=bar
This will set option a to foo and option b to bar on the filter.
Example
f::a=foo:b=bar
This will set option a to foo:b=bar on the filter.
Example
f:a=foo::b=bar:c::d=fun
This will set option a to foo, b to bar:c and the option d to fun on the filter.

Expliciting links between filters [LINK]

Quick links
Link between filters may be manually specified. The syntax is an @ character optionaly followed by an integer (0 if omitted). This indicates which filter previously specified at prompt should be link to the next filter listed. The optional integer is a 0-based index to the previous filter declarations, 0 indicating the previous filter declaration, 1 the one before the previous delaration, ...).
Only the last link directive occuring before a filter is used to setup links for that filter.
Example
fA fB @1 fC
This indicates to direct fA outputs to fC.
Example
fA fB @1 @0 fC
This indicates to direct fB outputs to fC, @1 is ignored.
If no link directives are given, the links will be dynamically solved to fullfill as many connections as possible (see below).
Warning: This means that fA fB fC and fA fB @ fC will likely not give the same result.

Complex links
The link directive is just a quick shortcut to set the following arguments:
- FID=name, which assigns an identifier to the filter
- SID=name1[,name2...], which set a list of filter identifiers , or sourceIDs, restricting the list of possible inputs for a filter.
Example
fA fB @1 fC
This is equivalent to fA:FID=1 fB fC:SID=1.
Link directives specify which source a filter can accept connections from. They do not specifiy which destination a filter can connect to.
Example
fA:FID=1 fB fC:SID=1
This indicates that fC only accpets input from fA, but fB might accept inputs from fA.
Example
fA:FID=1 fB:FID=2 fC:SID=1 fD:SID=1,2
This indicates that fD only accepts input from fA and fB and fC only from fA
Note: A filter with sourceID set cannot get input from filters with no IDs.
A sourceID name can be further extended using fragment identifier (# by default):
* name#PIDNAME: accepts only PID(s) with name PIDNAME
* name#TYPE: accepts only PIDs of matching media type. TYPE can be audio, video, scene, text, font, meta
* name#TYPEN: accepts only Nth PID of matching type from source
* name#P4CC=VAL: accepts only PIDs with property matching VAL.
* name#PName=VAL: same as above, using the builtin name corresponding to the property.
* name#AnyName=VAL: same as above, using the name of a non built-in property.
* name#Name=OtherPropName: compares the value with the value of another property of the PID. The matching will fail if the value to compare to is not present or different from the value to check. The property to compare with shall be a built-in property.
If the property is not defined on the PID, the property is matched. Otherwise, its value is checked against the given value.
The following modifiers for comparisons are allowed (for both P4CC=, PName= and AnyName=):
* name#P4CC=!VAL: accepts only PIDs with property NOT matching VAL.
* name#P4CC-VAL: accepts only PIDs with property strictly less than VAL (only for 1-dimension number properties).
* name#P4CC+VAL: accepts only PIDs with property strictly greater than VAL (only for 1-dimension number properties).
A sourceID name can also use wildcard or be empty to match a property regardless of the source filter.
Example
fA fB:SID=*#ServiceID=2
Example
fA fB:SID=#ServiceID=2
This indicates to match connection between fA and fB only for PIDs with a ServiceID property of 2.
These extensions also work with the LINK @ shortcut.
Example
fA fB @1#video fC
This indicates to direct fA video outputs to fC.
Example
src=img.heif @#ItemID=200 vout
This indicates to connect to vout only PIDs with ItemID property equal to 200.
Example
src=vid.mp4 @#PID=1 vout
This indicates to connect to vout only PIDs with ID property equal to 1.
Example
src=vid.mp4 @#Width=640 vout
This indicates to connect to vout only PIDs with Width property equal to 640.
Example
src=vid.mp4 @#Width-640 vout
This indicates to connect to vout only PIDs with Width property less than 640
Example
src=vid.mp4 @#ID=ItemID#ItemNumber=1 vout
This will connect to vout only PID with an ID property equal to ItemID property (keep items, discard tracks) and an Item number of 1 (first item).
Multiple fragment can be specified to check for multiple PID properties.
Example
src=vid.mp4 @#Width=640#Height+380 vout
This indicates to connect to vout only PIDs with Width property equal to 640 and Height greater than 380.
Warning: If a filter PID gets connected to a loaded filter, no further dynamic link resolution will be done to connect it to other filters, unless sourceIDs are set. Link directives should be carfully setup.
Example
src=file.mp4 @ reframer dst=dump.mp4
This will link src file.mp4 PID (type file) to dst dump.mp4filter (type file) because dst has no sourceID and therefore will accept input from src. Since the PID is connected, the filter engine will not try to solve a link between src and reframer. The result is a direct copy of the source file, reframer being unused.
Example
src=file.mp4 reframer @ dst=dump.mp4
This will force dst to accept only from reframer, a muxer will be loaded to solve this link, and src PID will be linked to reframer (no source ID), loading a demuxer to solve the link. The result is a complete remux of the source file.

Arguments inheriting

Unless explicitly disabled (see .I -max-chain), the filter engine will resolve implicit or explicit (LINK) connections between filters and will allocate any filter chain required to connect the filters. In doing so, it loads new filters with arguments inherited from both the source and the destination.
Example
src=file.mp4:OPT dst=file.aac dst=file.264
This will pass the :OPT to all filters loaded between the source and the two destinations.
Example
src=file.mp4 dst=file.aac:OPT dst=file.264
This will pass the :OPT to all filters loaded between the source and the file.aac destination.
Note: the destination arguments inherited are the arguments placed AFTER the dst= option.
Example
src=file.mp4 fout:OPTFOO:dst=file.aac:OPTBAR
This will pass the :OPTBAR to all filters loaded between file.mp4 source and file.aac destination, but not OPTFOO.
Arguments inheriting can be stopped by using the keyword gfloc: arguments after the keyword will not be inherited.
Example
src=file.mp4 dst=file.aac:OPTFOO:gfloc:OPTBAR dst=file.264
This will pass the :OPTFOO to all filters loaded between file.mp4source and file.aac destination, but not OPTBAR
Arguments are by default tracked to check if they were used by the filter chain, and a warning is thrown if this is not the case.
It may be usefull to specify arguments which may not be consumed depending on the graph resolution; the specific keyword gfopt indicates that arguments after the keyword will not be tracked.
Example
src=file.mp4 dst=file.aac:OPTFOO:gfopt:OPTBAR dst=file.264
This will warn if OPTFOO is not consumed, but will not track OPTBAR.

URL templating

Destination URLs can be templated using the same mechanism as MPEG-DASH, where $KEYWORD$ is replaced in the template with the resolved value and $KEYWORD%%0Nd$ is replaced in the template with the resolved integer, padded with N zeros if needed. $$ is an escape for $
KEYWORD is case sensitive, and may be present multiple times in the string. Supported KEYWORD are:
* num: replaced by file number if defined, 0 otherwise
* PID: ID of the source PID
* URL: URL of source file
* File: path on disk for source file
* p4cc=ABCD: uses PID property with 4CC value ABCD
* pname=VAL: uses PID property with name VAL
* OTHER: locates property 4CC for the given name, or property name if no 4CC matches.

Templating can be useful when encoding several qualities in one pass.
Example
src=dump.yuv:size=640x360 vcrop:wnd=0x0x320x180 enc:c=avc:b=1M @2 enc:c=avc:b=750k dst=dump_$CropOrigin$x$Width$x$Height$.264:clone
This will create a croped version of the source, encoded in AVC at 1M, and a full version of the content in AVC at 750k. Outputs will be dump_0x0x320x180.264 for the croped version and dump_0x0x640x360.264 for the non-croped one.

Cloning filters

When a filter accepts a single connection and has a connected input, it is no longer available for dynamic resolution. There may be cases where this behaviour is undesired. Take a HEIF file with N items and do:
Example
src=img.heif dst=dump_$ItemID$.jpg
In this case, only one item (likely the first declared in the file) will connect to the destination.
Other items will not be connected since the destination only accepts one input PID.
There is a special option clone allowing destination filters (and only them) to be cloned with the same arguments:
Example
src=img.heif dst=dump_$ItemID$.jpg:clone
In this case, the destination will be cloned for each item, and all will be exported to different JPEGs thanks to URL templating.

Templating filter chains

There can be cases where the number of desired outputs depends on the source content, for example dumping a multiplex of N services into N files. When the destination involves multiplexing the input PIDs, the :cloneoption is not enough since the muxer will always accept the input PIDs.
To handle this, it is possible to use a PID property name in the sourceID of a filter with the value * or an empty value. In this case, whenever a new PID with a new value for the property is found, the filter with such sourceID will be dynamically cloned.
Warning: This feature should only be called with a single property set to * per source ID, results are undefined otherwise.
Example
src=source.ts dst=file_$ServiceID$.mp4:SID=*#ServiceID=*
Example
src=source.ts dst=file_$ServiceID$.mp4:SID=#ServiceID=
In this case, each new ServiceID value found when connecting PIDs to the destination will create a new destination file.

Assigning PID properties

It is possible to define properties on output PIDs that will be declared by a filter. This allows tagging parts of the graph with different properties than other parts (for example ServiceID). The syntax is the same as filter option, and uses the fragment separator to identify properties, eg #Name=Value.
This sets output PIDs property (4cc, built-in name or any name) to the given value. Value can be omitted for booleans (defaults to true, eg :#Alpha).
Non built-in properties are parsed as follows:
- file@FOO will be declared as string with a value set to the content of FOO.
- bxml@FOO will be declared as data with a value set to the binarized content of FOO.
- FOO will be declared as string with a value set to FOO.
- TYPE@FOO will be parsed according to TYPE. If the type is not recognized, the entire value is copied as string. See gpac -h props for defined types.
Warning: Properties are not filtered and override the properties of the filter's output PIDs, be carefull not to break the session by overriding core properties such as width/height/samplerate/... !
Example
-i v1.mp4:#ServiceID=4 -i v2.mp4:#ServiceID=2 -o dump.ts
This will mux the streams in dump.ts, using ServiceID 4 for PIDs from v1.mp4 and ServiceID 2 for PIDs from v2.mp4.
PID properties may be conditionally assigned by checking other PID properties. The syntax uses paranthesis (not configurable) after the property assignment sign:
#Prop=(CP=CV)VAL
This will assign PID property Prop to VAL for PIDs with property CP equal to CV.
#Prop=(CP=CV)VAL,(CP2=CV2)VAL2
This will assign PID property Prop to VAL for PIDs with property CP equal to CV, and to VAL2 for PIDs with property CP2 equal to CV2.
#Prop=(CP=CV)(CP2=CV2)VAL
This will assign PID property Prop to VAL for PIDs with property CP equal to CV and property CP2 equal to CV2.
#Prop=(CP=CV)VAL,()DEFAULT
This will assign PID property Prop to VAL for PIDs with property CP equal to CV, or to DEFAULT for other PIDs.
The condition syntax is the same as source ID fragment syntax.
Note: When set, the default value (empty condition) always matches the PID, therefore it should be placed last in the list of conditions.
Example
gpac -i source.mp4:#MyProp=(audio)"Super Audio",(video)"Super Video"
This will assign property MyProp to Super Audio for audio PIDs and to Super Video for video PIDs.
Example
gpac -i source.mp4:#MyProp=(audio1)"Super Audio"
This will assign property MyProp to Super Audio for first audio PID declared.
Example
gpac -i source.mp4:#MyProp=(Width+1280)HD
This will assign property MyProp to HD for PIDs with property Width greater than 1280.

Using option files

It is possible to use a file to define options of a filter, by specifying the target file name as an option without value, i.e. :myopts.txt.
Warning: Only local files are allowed.
An option file is a simple text file containing one or more options or PID properties on one or more lines.
A line begining with "//" is a comment and is ignored.
Options in an option file may point to other option files, with a maximum redirection level of 5.
An option file declaration (filter:myopts.txt) follows the same inheritance rules as regular options.
Example
src=source.mp4:myopts.txt:foo=bar dst
Any filter loaded between source.mp4 and dst will inherit both myopts.txt and foo options and will resolve options and PID properties given in myopts.txt.

Specific filter options

Some specific keywords are replaced when processing filter options.
Warning: These keywords do not apply to PID properties. Multiple keywords cannot be defined for a single option.
Defined keywords:
* $GSHARE: replaced by system path to GPAC shared directory (e.g. /usr/share)
* $GJS: replaced by the first path specified by global config option .I -js-dirs that contains the file name following the macro, e.g. $GJS/source.js
* $GLANG: replaced by the global config language option .I -lang
* $GUA: replaced by the global config user agent option .I -user-agent
* $GINC(init_val[,inc]): replaced by init_val and increment init_val by inc (positive or negative number, 1 if not specified) each time a new filter using this string is created.
The $GINC construct can be used to dynamically assign numbers in filter chains:
Example
gpac -i source.ts tssplit @#ServiceID= -o dump_$GINC(10,2).ts
This will dump first service in dump_10.ts, second service in dump_12.ts, etc...

External filters

GPAC comes with a set of built-in filters in libgpac. It may also load external filters in dynamic libraries, located in folders listed in .I -mod-dirs option. The files shall be named gf_* and shall export a single function returning a filter register - see libgpac documentation for more details.

GPAC Built-in properties

Built-in property types

sint
    signed 32 bit integer

uint
    unsigned 32 bit integer

lsint
    signed 64 bit integer

luint
    unsigned 32 bit integer

bool
    boolean

frac
    32/32 bit fraction

lfrac
    64/64 bit fraction

flt
    32 bit float number

dbl
    64 bit float number

v2di
    2D 32-bit integer vector

v2df
    2D 32-bit float vector

v3di
    3D 32-bit integer vector

v3df
    3D 32-bit float vector

v4di
    4D 32-bit integer vector

v4df
    4D 32-bit float vector

pfmt
    raw pixel format

afmt
    raw audio format

str
    UTF-8 string

mem
    data buffer

cstr
    const UTF-8 string

cmem
    const data buffer

ptr
    32 or 64 bit pointer

strl
    UTF-8 string list
    Built-in properties for PIDs and packets listed as Name (4CC type FLAGS): description
    FLAGS can be D (dropable - see GSF mux filter help), P (packet property)

ID (PIDI,uint, )
    Stream ID

ESID (ESID,uint,D )
    MPEG-4 ESID of pid

ItemID (ITID,uint, )
    ID of image item in HEIF, same value as ID

ItemNumber (ITIX,uint, )
    Number (1-based) of image item in HEIF, in order of declaration in file

TrackNumber (PIDX,uint, )
    Number (1-based) of track in order of declaration in file

ServiceID (PSID,uint,D )
    ID of parent service

ClockID (CKID,uint,D )
    ID of clock reference pid

DependencyID (DPID,uint, )
    ID of layer dependended on

SubLayer (DPSL,bool, )
    pid is a sublayer of the stream depended on rather than an enhancement layer

PlaybackMode (PBKM,uint,D )
    Playback mode supported:
    * 0: no time control
    * 1: play/pause/seek,speed=1
    * 2: play/pause/seek,speed>=0
    * 3: play/pause/seek, reverse playback

Scalable (SCAL,bool, )
    Scalable stream

TileBase (SABT,bool, )
    Tile base stream

Language (LANG,cstr, )
    Language code: ISO639 2/3 character code or RFC 4646

ServiceName (SNAM,str,D )
    Name of parent service

ServiceProvider (SPRO,str,D )
    Provider of parent service

StreamType (PMST,uint, )
    Media stream type

StreamSubtype (PSST,uint,D )
    Media subtype 4CC (auxiliary, pic sequence, etc ..)

ISOMSubtype (PIST,uint,D )
    ISOM media subtype 4CC (avc1 avc2...)

OrigStreamType (POST,uint, )
    Original stream type before encryption

CodecID (POTI,uint, )
    Codec ID (MPEG-4 OTI or ISOBMFF 4CC)

InitialObjectDescriptor (PIOD,bool, )
    Indicates if pid is declared in the IOD for MPEG-4

Unframed (PFRM,bool, )
    Indicates that the media data is not framed, i.e. each packet is not a complete AU/frame or is not in internal format (eg annexB for avc/hevc, adts for aac)

UnframedAU (PFRF,bool, )
    Indicates that the unframed media still has correct AU boundaries: one packet is one full AU, but the packet format might not be the internal one (eg annexB for avc/hevc, adts for aac)

LATM (LATM,bool, )
    Indicates media is unframed AAC in LATM format

Duration (PDUR,lfrac, )
    Media duration

NumFrames (NFRM,uint,D )
    Number of frames in the stream

ConstantFrameSize (CFRS,uint, )
    Size of the frames for constant frame size streams

TimeshiftDepth (PTSD,frac,D )
    Depth of the timeshift buffer

TimeshiftTime (PTST,dbl,D )
    Time in the timeshift buffer in seconds - changes are signaled through pid info (no reconfigure)

TimeshiftState (PTSS,uint,D )
    State of timeshift buffer: 0 is OK, 1 is underflow, 2 is overflow - changes are signaled through pid info (no reconfigure)

Timescale (TIMS,uint, )
    Media timescale (a timestamp delta of N is N/timescale seconds)

ProfileLevel (PRPL,uint,D )
    MPEG-4 profile and level

DecoderConfig (DCFG,mem, )
    Decoder configuration data

DecoderConfigEnhancement (ECFG,mem, )
    Decoder configuration data of the enhancement layer(s). Also used by 3GPP/Apple text streams to give the full sample description table used in SDP.

DecoderConfigIndex (ICFG,uint, )
    1-based index of decoder config for ISO base media files

SampleRate (AUSR,uint, )
    Audio sample rate

SamplesPerFrame (FRMS,uint, )
    Number of audio sample in one coded frame

NumChannels (CHNB,uint, )
    Number of audio channels

BPS (ABPS,uint, )
    Number of bits per sample in compressed source

ChannelLayout (CHLO,luint, )
    Channel Layout mask

AudioFormat (AFMT,afmt, )
    Audio sample format

AudioPlaybackSpeed (ASPD,dbl,D )
    Audio playback speed, only used for audio output reconfiguration

Delay (MDLY,sint, )
    Delay of presentation compared to composition timestamps, in media timescale. Positive value imply holding (delaying) the stream. Negative value imply skipping the beginning of stream

CTSShift (MDTS,uint, )
    CTS offset to apply in case of negative ctts

Width (WIDT,uint, )
    Visual Width (video / text / graphics)

Height (HEIG,uint, )
    Visual Height (video / text / graphics)

PixelFormat (PFMT,pfmt, )
    Pixel format

PixelFormatWrapped (PFMW,pfmt, )
    Underlying pixel format of video stream if pixel format is external GL texture

Stride (VSTY,uint, )
    Image or Y/alpha plane stride

StrideUV (VSTC,uint, )
    UV plane or U/V planes stride

BitDepthLuma (YBPS,uint, )
    Bit depth for luma components

BitDepthChroma (CBPS,uint, )
    Bit depth for chroma components

FPS (VFPF,frac, )
    Video framerate

Interlaced (VILC,bool, )
    Video is interlaced

SAR (PSAR,frac, )
    Sample (ie pixel) aspect ratio

PAR (VPAR,frac,D )
    Picture aspect ratio

MaxWidth (MWID,uint, )
    Maximum width (video / text / graphics) of all enhancement layers

MaxHeight (MHEI,uint, )
    Maximum height (video / text / graphics) of all enhancement layers

ZOrder (VZIX,uint, )
    Z-order of the video, from 0 (first) to max int (last)

TransX (VTRX,sint, )
    Horizontal translation of the video

TransY (VTRY,sint, )
    Vertical translation of the video

Hidden (HIDE,bool, )
    Indicates the PID is hidden in visual/audio rendering

CropOrigin (VCXY,v2di, )
    Position in source window, X,Y indicates coord in source

OriginalSize (VOWH,v2di, )
    Original resolution of video

SRD (SRD ,v4di, )
    Position and size of the video in the referential given by SRDRef

SRDRef (SRDR,v2di, )
    Width and Height of the SRD referential

SRDMap (SRDM,uintl, )
    Mapping of input videos in reconstructed video, expressed as {Ox,Oy,Ow,Oh,Dx,Dy,Dw,Dh} per input, with:
    * Ox,Oy,Ow,Oh: position and size of the input video (usually matching its SRD property), expressed in the output referential given by SRDRef
    * Dx,Dy,Dw,Dh: Position and Size of the input video in the reconstructed output, expressed in the output referential given by SRDRef

Alpha (VALP,bool, )
    Indicates the video in this pid is an alpha map

Bitrate (RATE,uint, )
    Bitrate in bps

Maxrate (MRAT,uint, )
    Max bitrate in bps

DBSize (DBSZ,uint, )
    Decode buffer size in bytes

MediaDataSize (MDSZ,luint,D )
    Size in bytes of media data

DataRef (DREF,bool,D )
    Data referencing is possible (each compressed frame is a continuous set of bytes in source, with no transformation)

URL (FURL,str,D )
    URL of source

RemoteURL (RURL,str,D )
    Remote URL of source - used for MPEG-4 systems

RedirectURL (RELO,str,D )
    Redirection URL of source

SourcePath (FSRC,str,D )
    Path of source file on file system

MIMEType (MIME,str,D )
    MIME type of source

Extension (FEXT,str,D )
    File extension of source

Cached (CACH,bool,D )
    indicates the file is completely cached

DownloadRate (DLBW,uint,D )
    Dowload rate of resource in bits per second - changes are signaled through pid info (no reconfigure)

DownloadSize (DLSZ,luint,D )
    Size of resource in bytes

DownBytes (DLBD,luint,D )
    Number of bytes downloaded - changes are signaled through pid info (no reconfigure)

ByteRange (FBRA,lfrac,D )
    Byte range of resource

DisableProgressive (NPRG,uint, )
    indicates that some blocks in file need patching (replace or insertion) upon closing, potentially disabling progressive upload

IsoAltBrands (ABRD,uintl,D )
    indicates ISOBMFF brands associated with PID/file

IsoBrand (MBRD,uint,D )
    indicates ISOBMFF major brand associated with PID/file

MovieTime (MHTS,lfrac,D )
    indicates ISOBMFF movie header duration and timescale

HasSync (PSYN,bool,D )
    indicates ISOBMFF track has sync points

ServiceWidth (DWDT,uint,D )
    Display width of service

ServiceHeight (DHGT,uint,D )
    Display height of service

CarouselRate (CARA,uint,D )
    Repeat rate in ms for systems carousel data

UTC (UTCD,luint,D )
    UTC date and time of PID

UTCTimestamp (UTCT,luint,D )
    Timestamp corresponding to UTC date and time

AudioVolume (AVOL,uint,D )
    Volume of audio

AudioPan (APAN,uint,D )
    Balance/Pan of audio

AudioPriority (APRI,uint,D )
    Audio thread priority

ProtectionScheme (SCHT,uint, )
    Protection scheme type (4CC) used

SchemeVersion (SCHV,uint, )
    Protection scheme version used

SchemeURI (SCHU,str, )
    Protection scheme URI

KMS_URI (KMSU,str, )
    URI for key management system

SelectiveEncryption (ISSE,bool, )
    Indicates if ISMA/OMA selective encryption is used

IVLength (ISIV,uint, )
    ISMA IV size

KILength (ISKI,uint, )
    ISMA KeyIndication size

CryptType (OMCT,uint, )
    OMA encryption type

ContentID (OMID,str, )
    OMA Content ID

TextualHeaders (OMTH,str, )
    OMA textual headers

PlaintextLen (OMPT,luint, )
    OMA size of plaintext data

CryptInfo (ECRI,str,D )
    URL (local file only) of crypt info file for this pid

DecryptInfo (EDRI,str,D )
    URL (local file only) of crypt info file for this pid - see decrypter help

SenderNTP (NTPS,luint,DP)
    NTP time at sender side or grabber side

ReceiverNTP (NTPR,luint,DP)
    Receiver NTP time (usually associated with the sender NTP property)

Encrypted (EPCK,bool, )
    Packets for the stream are by default encrypted (however the encryption state is carried in packet crypt flags) - changes are signaled through pid_set_info (no reconfigure)

OMAPreview (ODPR,luint, )
    OMA Preview range

CENC_PSSH (PSSH,mem, )
    PSSH blob for CENC, formatted as (u32)NbSystems [ (bin128)SystemID(u32)version(u32)KID_count[ (bin128)keyID ] (u32)priv_size(char*priv_size)priv_data]

CENC_SAI (SAIS,mem, P)
    CENC SAI for the packet, formated as (char(IV_Size))IV(u16)NbSubSamples [(u16)ClearBytes(u32)CryptedBytes]

KID (SKID,mem, )
    Key ID for packets of the PID - changes are signaled through pid_set_info (no reconfigure)

IVSize (SAIV,uint, )
    IV size for packets of the PID

ConstantIV (CBIV,mem, )
    Constant IV for packets of the PID

CENCPattern (CPTR,frac, )
    CENC crypt pattern, CENC pattern, skip as frac.num crypt as frac.den

CENCStore (CSTR,uint, )
    Storage location 4CC of SAI data

CENCstsdMode (CSTM,uint, )
    Mode for CENC sample description when using clear samples:
    * 0: single sample description is used
    * 1: a clear clone of the sample description is created, inserted before the CENC sample description
    * 2: a clear clone of the sample description is created, inserted after the CENC sample description

AMRModeSet (AMST,uint, )
    ModeSet for AMR and AMR-WideBand

SubSampleInfo (SUBS,mem, )
    Binary blob describing N subsamples of the sample, formatted as N [(u32)flags(u32)size(u32)codec_param(u8)priority(u8) discardable]. Subsamples for a given flag MUST appear in order, however flags can be interleaved

NALUMaxSize (NALS,uint, )
    Max size of NAL units in stream - changes are signaled through pid_set_info (no reconfigure)

FileNumber (FNUM,uint, P)
    Index of file when dumping to files

FileName (FNAM,str, P)
    Name of output file when dumping / dashing. Must be set on first packet belonging to new file

IDXName (INAM,str, P)
    Name of index file when dashing MPEG-2 TS. Must be set on first packet belonging to new file

FileSuffix (FSUF,str, P)
    File suffix name, replacement for $FS$ in tile templates

EODS (EODS,bool, P)
    End of DASH segment

MaxFrameSize (MFRS,uint,D )
    Max size of frame in stream - changes are signaled through pid_set_info (no reconfigure)

AvgFrameSize (AFRS,uint,D )
    Average size of frame in stream (isobmff only, static property)

MaxTSDelta (MTSD,uint,D )
    Maximum DTS delta between frames (isobmff only, static property)

MaxCTSOffset (MCTO,uint,D )
    Maximum absolute CTS offset (isobmff only, static property)

ConstantDuration (SCTD,uint,D )
    Constant duration of samples, 0 means variable duration (isobmff only, static property)

TrackTemplate (ITKT,mem,D )
    ISOBMFF serialized track box for this PID, without any sample info (empty stbl and empty dref) - used by isomuxer to reinject specific boxes of input ISOBMFF track

TrexTemplate (ITXT,mem,D )
    ISOBMFF serialized trex box for this PID - used by isomuxer to remux empty init segments

STSDTemplate (ISTD,mem,D )
    ISOBMFF serialized sample description box (stsd entry) for this PID - used by isomuxer to reinject specific boxes of input ISOBMFF track

MovieUserData (IMUD,mem,D )
    ISOBMFF serialized moov UDTA and other moov-level boxes (list) for this PID - used by isomuxer to reinject specific boxes of input ISOBMFF moov

TrackHandler (IHDL,str,D )
    ISOBMFF track handler name

TrackFlags (ITKF,uint,D )
    ISOBMFF track header flags

TrackMatrix (ITKM,uintl,D )
    ISOBMFF track header matrix

Period (PEID,str,D )
    ID of DASH period

PStart (PEST,dbl,D )
    DASH Period start - cf dasher help

PDur (PEDU,dbl,D )
    DASH Period duration - cf dasher help

Representation (DRID,str,D )
    ID of DASH representation

ASID (DAID,uint,D )
    ID of parent DASH AS

MuxSrc (MSRC,str,D )
    Name of mux source(s), set by dasher to direct its outputs

DashMode (DMOD,uint,D )
    DASH mode to be used by muxer if any, set by dasher. 0 is no DASH, 1 is regular DASH, 2 is VoD

DashDur (DDUR,dbl,D )
    DASH target segment duration in seconds to muxer if any, set by dasher

Role (ROLE,strl,D )
    List of roles for this pid

PDesc (PDES,strl,D )
    List of descriptors for the DASH period containing this pid

ASDesc (ACDS,strl,D )
    List of conditional descriptors for the DASH AdaptationSet containing this pid. If a pid with the same property type but different value is found, the pids will be in different AdaptationSets

ASCDesc (AADS,strl,D )
    List of common descriptors for the DASH AdaptationSet containing this pid

RDesc (RDES,strl,D )
    List of descriptors for the DASH Representation containing this pid

BUrl (BURL,strl,D )
    List of base URLs for this pid

Template (DTPL,str,D )
    Template to use for DASH generation for this pid

StartNumber (DRSN,uint,D )
    Start number to use for this pid - cf dasher help

xlink (XLNK,str,D )
    Remote period URL for DASH - cf dasher help

CDur (DCMD,dbl,D )
    Max media duration to process from pid in DASH mode

HLSPL (HLVP,str,D )
    Name of the HLS variant playlist for this media

HLSGroup (HLGI,str,D )
    Name of HLS Group of a stream

DCue (DCUE,str,D )
    Name of a cue list file for this pid - see dasher help

DSegs (DCNS,uint,D )
    Number of DASH segments defined by the DASH cue info

Codec (CODS,str,D )
    codec parameter string to force. If starting with '.', appended to ISOBMF code point; otherwise replace the codec string

SingleScale (DSTS,bool,D )
    Indicates the movie header should use the media timescale of the first track added

RequireReorder (PUDP,bool,D )
    Indicates the PID packets come from source with losses and reordering happening (UDP)

Primary (PITM,bool,D )
    Indicates this is a primary item in isobmf

ColorPrimaries (CPRM,uint,D )
    Indicate color primaries for a visual pid (see ISO/IEC 23001-8 / 23091-2)

ColorTransfer (CTRC,uint,D )
    Indicate color transfer characteristics for a visual pid (see ISO/IEC 23001-8 / 23091-2)

ColorMatrixCoef (CMXC,uint,D )
    Indicate color matrix coeficient for a visual pid (see ISO/IEC 23001-8 / 23091-2)

FullRange (CFRA,uint,D )
    Indicate color full range flag for a visual pid (see ISO/IEC 23001-8 / 23091-2)

ChromaLoc (CLOC,uint,D )
    Indicate chrom location for a visual pid (see ISO/IEC 23001-8 / 23091-2)

SrcMagic (PSMG,luint,D )
    Indicate a magic number to store in the track, only used by importers

MuxIndex (TIDX,luint,D )
    Indicate target track index in destination file, stored by lowest value first (not set by demuxers)

NoTSLoop (NTSL,bool, )
    Indicate the timestamps on this PID are adjusted in case of loops (used by TS muxer output)

FragStart (PFRB,uint,D )
    Indicate if packet is a fragment start (value 1) or a segment start (value 2)

FragRange (PFRR,lfrac,D )
    Indicate start and end position in bytes of fragment if packet is a fragment or segment start

SIDXRange (PFSR,lfrac,D )
    Indicate start and end position in bytes of sidx if packet is a fragment or segment start

MoofTemplate (MFTP,mem,D )
    Serialized moof box corresponding to the start of a movie fragment or segment (with styp and optionally sidx)

RawGrab (PGRB,bool,D )
    Indicate PID is a raw media grabber (webcam, microphone, etc...)

KeepAfterEOS (PKAE,bool,D )
    Indicate the PID must be kept alive after EOS (LASeR and BIFS)

CoverArt (PCOV,mem,D )
    Indicate PID cover art image data. If associated data is NULL, the data is carried in the PID

Pixel formats

yuv420 (ext *.yuv)
    Planar YUV 420 8 bit

yuv420_10 (ext *.yuvl)
    Planar YUV 420 10 bit

yuv422 (ext *.yuv2)
    Planar YUV 422 8 bit

yuv422_10 (ext *.yp2l)
    Planar YUV 422 10 bit

yuv444 (ext *.yuv4)
    Planar YUV 444 8 bit

yuv444_10 (ext *.yp4l)
    Planar YUV 444 10 bit

uyvy (ext *.uyvy)
    Planar UYVY 422 8 bit

vyuy (ext *.vyuy)
    Planar VYUV 422 8 bit

yuyv (ext *.yuyv)
    Planar YUYV 422 8 bit

yvyu (ext *.yvyu)
    Planar YVYU 422 8 bit

nv12 (ext *.nv12)
    Semi-planar YUV 420 8 bit, Y plane and UV plane

nv21 (ext *.nv21)
    Semi-planar YUV 420 8 bit, Y plane and VU plane

nv1l (ext *.nv1l)
    Semi-planar YUV 420 10 bit, Y plane and UV plane

nv2l (ext *.nv2l)
    Semi-planar YUV 420 8 bit, Y plane and VU plane

yuva (ext *.yuva)
    Planar YUV+alpha 420 8 bit

yuvd (ext *.yuvd)
    Planar YUV+depth 420 8 bit

yuv444a (ext *.yp4a)
    Planar YUV+alpha 444 8 bit

grey (ext *.grey)
    Greyscale 8 bit

algr (ext *.algr)
    Alpha+Grey 8 bit

gral (ext *.gral)
    Grey+Alpha 8 bit

rgb4 (ext *.rgb4)
    RGB 444, 12 bits (16 stored) / pixel

rgb5 (ext *.rgb5)
    RGB 555, 15 bits (16 stored) / pixel

rgb6 (ext *.rgb6)
    RGB 555, 16 bits / pixel

rgba (ext *.rgba)
    RGBA 32 bits (8 bits / component)

argb (ext *.argb)
    ARGB 32 bits (8 bits / component)

bgra (ext *.bgra)
    BGRA 32 bits (8 bits / component)

abgr (ext *.abgr)
    ABGR 32 bits (8 bits / component)

rgb (ext *.rgb)
    RGB 24 bits (8 bits / component)

bgr (ext *.bgr)
    BGR 24 bits (8 bits / component)

xrgb (ext *.xrgb)
    xRGB 32 bits (8 bits / component)

rgbx (ext *.rgbx)
    RGBx 32 bits (8 bits / component)

xbgr (ext *.xbgr)
    xBGR 32 bits (8 bits / component)

bgrx (ext *.bgrx)
    BGRx 32 bits (8 bits / component)

rgbd (ext *.rgbd)
    RGB+depth 32 bits (8 bits / component)

rgbds (ext *.rgbds)
    RGB+depth+bit shape (8 bits / RGB component, 7 bit depth (low bits) + 1 bit shape)

rgbs (ext *.rgbs)
    RGB 24 bits stereo (side-by-side) - to be removed

rgbas (ext *.rgbas)
    RGBA 32 bits stereo (side-by-side) - to be removed

extgl (ext *.extgl)
    External OpenGL texture of unknown format, to be used with samplerExternalOES

Audio formats

u8 (ext *.pc8)
    8 bit PCM

s16 (ext *.pcm)
    16 bit PCM Little Endian

s24 (ext *.s24)
    24 bit PCM

s32 (ext *.s32)
    32 bit PCM Little Endian

flt (ext *.flt)
    32-bit floating point PCM

dbl (ext *.dbl)
    64-bit floating point PCM

u8p (ext *.pc8p)
    8 bit PCM planar

s16p (ext *.pcmp)
    16 bit PCM Little Endian planar

s24p (ext *.s24p)
    24 bit PCM planar

s32p (ext *.s32p)
    32 bit PCM Little Endian planar

fltp (ext *.fltp)
    32-bit floating point PCM planar

dblp (ext *.dblp)
    64-bit floating point PCM planar

Stream types

Visual
    Video or Image stream

Audio
    Audio stream

SceneDescription
    Scene stream

Text
    Text or subtitle stream

Metadata
    Metadata stream

File
    Raw file stream

Encrypted
    Encrypted media stream

ObjectDescriptor
    MPEG-4 ObjectDescriptor stream

ClockReference
    MPEG-4 Clock Reference stream

MPEG7
    MPEG-7 description stream

IPMP
    MPEG-4 IPMP/DRM stream

OCI
    MPEG-4 ObjectContentInformation stream

MPEGJ
    MPEG-4 JAVA stream

Interaction
    MPEG-4 Interaction Sensor stream

Font
    MPEG-4 Font stream

Codecs

bifs
    MPEG-4 BIFS v1 Scene Description

bifs2
    MPEG-4 BIFS v2 Scene Description

bifsX
    MPEG-4 BIFS Extended Scene Description

od
    MPEG-4 ObjectDescriptor v1

od2
    MPEG-4 ObjectDescriptor v2

interact
    MPEG-4 Interaction Stream

afx
    MPEG-4 AFX Stream

font
    MPEG-4 Font Stream

syntex
    MPEG-4 Synthetized Texture

m4txt
    MPEG-4 Streaming Text

laser
    MPEG-4 LASeR

saf
    MPEG-4 Simple Aggregation Format

cmp|m4vp2
    MPEG-4 Visual part 2

264|avc|h264
    MPEG-4 AVC|H264 Video

avcps
    MPEG-4 AVC|H264 Video Parameter Sets

svc|avc|264|h264
    MPEG-4 AVC|H264 Scalable Video Coding

mvc
    MPEG-4 AVC|H264 Multiview Video Coding

hvc|hevc|h265
    HEVC Video

lhvc|shvc|mhvc
    HEVC Video Layered Extensions

m2vs
    MPEG-2 Visual Simple

m2v
    MPEG-2 Visual Main

m2v|m2vsnr
    MPEG-2 Visual SNR

m2v|m2vspat
    MPEG-2 Visual Spatial

m2v|m2vh
    MPEG-2 Visual High

m2v|m2v4
    MPEG-2 Visual 422

m1v
    MPEG-1 Video

jpg|jpeg
    JPEG Image

png
    PNG Image

jp2|j2k
    JPEG200 Image

aac
    MPEG-4 AAC Audio

aac|aac2m
    MPEG-2 AAC Audio Main

aac|aac2l
    MPEG-2 AAC Audio Low Complexity

aac|aac2s
    MPEG-2 AAC Audio Scalable Sampling Rate

mp3|m1a
    MPEG-1 Audio

mp3|m2a
    MPEG-2 Audio

h263
    H263 Video

h263
    H263 Video

hvt1
    HEVC tiles Video

evc|evrc
    EVRC Voice

smv
    SMV Voice

qcp|qcelp
    QCELP Voice

amr
    AMR Audio

amr|amrwb
    AMR WideBand Audio

qcp|evrcpv
    EVRC (PacketVideo MUX) Audio

vc1
    SMPTE VC-1 Video

dirac
    Dirac Video

ac3
    AC3 Audio

eac3
    Enhanced AC3 Audio

dra
    DRA Audio

g719
    G719 Audio

dstca
    DTS Coherent Acoustics Audio

dtsh
    DTS-HD High Resolution Audio

dstm
    DTS-HD Master Audio

dtsl
    DTS Express low bit rate Audio

opus
    Opus Audio

eti
    DVB Event Information

svgr
    SVG over RTP

svgzr
    SVG+gz over RTP

dims
    3GPP DIMS Scene

vtt
    WebVTT Text

txt
    Simple Text Stream

mtxt
    Metadata Text Stream

mxml
    Metadata XML Stream

subs
    Subtitle text Stream

subx
    Subtitle XML Stream

tx3g
    Subtitle/text 3GPP/Apple Stream

theo|theora
    Theora Video

vorb|vorbis
    Vorbis Audio

opus
    Opus Audio

flac
    Flac Audio

spx|speex
    Speex Audio

vobsub
    VobSub Subtitle

vobsub
    VobSub Subtitle

adpcm
    AD-PCM

csvd
    IBM CSVD

alaw
    ALAW

mulaw
    MULAW

okiadpcm
    OKI ADPCM

dviadpcm
    DVI ADPCM

digistd
    DIGISTD

yamadpcm
    YAMAHA ADPCM

truespeech
    DSP TrueSpeech

g610
    GSM 610

imulaw
    IBM MULAW

ialaw
    IBM ALAW

iadpcl
    IBM ADPCL

swf
    Adobe Flash

raw
    Raw media

av1|ivf|obu|av1b
    AOM AV1 Video

vp8|ivf
    VP8 Video

vp9|ivf
    VP9 Video

vp10|ivf
    VP10 Video

mpha
    MPEG-H Audio

mhas
    MPEG-H AudioMux

prores|apch
    ProRes Video 422 HQ

prores|apco
    ProRes Video 422 Proxy

prores|apcn
    ProRes Video 422 STD

prores|apcs
    ProRes Video 422 LT

prores|ap4x
    ProRes Video 4444 XQ

prores|ap4h
    ProRes Video 4444

ffmpeg
    FFMPEG unmapped codec

tmcd
    QT TimeCode

EXAMPLES

Basic and advanced examples are available at https://wiki.gpac.io/Filters

MORE

Authors: GPAC developers, see git repo history (-log)
For bug reports, feature requests, more information and source code, visit http://github.com/gpac/gpac
build: 1.0.1-rev0-g7c36b3027-master
Copyright: (c) 2000-2020 Telecom Paris distributed under LGPL v2.1+ - http://gpac.io

SEE ALSO

gpac-filters(1), MP4Client(1), MP4Box(1)