Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MP4Box(1)			      GPAC			       MP4Box(1)

NAME
     MP4Box - GPAC command-line media packager

SYNOPSIS
     MP4Box [options] [file] [options]

General Options
     MP4Box  is  a  multimedia	packager, with a vast number of functionalities:
     conversion, splitting, hinting, dumping, DASH-ing, encryption,  transcoding
     and others.
     MP4Box  provides  a  large set of options, classified by categories (see .I
     -h). These options do not follow any particular ordering.

     By default, MP4Box rewrites the input file. You can change this behavior by
     using the .I out option.
     MP4Box stores by default the file with 0.5 second	interleaving  and  meta-
     data (moov ...) at the beginning, making it suitable for HTTP download-and-
     play.  This  may  however	takes  longer  to store the file, use .I flat to
     change this behavior.

     MP4Box usually generates a temporary file	when  creating	a  new	IsoMedia
     file.  The location of this temporary file is OS-dependent, and it may hap-
     pen that the drive/partition the temporary  file  is  created  on	has  not
     enough  space  or no write access. In such a case, you can specify a tempo-
     rary file location with .I -tmp.

     Track identifier for track-based operations (usually referred to as tkID in
     the help) use the following syntax:
     * INT: target is track with ID INT
     * n`INT`: target is track number INT
     * `audio`, `video`, `text`: target is first audio, video or text track
     * `audioN`, `videoN`, `textN`: target is  the  Nth  audio,  video	or  text
     track, with N=1 being the first track of desired type

     Option values:
     Unless  specified	otherwise,  a track operation option of type integer ex-
     pects a track identifier value following it.
     An option of type boolean expects no following value.

     -mem-track
	    enable memory tracker

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

     -p (string)
	    use indicated profile for the global GPAC config. If not found, con-
	    fig 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. Works using -p=NAME or -p NAME

     -inter (number, default: 0.5)
	    interleave file, producing track chunks with given duration in ms. A
	    value of 0 disables interleaving

     -old-inter (number)
	    same as .I inter but without drift correction

     -tight
	    tight interleaving (sample based) of the  file.  This  reduces  disk
	    seek operations but increases file size

     -flat
	    store  file  with all media data first, non-interleaved. This speeds
	    up writing time when creating new files

     -frag (number)
	    fragment file, producing track fragments of given  duration  in  ms.
	    This disables interleaving

     -out (string)
	    specify ISOBMFF output file name. By default input file is overwrit-
	    ten

     -co64
	    force usage of 64-bit chunk offsets for ISOBMF files

     -new
	    force creation of a new destination file

     -newfs
	    force  creation  of a new destination file without temp file but in-
	    terleaving support

     -no-sys,-nosys
	    remove all MPEG-4 Systems info except IOD, kept for  profiles.  This
	    is the default when creating regular AV content

     -no-iod
	    remove MPEG-4 InitialObjectDescriptor from file

     -mfra
	    insert  movie  fragment random offset when fragmenting file (ignored
	    in dash mode)

     -isma
	    rewrite the file as an ISMA 1.0 file

     -ismax
	    same as .I isma and remove all clock references

     -3gp
	    rewrite as 3GPP(2) file (no more MPEG-4 Systems  Info),  always  en-
	    abled  if  destination  file  extension is .3gp, .3g2 or .3gpp. Some
	    tracks may be removed in the process

     -ipod
	    rewrite the file for iPod/old iTunes

     -psp
	    rewrite the file for PSP devices

     -brand (string)
	    set major brand of	file  (ABCD)  or  brand  with  optional  version
	    (ABCD:v)

     -ab (string)
	    add given brand to file's alternate brand list

     -rb (string)
	    remove given brand to file's alternate brand list

     -cprt (string)
	    add copyright string to file

     -chap (string)
	    set  chapter  information from given file. The following formats are
	    supported (but cannot be mixed) in the chapter text file:
	      * ZoomPlayer: AddChapter(nb_frames,chapter name), AddChapterBySec-
	    onds(nb_sec,chapter name) and  AddChapterByTime(h,m,s,chapter  name)
	    with 1 chapter per line
	      *  Time  codes:  h:m:s  chapter_name,  h:m:s:ms  chapter_name  and
	    h:m:s.ms chapter_name with 1 chapter per line
	      * SMPTE codes: h:m:s;nb_f/fps chapter_name  and  h:m:s;nb_f  chap-
	    ter_name with nb_f the number of frames and fps the framerate with 1
	    chapter per line
	      *  Common  syntax:  CHAPTERX=h:m:s[:ms  or  .ms] on first line and
	    CHAPTERXNAME=name on next line (reverse order accepted)

     -chapqt (string)
	    set chapter information from given file, using QT signaling for text
	    tracks

     -set-track-id tkID:id2
	    change id of track to id2

     -swap-track-id tkID1:tkID1
	    swap the id between tracks with id1 to id2

     -rem (int)
	    remove given track from file

     -rap (int)
	    remove all non-RAP samples from given track

     -refonly (int)
	    remove all non-reference pictures from given track

     -enable (int)
	    enable given track

     -disable (int)
	    disable given track

     -timescale (int, default: 600)
	    set movie timescale to given value (ticks per second)

     -lang [tkID=]LAN
	    set language. LAN is the BCP-47 code (eng, en-UK, ...). If no  track
	    ID is given, sets language to all tracks

     -delay tkID=TIME
	    set  track	start  delay (>0) or initial skip (<0) in ms or in frac-
	    tional seconds (N/D)

     -par tkID=PAR
	    set visual track pixel aspect ratio. PAR is:
	      * N:D: set PAR to N:D in track, do not modify the bitstream
	      * wN:D: set PAR to N:D in track and try to modify the bitstream
	      * none: remove PAR info from track, do not modify the bitstream
	      * auto: retrieve PAR info from bitstream and set it in track
	      * force: force 1:1 PAR in track, do not modify the bitstream

     -clap tkID=CLAP
	    set visual track clean aperture. CLAP is Wn,Wd,Hn,Hd,HOn,HOd,VOn,VOd
	    or none
	    * n, d: numerator, denominator
	    * W, H, HO, VO: clap width, clap  height,  clap  horizontal  offset,
	    clap vertical offset

     -mx tkID=MX
	    set  track	matrix,  with  MX is M1:M2:M3:M4:M5:M6:M7:M8:M9 in 16.16
	    fixed point integers or hexa

     -kind tkID=schemeURI=value
	    set kind for the track or for all tracks using all=schemeURI=value

     -kind-rem tkID=schemeURI=value
	    remove kind if given schemeID for the track or for all  tracks  with
	    all=schemeURI=value

     -name tkID=NAME
	    set track handler name to NAME (UTF-8 string)

     -tags,-itags (string)
	    set iTunes tags to file, see -h tags

     -group-add (string)
	    create  a  new  grouping information in the file. Format is a colon-
	    separated list of following options:
	    * refTrack=ID: track used as a group  reference.  If  not  set,  the
	    track  will  belong to the same group as the previous trackID speci-
	    fied. If 0 or no previous track specified,	a  new	alternate  group
	    will be created
	    * switchID=ID: ID of the switch group to create. If 0, a new ID will
	    be computed for you. If <0, disables SwitchGroup
	    * criteria=string: list of space-separated 4CCs
	    * trackID=ID: track to add to this group

	    Warning:  Options  modify state as they are parsed, trackID=1:crite-
	    ria=lang:trackID=2	     is       different       from	  crite-
	    ria=lang:trackID=1:trackID=2

     -group-rem-track (int)
	    remove given track from its group

     -group-rem (int)
	    remove the track's group

     -group-clean
	    remove all group information from all tracks

     -ref tkID:R4CC:refID
	    add  a  reference  of type R4CC from track ID to track refID (remove
	    track reference if refID is 0)

     -keep-utc
	    keep UTC timing in the file after edit

     -udta tkID:[OPTS]
	    set udta for given track or movie if tkID is 0. OPTS is a colon sep-
	    arated list of:
	    * type=CODE: 4CC code of the UDTA (not needed for box= option)
	    * box=FILE: location of the udta data, formatted as serialized boxes
	    * box=base64,DATA: base64 encoded udta data, formatted as serialized
	    boxes
	    * src=FILE: location of the udta data (will be stored  in  a  single
	    box of type CODE)
	    *  src=base64,DATA:  base64  encoded  udta data (will be stored in a
	    single box of type CODE)
	    * str=STRING: use the given string as payload for the udta box
	    Note: If no source is set, UDTA of type CODE will be removed

     -patch [tkID=]FILE
	    apply box patch described in FILE, for given trackID if set

     -bo
	    freeze the order of boxes in input file

     -init-seg (string)
	    use the given file as an init segment for dumping or for encryption

     -zmov
	    compress movie box according to ISOBMFF box compression or QT if mov
	    extension

     -xmov
	    same as zmov and wraps ftyp in otyp

     -edits tkID=EDITS
	    set edit list. The following syntax is used (no  separators  between
	    entries):
	     * `r`: removes all edits
	     * `eSTART`: add empty edit with given start time. START can be
	       - VAL: start time in seconds (int, double, fraction), media dura-
	    tion used as edit duration
	       - VAL-DUR: start time and duration in seconds (int, double, frac-
	    tion)
	     *	`eSTART,MEDIA[,RATE]`:	add regular edit with given start, media
	    start time in seconds (int, double, fraction) and rate (fraction  or
	    INT)
	     * Examples:
	       -  re0-5e5-3,4:	remove	edits, add empty edit at 0s for 5s, then
	    add regular edit at 5s for 3s starting at 4s in media track
	       - re0-4,0,0.5: remove edits, add single edit at 0s for 4s  start-
	    ing at 0s in media track and playing at speed 0.5

     -moovpad (int)
	    specify  amount  of padding to keep after moov box for later inplace
	    editing - if 0, moov padding is disabled

     -no-inplace
	    disable inplace rewrite

     -hdr (string)
	    update HDR information based on given XML, 'none' removes HDR info

     -time [tkID=]DAY/MONTH/YEAR-H:M:S
	    set movie or track creation time

     -mtime tkID=DAY/MONTH/YEAR-H:M:S
	    set media creation time

Extracting Options
     MP4Box can be used to extract media tracks from MP4 files. If you	need  to
     convert these tracks however, please check the filters doc.

     Options:

     -raw (string)
	    extract  given  track  in  raw  format when supported. Use tkID:out-
	    put=FileName to set output file name

     -raws (string)
	    extract each sample of the given track to a file. Use tkID:N to  ex-
	    tract the Nth sample

     -nhnt (int)
	    extract given track to NHNT format

     -nhml (string)
	    extract given track to NHML format. Use tkID:full for full NHML dump
	    with all packet properties

     -webvtt-raw (string)
	    extract given track as raw media in WebVTT as metadata. Use tkID:em-
	    bedded to include media data in the WebVTT file

     -single (int)
	    extract given track to a new mp4 file

     -six (int)
	    extract  given  track as raw media in experimental XML streaming in-
	    structions

     -mux (string)
	    multiplex input file to given destination

     -qcp (int)
	    same as .I raw but defaults to QCP file for EVRC/SMV

     -saf
	    multiplex input file to SAF multiplex

     -dvbhdemux
	    demultiplex DVB-H file into IP Datagrams sent on the network

     -raw-layer (int)
	    same as .I raw but skips SVC/MVC/LHVC extractors when extracting

     -diod
	    extract file IOD in raw format

     -mpd (string)
	    convert given HLS or smooth manifest (local or remote http) to MPD -
	    options -url-template and -segment-timelinecan be used in this mode.
	    Note: This only provides basic conversion, for more advanced conver-
	    sions, see gpac -h dasher

	    Warning: This is not compatible with other DASH options and does not
	    convert associated segments

DASH Options
     Also see:
     - the dasher `gpac -h dasher` filter documentation
     - [[DASH wiki|DASH-intro]].

Specifying input files
     Input media files to dash can use the following modifiers
     * #trackID=N: only use the track ID N from the source file
     * #N: only use the track ID N from the source file (mapped to .I -tkid)
     * #video: only use the first video track from the source file
     * #audio: only use the first audio track from the source file
     * #Prop=Value: add PID filtering using the same syntax as SID fragments (cf
     gpac -h doc)
     * :id=NAME: set the representation ID to NAME. Reserved value NULL disables
     representation ID for multiplexed inputs. If not set, a  default  value  is
     computed and all selected tracks from the source will be in the same output
     multiplex.
     *	:dur=VALUE: process VALUE seconds (fraction) from the media. If VALUE is
     longer than media duration, last sample duration is extended.
     * :period=NAME: set the representation's period to NAME.  Multiple  periods
     may  be used. Periods appear in the MPD in the same order as specified with
     this option
     * :BaseURL=NAME: set the BaseURL. Set multiple times for multiple BaseURLs
     Warning: This does not modify generated files location  (see  segment  tem-
     plate).
     * :bandwidth=VALUE: set the representation's bandwidth to a given value
     *	:pdur=VALUE: sets the duration of the associated period to VALUE seconds
     (fraction) (alias for period_duration:VALUE). This is only used when no in-
     put   media   is	specified   (remote   period   insertion),   e.g.   :pe-
     riod=X:xlink=Z:pdur=Y
     *	:ddur=VALUE:  override	target	DASH  segment  duration to VALUE seconds
     (fraction) for this input (alias for duration:VALUE)
     * :xlink=VALUE: set the xlink value for the period containing this element.
     Only the xlink declared on the first rep of a period will be used
     * :asID=VALUE: set the AdaptationSet ID to VALUE (unsigned int)
     * :role=VALUE: set the role of this representation (cf  DASH  spec).  Media
     with different roles belong to different adaptation sets.
     * :desc_p=VALUE: add a descriptor at the Period level.
     *	:desc_as=VALUE:  add  a descriptor at the AdaptationSet level. Two input
     files with different values will be in different AdaptationSet elements.
     * :desc_as_c=VALUE: add a descriptor at the AdaptationSet level.  Value  is
     ignored while creating AdaptationSet elements.
     *	:desc_rep=VALUE:  add a descriptor at the Representation level. Value is
     ignored while creating AdaptationSet elements.
     * :sscale: force movie timescale to match	media  timescale  of  the  first
     track in the segment.
     * :trackID=N: same as setting fragment #trackID=
     * @f1[:args][@fN:args][@@fK:args]: set a filter chain to insert between the
     source  and  the dasher. Each filter in the chain is formatted as a regular
     filter, see filter doc `gpac -h doc`. If several filters are set:
       - they will be chained in the given order if separated by a single @
       - a new filter chain will be created if separated by a double @@. In this
     case, no representation ID is assigned to the source.
     Example
     source.mp4:@c=avc:b=1M@@c=avc:b=500k

     This will load a filter chain with two encoders connected to the source and
     to the dasher.
     Example
     source.mp4:@c=avc:b=1M@c=avc:b=500k

     This will load a filter chain with the second encoder connected to the out-
     put of the first (!!).

     Note: @f must be placed after all other options.

     Note: Descriptors value must be a properly formatted XML element(s),  value
     is not checked. Syntax can use file@FILENAME to load content from file.

Options
     -dash (number)
	    create  DASH from input files with given segment (subsegment for on-
	    Demand profile) duration in ms

     -dash-live (number)
	    generate a live DASH session using the given segment duration in ms;
	    using -dash-live=F will also write the live  context  to  F.  MP4Box
	    will run the live session until q is pressed or a fatal error occurs

     -ddbg-live (number)
	    same as .I dash-live without time regulation for debug purposes

     -frag (number)
	    specify  the  fragment  duration in ms. If not set, this is the DASH
	    duration (one fragment per segment)

     -out (string)
	    specify the output MPD file name

     -profile,-dash-profile (string)
	    specify the target DASH profile, and set default options  to  ensure
	    conformance  to the desired profile. Default profile is full in sta-
	    tic mode, live in dynamic mode (old syntax using  :live  instead  of
	    .live  as  separator  still  possible). Defined values are onDemand,
	    live,   main,   simple,   full,   hbbtv1.5.live,	dashavc264.live,
	    dashavc264.onDemand, dashif.ll

     -profile-ext (string)
	    specify  a	list  of profile extensions, as used by DASH-IF and DVB.
	    The string will be colon-concatenated with the profile used

     -rap
	    ensure that segments begin with random access points, segment  dura-
	    tions might vary depending on the source encoding

     -frag-rap
	    ensure  that all fragments begin with random access points (duration
	    might vary depending on the source encoding)

     -segment-name (string)
	    set the segment name for generated segments. If not  set  (default),
	    segments  are  concatenated  in  output  file except in live profile
	    where dash_%%s. Supported replacement strings are:
	    - $Number[%%0Nd]$ is replaced by the segment number,  possibly  pre-
	    fixed with 0
	    - $RepresentationID$ is replaced by representation name
	    - $Time$ is replaced by segment start time
	    - $Bandwidth$ is replaced by representation bandwidth
	    -  $Init=NAME$  is replaced by NAME for init segment, ignored other-
	    wise
	    - $Index=NAME$ is replaced by NAME for index segments, ignored  oth-
	    erwise
	    -  $Path=PATH$  is	replaced by PATH when creating segments, ignored
	    otherwise
	    - $SubNumber[%%0Nd]$ is replaced by the segment subnumber in segment
	    sequences, possibly prefixed with 0
	    - $Segment=NAME$ is replaced by NAME for media segments, ignored for
	    init segments

     -segment-ext (string, default: m4s)
	    set the segment extension, null means no extension

     -init-segment-ext (string, default: mp4)
	    set the segment extension for init, index  and  bitstream  switching
	    segments, null means no extension

     -segment-timeline
	    use SegmentTimeline when generating segments

     -segment-marker (string)
	    add a box of given type (4CC) at the end of each DASH segment

     -insert-utc
	    insert UTC clock at the beginning of each ISOBMF segment

     -base-url (string)
	    set Base url at MPD level. Can be used several times.
	    Warning: this does not  modify generated files location

     -mpd-title (string)
	    set MPD title

     -mpd-source (string)
	    set MPD source

     -mpd-info-url (string)
	    set MPD info url

     -cprt (string)
	    add copyright string to MPD

     -dash-ctx (string)
	    store/restore DASH timing from indicated file

     -dynamic
	    use dynamic MPD type instead of static

     -last-dynamic
	    same as .I dynamic but close the period (insert lmsg brand if needed
	    and update duration)

     -mpd-duration (number)
	    set  the duration in second of a live session (if 0, you must use .I
	    mpd-refresh)

     -mpd-refresh (number)
	    specify MPD update time in seconds

     -time-shift (int)
	    specify MPD time shift buffer depth  in  seconds,  -1  to  keep  all
	    files. Default is 0

     -subdur (number)
	    specify  maximum  duration	in  ms of the input file to be dashed in
	    LIVE or context mode. This does not change the segment duration, but
	    stops dashing once segments produced exceeded the duration. If there
	    is not enough samples to finish a segment, data is looped unless  .I
	    no-loop is used which triggers a period end

     -run-for (int)
	    run for given ms  the dash-live session then exits

     -min-buffer (int)
	    specify MPD min buffer time in ms

     -ast-offset (int)
	    specify  MPD  AvailabilityStartTime  offset  in  ms  if positive, or
	    availabilityTimeOffset of each representation if negative

     -dash-scale (int)
	    specify that timing for .I dash,  .I dash-live,  .I  subdur  and  .I
	    frag  are  expressed  in  given timescale (units per seconds) rather
	    than ms

     -mem-frags
	    fragmentation happens in memory rather than on disk before	flushing
	    to disk

     -pssh (int)
	    set pssh store mode
	    * v: initial movie
	    * f: movie fragments
	    * m: MPD
	    * mv, vm: in initial movie and MPD
	    * mf, fm: in movie fragments and MPD
	    * n: remove PSSH from MPD, initial movie and movie fragments

     -sample-groups-traf
	    store  sample group descriptions in traf (duplicated for each traf).
	    If not set, sample group descriptions  are	stored	in  the  initial
	    movie

     -mvex-after-traks
	    store  mvex  box  after  trak boxes within the moov box. If not set,
	    mvex is before

     -sdtp-traf (int)
	    use sdtp box in traf (Smooth-like)
	    * no: do not use sdtp
	    * sdtp: use sdtp box to indicate  sample  dependencies  and  do  not
	    write info in trun sample flags
	    *  both: use sdtp box to indicate sample dependencies and also write
	    info in trun sample flags

     -no-cache
	    disable file cache for dash inputs

     -no-loop
	    disable looping content in live mode and uses period switch instead

     -hlsc
	    insert UTC in variant playlists for live HLS

     -bound
	    segmentation will always try to split before or at, but never after,
	    the segment boundary

     -closest
	    segmentation will use the closest frame to the segment boundary (be-
	    fore or after)

     -subsegs-per-sidx,-frags-per-sidx (int)
	    set the number of subsegments to be written in each SIDX box
	    * 0: a single SIDX box is used per segment
	    * -1: no SIDX box is used

     -ssix
	    enable SubsegmentIndexBox describing 2 ranges, first one  from  moof
	    to	end  of  first	I-frame, second one unmapped. This does not work
	    with daisy chaining mode enabled

     -url-template
	    use SegmentTemplate instead of explicit sources in segments. Ignored
	    if segments are stored in the output file

     -url-template-sim
	    use SegmentTemplate simulation while converting HLS to MPD

     -daisy-chain
	    use daisy-chain SIDX instead of hierarchical. Ignored if  frags/sidx
	    is 0

     -single-segment
	    use a single segment for the whole file (OnDemand profile)

     -single-file
	    use a single file for the whole file (default)

     -bs-switching (string, default: inband, values: inband|merge|multi|no|sin-
     gle)
	    set bitstream switching mode
	    * inband: use inband param set and a single init segment
	    *  merge:  try  to	merge param sets in a single sample description,
	    fallback to no
	    * multi: use several sample description, one per quality
	    * no: use one init segment per quality
	    * pps: use out of band VPS,SPS,DCI, inband for PPS,APS and a  single
	    init segment
	    * single: to test with single input

     -moof-sn (int)
	    set sequence number of first moof to given value

     -tfdt (int)
	    set  TFDT  of  first  traf	to given value in SCALE units (cf -dash-
	    scale)

     -no-frags-default
	    disable default fragments flags in trex (required  by  some  dash-if
	    profiles and CMAF/smooth streaming compatibility)

     -single-traf
	    use  a  single track fragment per moof (smooth streaming and derived
	    specs may require this)

     -tfdt-traf
	    use a tfdt per track fragment (when -single-traf is used)

     -dash-ts-prog (int)
	    program_number to be considered in case of an MPTS input file

     -frag-rt
	    when using fragments in live  mode,  flush	fragments  according  to
	    their timing

     -cp-location (string)
	    set ContentProtection element location
	    * as: sets ContentProtection in AdaptationSet element
	    * rep: sets ContentProtection in Representation element
	    * both: sets ContentProtection in both elements

     -start-date (string)
	    for   live	 mode,	 set  start  date  (as	xs:date,  e.g.	YYYY-MM-
	    DDTHH:MM:SSZ). Default is current UTC
	    Warning: Do not use with multiple periods, nor when DASH duration is
	    not a multiple of GOP size

     -cues (string)
	    ignore dash duration and segment according to cue times in given XML
	    file (tests/media/dash_cues for examples)

     -strict-cues
	    throw error if something is wrong while  parsing  cues  or	applying
	    cue-based segmentation

     -merge-last-seg
	    merge last segment if shorter than half the target duration

File splitting
     MP4Box  can  split input files by size, duration or extract a given part of
     the file to new IsoMedia file(s).
     This requires that at most one track in the input file has  non  random-ac-
     cess points (typically one video track at most).
     Splitting	will  ignore all MPEG-4 Systems tracks and hint tracks, but will
     try to split private media tracks.
     The input file must have enough random access points in order to be  split.
     If this is not the case, you will have to re-encode the content.
     You  can  add  media to a file and split it in the same pass. In this case,
     the destination file (the one which would be  obtained  without  splitting)
     will not be stored.

     Time ranges are specified as follows:
     *	`S-E`:	S  start  and E end times, formatted as HH:MM:SS.ms, MM:SS.ms or
     time in seconds (int, double, fraction)
     * `S:E`: S start time and E end times in seconds (int,  double,  fraction).
     If E is prefixed with D, this sets E = S + time
     *	`S:end` or `S:end-N`: S start time in seconds (int, double), N number of
     seconds (int, double) before the end

     MP4Box splitting runs a filter session using the reframer	filter	as  fol-
     lows:
     - splitrange option of the reframer is always set
     - source is demultiplexed with alltk option set
     - start and end ranges are passed to xs and xe options of the reframer
     - for -splitz, options xadjust and xround=after are enforced
     - for -splitg, options xadjust and xround=before are enforced
     -	for  -splitf,  option  xround=seek  is enforced and propbe_refset if not
     specified at prompt
     - for -splitx, option xround=closest and propbe_ref  are  enforced  if  not
     specified at prompt

     The  default  output  storage mode is to full interleave and will require a
     temp file for each output. This  behavior	can  be  modified  using  -flat,
     -newfs, -inter and -frag.
     The  output  file	name(s)  can be specified using -out and templates (e.g.
     -out split$num%04d$.mp4 produces split0001.mp4, split0002.mp4, ...).
     Multiple time ranges  can	be  specified  as  a  comma-separated  list  for
     -splitx, -splitz and -splitg.

     -split (string)
	    split  in  files  of given max duration (float number) in seconds. A
	    trailing unit can be specified:
	    * `M`, `m`: duration is in minutes
	    * `H`, `h`: size is in hours

     -split-rap,-splitr
	    split in files at each new RAP

     -split-size,-splits (string)
	    split in files of given max size (integer number)  in  kilobytes.  A
	    trailing unit can be specified:
	    * `M`, `m`: size is in megabytes
	    * `G`, `g`: size is in gigabytes

     -split-chunk,-splitx (string)
	    extract the specified time range as follows:
	    - the start time is moved to the RAP sample closest to the specified
	    start time
	    - the end time is kept as requested

     -splitz (string)
	    extract  the  specified  time range so that ranges A:B and B:C share
	    exactly the same boundary B:
	    - the start time is moved to the RAP sample at or after  the  speci-
	    fied start time
	    -  the end time is moved to the frame preceding the RAP sample at or
	    following the specified end time

     -splitg (string)
	    extract the specified time range as follows:
	    - the start time is moved to the RAP sample at or before the  speci-
	    fied start time
	    -  the end time is moved to the frame preceding the RAP sample at or
	    following the specified end time

     -splitf (string)
	    extract the specified time range and insert edits such that the  ex-
	    tracted output is exactly the specified range

File Dumping
     MP4Box  has  many	dump  functionalities, from simple track listing to more
     complete reporting of special tracks.

     Options:

     -std
	    dump/write to stdout and assume stdout is opened in binary mode

     -stdb
	    dump/write to stdout and try to reopen stdout in binary mode

     -tracks
	    print the number of tracks on stdout

     -info (string)
	    print movie info (no parameter) or track extended info  with  speci-
	    fied ID

     -infon (string)
	    print  track info for given track number, 1 being the first track in
	    the file

     -infox
	    print movie and track extended info (same as -info N for each track)

     -diso,-dmp4
	    dump IsoMedia file boxes in XML output

     -dxml
	    dump IsoMedia file boxes and known track samples in XML output

     -disox
	    dump IsoMedia file boxes except sample tables in XML output

     -keep-comp
	    do not decompress boxes when dumping

     -keep-ods
	    do not translate ISOM ODs and ESDs tags (debug purpose only)

     -bt
	    dump scene to BT format

     -xmt
	    dump scene to XMT format

     -wrl
	    dump scene to VRML format

     -x3d
	    dump scene to X3D XML format

     -x3dv
	    dump scene to X3D VRML format

     -lsr
	    dump scene to LASeR XML (XSR) format

     -svg
	    dump scene to SVG

     -drtp
	    dump rtp hint samples structure to XML output

     -dts
	    print sample timing, size and position in file to text output

     -dtsx
	    same as .I dts but does not print offset

     -dtsc
	    same as .I dts but analyses each sample for duplicated dts/cts (slow
	    !)

     -dtsxc
	    same as .I dtsc but does not print offset (slow !)

     -dnal (int)
	    print NAL sample info of given track

     -dnalc (int)
	    print NAL sample info of given track, adding CRC for each nal

     -dnald (int)
	    print NAL sample info of given track without DTS and CTS info

     -dnalx (int)
	    print NAL sample info of given track without DTS and  CTS  info  and
	    adding CRC for each nal

     -sdp
	    dump SDP description of hinted file

     -dsap (int)
	    dump DASH SAP cues (see -cues) for a given track

     -dsaps (int)
	    same as .I dsap but only print sample number

     -dsapc (int)
	    same as .I dsap but only print CTS

     -dsapd (int)
	    same as .I dsap but only print DTS

     -dsapp (int)
	    same as .I dsap but only print presentation time

     -dcr
	    dump ISMACryp samples structure to XML output

     -dchunk
	    dump chunk info

     -dump-cover
	    extract cover art

     -dump-chap
	    extract chapter file as TTXT format

     -dump-chap-ogg
	    extract chapter file as OGG format

     -dump-chap-zoom
	    extract chapter file as zoom format

     -dump-udta [tkID:]4cc
	    extract  user  data  for the given 4CC. If tkID is given, dumps from
	    UDTA of the given track ID, otherwise moov is used

     -mergevtt
	    merge vtt cues while dumping

     -ttxt (int)
	    convert input subtitle to GPAC TTXT format if no  parameter.  Other-
	    wise, dump given text track to GPAC TTXT format

     -srt (int)
	    convert  input  subtitle  to  SRT format if no parameter. Otherwise,
	    dump given text track to SRT format

     -nstat
	    generate node/field statistics for scene

     -nstats
	    generate node/field statistics per Access Unit

     -nstatx
	    generate node/field statistics for scene after each AU

     -hash
	    generate SHA-1 Hash of the input file

     -comp (string)
	    replace with compressed version all top level box types given as pa-
	    rameter, formatted as orig_4cc_1=comp_4cc_1[,orig_4cc_2=comp_4cc_2]

     -topcount (string)
	    print to stdout the number of top-level  boxes  matching  box  types
	    given as parameter, formatted as 4cc_1,4cc_2N

     -topsize (string)
	    print  to  stdout  the  number  of bytes of top-level boxes matching
	    types given as parameter, formatted as 4cc_1,4cc_2N or all	for  all
	    boxes

     -bin
	    convert input XML file using NHML bitstream syntax to binary

     -mpd-rip
	    fetch MPD and segment to disk

     -udp-write (string, default: IP[:port])
	    write input name to UDP (default port 2345)

     -raw-cat (string)
	    raw concatenation of given file with input file

     -wget (string)
	    fetch resource from http(s) URL

     -dm2ts
	    dump timing of an input MPEG-2 TS stream sample timing

     -check-xml
	    check XML output format for -dnal*, -diso* and -dxml options

     -fuzz-chk
	    open file without probing and exit (for fuzz tests)

Importing Options
File importing
     Syntax is .I add / .I cat URL[#FRAGMENT][:opt1...:optN=val]
     This  process will create the destination file if not existing, and add the
     track(s) to it. If you wish to always create a new destination file, add .I
     -new.
     The supported input media types depend on your installation, check  filters
     documentation for more info.

     To  select  a  desired media track from a source, a fragment identifier '#'
     can be specified, before any other options. The following syntax is used:
     * `#video`: adds the first video track found in source
     * `#audio`: adds the first audio track found in source
     * `#auxv`: adds the first auxiliary video track found in source
     * `#pict`: adds the first picture track found in source
     * `#trackID=ID` or `#ID`: adds the specified track. For IsoMedia files,  ID
     is the track ID. For other media files, ID is the value indicated by MP4Box
     -info inputFile
     * `#pid=ID`: number of desired PID for MPEG-2 TS sources
     * `#prog_id=ID`: number of desired program for MPEG-2 TS sources
     * `#program=NAME`: name of desired program for MPEG-2 TS sources

     By  default  all imports are performed sequentially, and final interleaving
     is done at the end; this however requires a temporary file holding original
     ISOBMF file (if any) and added files  before  creating  the  final  output.
     Since  this  can  become  quite large, it is possible to add media to a new
     file without temporary storage, using .I -flat option,  but  this	disables
     media interleaving.

     If  you  wish  to create an interleaved new file with no temporary storage,
     use the .I -newfs option. The interleaving might not be as precise as  when
     using  .I	-new since it is dependent on multiplexer input scheduling (each
     execution might lead to a slightly different result). Additionally in  this
     mode:
      -  Some  multiplexing  options (marked with X below) will be activated for
     all inputs (e.g. it is not possible to import one AVC track with xps_inband
     and another without).
      - Some multiplexing options (marked as D below) cannot be used as they re-
     quire temporary storage for file edition.
      - Usage of .I cat is possible, but concatenated sources will not be inter-
     leaved in the output. If you wish to perform more	complex  cat/add  opera-
     tions without temp file, use a playlist.

     Source URL can be any URL supported by GPAC, not limited to local files.

     Note:  When  importing  SRT or SUB files, MP4Box will choose default layout
     options to make the subtitle appear at the bottom of the video. You  SHOULD
     NOT  import  such	files before any video track is added to the destination
     file, otherwise the results will likely not be useful (default SRT/SUB  im-
     porting  uses default serif font, fontSize 18 and display size 400x60). For
     more details, check TTXT doc.

     When importing several tracks/sources in one pass, all options will be  ap-
     plied  if	relevant  to each source. These options are set for all imported
     streams. If you need to specify these options per stream, set per-file  op-
     tions using the syntax -add stream[:opt1:...:optN].

     The  import  file name may be set to empty or self, indicating that the im-
     port options should be applied to the destination file track(s).
     Example
     -add self:moovts=-1:noedit src.mp4

     This will apply moovts and noedit option to all tracks in src.mp4
     Example
     -add self#2:moovts=-1:noedit src.mp4

     This will apply moovts and noedit option to track with ID=2 in src.mp4
     Only per-file options marked with a S are possible in this mode.

     When importing an ISOBMFF/QT file, only options marked as C  or  S  can  be
     used.

     When importing as an external track, only options marked as E can be used.

     Allowed per-file options:

     dur (int)
	    XCE import only the specified duration from the media. Value can be:
	      * positive float: specifies duration in seconds
	      * fraction: specifies duration as NUM/DEN fraction
	      * negative integer: specifies duration in number of coded frames

     start (number)
	    C  target start time in source media, may not be supported depending
	    on the source

     lang (string)
	    SE set imported media language code

     delay (int)
	    SE set imported media initial delay (>0) or initial skip (<0) in  ms
	    or as fractional seconds (N/D)

     par (string)
	    S set visual pixel aspect ratio (see .I -par )

     clap (string)
	    S set visual clean aperture (see .I -clap )

     mx (string)
	    SE set track matrix (see .I -mx )

     name (string)
	    S set track handler name

     ext (string)
	    override file extension when importing

     hdlr (string)
	    S set track handler type to the given code point (4CC)

     stype (string)
	    S  force  sample  description  type  to  given code point (4CC), may
	    likely break the file

     tkhd (int)
	    SE set track header flags has hex integer or as comma-separated list
	    of enable, movie, preview, size_ar keywords (use tkhd+=FLAGS to  add
	    and tkhd-=FLAGS to remove)

     disable
	    SE	disable  imported  track(s),  use disable=no to force enabling a
	    disabled track

     group (int)
	    SE add the track as part of the G alternate group. If G  is  0,  the
	    first available GroupID will be picked

     fps (string)
	    S same as .I fps

     rap
	    DS import only RAP samples

     refs
	    DS import only reference pictures

     trailing
	    keep trailing 0-bytes in AVC/HEVC samples

     agg (int)
	    X same as .I agg

     dref
	    XC same as .I dref

     keep_refs
	    C keep track reference when importing a single track

     nodrop
	    same as .I no-drop

     packed
	    X same as .I packed

     sbr
	    same as .I sbr

     sbrx
	    same as .I sbrx

     ovsbr
	    same as .I ovsbr

     ps
	    same as .I ps

     psx
	    same as .I psx

     asemode (string)
	    XS set the mode to create the AudioSampleEntry. Value can be:
	      *  v0-bs:  use MPEG AudioSampleEntry v0 and the channel count from
	    the bitstream (even if greater than 2) - default
	      * v0-2: use MPEG AudioSampleEntry v0  and  the  channel  count  is
	    forced to 2
	      *  v1: use MPEG AudioSampleEntry v1 and the channel count from the
	    bitstream
	      * v1-qt: use QuickTime Sound Sample Description Version 1 and  the
	    channel count from the bitstream (even if greater than 2). This will
	    also  trigger  using  alis	data references instead of url, even for
	    non-audio tracks

     audio_roll (int)
	    S add a roll sample group with roll_distance N for audio tracks

     roll (int)
	    S add a roll sample group with roll_distance N

     proll (int)
	    S add a preroll sample group with roll_distance N

     mpeg4
	    X same as .I mpeg4 option

     nosei
	    discard all SEI messages during import

     svc
	    import SVC/LHVC with explicit signaling (no AVC base compatibility)

     nosvc
	    discard SVC/LHVC data when importing

     svcmode (string)
	    DS set SVC/LHVC import mode. Value can be:
	      * split: each layer is in its own track
	      * merge: all layers are merged in a single track
	      * splitbase: all layers are merged in a track, and the base in an-
	    other
	      * splitnox: each layer is in its own track, and no extractors  are
	    written
	      *  splitnoxib:  each  layer is in its own track, no extractors are
	    written, using inband param set signaling

     temporal (string)
	    DS set HEVC/LHVC temporal sublayer import mode. Value can be:
	      * split: each sublayer is in its own track
	      * splitbase: all sublayers are merged in a  track,  and  the  HEVC
	    base in another
	      *  splitnox: each layer is in its own track, and no extractors are
	    written

     subsamples
	    add SubSample information for AVC+SVC

     deps
	    import sample dependency information for AVC and HEVC

     ccst
	    S add default HEIF ccst box to visual sample entry

     forcesync
	    SE force non IDR samples with I slices (OpenGOP or GDR) to be marked
	    as sync points
	    Warning: RESULTING FILE IS NOT COMPLIANT WITH THE SPEC but will  fix
	    seeking in most players

     xps_inband
	    XC	set xPS inband for AVC/H264 and HEVC (for reverse operation, re-
	    import from raw media)

     xps_inbandx
	    XC same as xps_inband and also keep first xPS in sample description

     au_delim
	    keep AU delimiter NAL units in the imported file

     max_lid (int)
	    set HEVC max layer ID to be imported to N (by  default  imports  all
	    layers)

     max_tid (int)
	    set HEVC max temporal ID to be imported to N (by default imports all
	    temporal sublayers)

     tiles
	    S add HEVC tiles signaling and NALU maps without splitting the tiles
	    into different tile tracks

     split_tiles
	    DS	split  HEVC  tiles  into different tile tracks, one tile (or all
	    tiles of one slice) per track

     negctts
	    S use negative CTS-DTS offsets (ISO4 brand). Use negctts=no to force
	    using positive offset on existing track

     chap
	    SE specify the track is a chapter track

     chapter (string)
	    SE add a single chapter (old nero format) with  given  name  lasting
	    the entire file

     chapfile (string)
	    SE add a chapter file (old nero format)

     layout (string)
	    SE	specify  the track layout as WxH[xXxY][xLAYER]. If W (resp H) is
	    0, the max width (resp height) of the tracks in the file are used

     rescale (int)
	    S force media timescale to TS  (int or fraction) and change the  me-
	    dia duration

     sampdur (int)
	    S  force  all  samples  duration  (D)  or sample durations and media
	    timescale (D/TS), used to patch CFR files with broken timings

     timescale (int)
	    S set imported media timescale to TS

     moovts (int)
	    SE set movie timescale to TS.  A  negative	value  picks  the  media
	    timescale of the first track imported

     noedit
	    XS do not set edit list when importing B-frames video tracks

     rvc (string)
	    S set RVC configuration for the media

     fmt (string)
	    override  format  detection with given format - disable data probing
	    and force ext option on source

     profile (int)
	    S override AVC profile. Integer value, or high444,	high,  extended,
	    main, baseline

     level (int)
	    S  override  AVC level, if value < 6, interpreted as decimal expres-
	    sion

     compat (int)
	    S force the profile compatibility flags for the H.264 content

     novpsext
	    remove VPS extensions from HEVC VPS

     keepav1t
	    keep AV1 temporal delimiter OBU in samples,  might	help  if  source
	    file had losses

     dlba (string)
	    S force DolbyAtmos mode for EAC3. Value can be
	    * no: disable Atmos signaling
	    * auto: use Atmos signaling from first sample
	    * N: force Atmos signaling using compatibility type index N

     font (string)
	    specify font name for text import (default Serif)

     size (int)
	    specify font size for text import (default 18)

     text_layout (string)
	    specify the track text layout as WxHxXxY
	      *  if W (resp H) = 0: the max width (resp height) of the tracks in
	    the file are used
	      * if Y=-1: the layout is moved to the bottom of the track area
	      * X and Y can be omitted: :layout=WxH

     swf-global
	    all SWF defines are placed in first scene replace rather  than  when
	    needed

     swf-no-ctrl
	    use a single stream for movie control and dictionary (this will dis-
	    able ActionScript)

     swf-no-text
	    remove all SWF text

     swf-no-font
	    remove all embedded SWF Fonts (local playback host fonts used)

     swf-no-line
	    remove all lines from SWF shapes

     swf-no-grad
	    remove all gradients from SWF shapes

     swf-quad
	    use quadratic bezier curves instead of cubic ones

     swf-xlp
	    support for lines transparency and scalability

     swf-ic2d
	    use indexed curve 2D hardcoded proto

     swf-same-app
	    appearance nodes are reused

     swf-flatten (number)
	    complementary angle below which 2 lines are merged, 0 means no flat-
	    tening

     kind (string)
	    SE set kind for the track as schemeURI=value

     txtflags (int)
	    set  display  flags (hexa number) of text track. Use txtflags+=FLAGS
	    to add flags and txtflags-=FLAGS to remove flags

     rate (int)
	    force average rate and max rate to VAL (in bps) in btrt box.  If  0,
	    removes btrt box

     stz2
	    S use compact size table (for low-bitrates)

     bitdepth (int)
	    set bit depth to VAL for imported video content (default is 24)

     colr (string)
	    S  set  color profile for imported video content. Value is formatted
	    as:
	      * nclc,p,t,m: with p colour primary (int or  string),  t	transfer
	    characteristics  (int  or string) and m matrix coef (int or string),
	    cf -h cicp
	      * nclx,p,t,m,r: same as nclx with r full range flag  (yes,  on  or
	    no, off)
	      *  prof,path:  with  path  indicating  the file containing the ICC
	    color profile
	      * rICC,path: with path indicating  the  file  containing	the  re-
	    stricted ICC color profile
	      * 'none': removes color info

     hdr (string)
	    S set HDR info on track (see .I -hdr ), 'none' removes HDR info

     dvp,-dv-profile (string)
	    S set the Dolby Vision profile on imported track
	    - Profile is an integer, or none to remove DV signaling
	    - Profile can be suffixed with compatibility ID, e.g. 5.hdr10
	    -  Allowed compatibility ID are none, hdr10, bt709, hlg709, hlg2100,
	    bt2020, brd, or integer value as per DV spec
	    - Profile can be prefixed with 'f' to force DV codec type signaling,
	    e.g. f8.2

     fullrange (string)
	    S force the video fullrange type in VUI  for  the  AVC|H264  content
	    (value yes, on or no, off)

     videofmt (string)
	    S force the video format in VUI for AVC|H264 and HEVC content, value
	    can be component, pal, ntsc, secam, mac, undef

     colorprim (string)
	    S  force  the  colour primaries in VUI for AVC|H264 and HEVC (int or
	    string, cf -h cicp)

     colortfc (string)
	    S force transfer characteristics in VUI for AVC|H264 and  HEVC  (int
	    or string, cf -h cicp)

     colormx (string)
	    S  force  the  matrix  coefficients in VUI for the AVC|H264 and HEVC
	    content (int or string, cf -h cicp)

     tc (string)
	    SE inject a single QT timecode. Value is formatted as:
	      * [d]FPS[/FPS_den],h,m,s,f[,framespertick]:  optional  drop  flag,
	    framerate (integer or fractional), hours, minutes, seconds and frame
	    number
	      *  : d is an optional flag used to indicate that the counter is in
	    drop-frame format
	      * : the framespertick is optional and  defaults  to  round(framer-
	    ate); it indicates the number of frames per counter tick

     edits (string)
	    SE override edit list, same syntax as .I -edits

     lastsampdur (string)
	    S set duration of the last sample. Value is formatted as:
	      * no value: use the previous sample duration
	      * integer: indicate the duration in milliseconds
	      * N/D: indicate the duration as fractional second

     ID (int)
	    SE set target ID
	      - a value of 0 (default) will try to keep source track ID
	      - a value of -1 will ignore source track ID
	      -  other	value will try to set track ID to this value if no other
	    track with same ID is present

     tkgp (string)
	    SE assign track group to track. Value is formatted	as  TYPE,N  with
	    TYPE the track group type (4CC) and N the track group ID. A negative
	    ID removes from track group ID -N

     tkidx (string)
	    SE set track position in track list, 1 being first track in file

     extk
	    CE add track as external track

     times (string)
	    SE	modify timestamps using timestamp file specified in value. Time-
	    stamp file is formatted as:
	      - a line starting with # is a comment, in which timescale=V can be
	    used to set timescale (1000 by default)
	      - empty lines are ignored
	      - one line per sample in decode order, formated as cts or dts cts

     stats,-fstat
	    C print filter session stats after import

     graph,-fgraph
	    C print filter session graph after import

     sopt:[OPTS]
	    set OPTS as additional arguments to source filter. OPTS can  be  any
	    usual filter argument, see filter doc `gpac -h doc`

     dopt:[OPTS]
	    X  set  OPTS as additional arguments to destination filter. OPTS can
	    be any usual filter argument, see filter doc `gpac -h doc`

     @f1[:args][@fN:args]
	    set a filter chain to insert before the multiplexer. Each filter  in
	    the  chain is formatted as a regular filter, see filter doc `gpac -h
	    doc`. A @@ separator starts a new chain (see DASH  help).  The  last
	    filter in each chain shall not have any ID specified

	    Note: sopt, dopt and @f must be placed after all other options.

Global import options
     -add (string)
	    add  given file tracks to file. Multiple inputs can be specified us-
	    ing +, e.g. -add url1+url2

     -cat (string)
	    concatenate given file samples to file, creating tracks  if  needed.
	    Multiple inputs can be specified using +, e.g/ -cat url1+url2.
	    Note: This aligns initial timestamp of the file to be concatenated

     -catx (string)
	    same  as  .I cat but new tracks can be imported before concatenation
	    by specifying +ADD_COMMAND where ADD_COMMAND is  a	regular  .I  add
	    syntax

     -catpl (string)
	    concatenate  files	listed	in the given playlist file (one file per
	    line, lines starting with # are comments).
	    Note: Each listed file is concatenated as if called with -cat

     -unalign-cat
	    do not attempt to align timestamps of samples in-between tracks

     -force-cat
	    skip media configuration check when concatenating file.
	    Warning: THIS MAY BREAK THE CONCATENATED TRACK(S)

     -keep-sys
	    keep all MPEG-4 Systems info when using .I add and .I cat (only used
	    when adding IsoMedia files)

     -dref
	    keep media data in original file using data referencing. The result-
	    ing file only contains the	meta-data  of  the  presentation  (frame
	    sizes,  timing,  etc...)  and  references media data in the original
	    file. This is extremely useful when developing  content,  since  im-
	    porting and storage of the MP4 file is much faster and the resulting
	    file much smaller.
	    Note:  Data  referencing  may fail on some files because it requires
	    the framed data (e.g. an IsoMedia sample) to be  continuous  in  the
	    original  file, which is not always the case depending on the origi-
	    nal interleaving or bitstream format (AVC or HEVC  cannot  use  this
	    option)

     -no-drop,-nodrop
	    force constant FPS when importing AVI video

     -packed
	    force  packed  bitstream  when  importing raw MPEG-4 part 2 Advanced
	    Simple Profile

     -sbr
	    backward compatible signaling of AAC-SBR

     -sbrx
	    non-backward compatible signaling of AAC-SBR

     -ps
	    backward compatible signaling of AAC-PS

     -psx
	    non-backward compatible signaling of AAC-PS

     -ovsbr
	    oversample SBR import (SBR AAC, PS AAC and oversampled SBR cannot be
	    detected at import time)

     -fps (string)
	    force frame rate for video and SUB subtitles  import  to  the  given
	    value, expressed as a number, as TS-inc or TS/inc.
	    Note:  For raw H263 import, default FPS is 15, otherwise 25. This is
	    accepted for ISOBMFF import but :rescale option should be preferred

     -mpeg4
	    force MPEG-4 sample descriptions  when  possible.  For  AAC,  forces
	    MPEG-4 AAC signaling even if MPEG-2

     -agg (int)
	    aggregate  N audio frames in 1 sample (3GP media only, maximum value
	    is 15)

Hinting Options
     IsoMedia hinting consists in creating special tracks in the file that  con-
     tain  transport  protocol	specific information and optionally multiplexing
     information. These tracks are then used by the server to create the  actual
     packets being sent over the network, in other words they provide the server
     with hints on how to build packets, hence their names hint tracks.
     MP4Box  supports  creation of hint tracks for RTSP servers supporting these
     such as QuickTime Streaming Server, DarwinStreaming Server or  3GPP-compli-
     ant RTSP servers.
     Note:  GPAC  streaming  tools  rtp  output  and rtsp server do not use hint
     tracks, they use on-the-fly packetization from any media sources, not  just
     MP4

     Options:

     -hint
	    hint the file for RTP/RTSP

     -mtu (int, default: 1450)
	    specify  RTP  MTU  (max  size)  in bytes (this includes 12 bytes RTP
	    header)

     -copy
	    copy media data to hint  track  rather  than  reference  (speeds  up
	    server but takes much more space)

     -multi [maxptime]
	    enable  frame concatenation in RTP packets if possible (with max du-
	    ration 100 ms or maxptime ms if given)

     -rate (int, default: 90000)
	    specify rtp rate in Hz when no default for payload

     -mpeg4
	    force MPEG-4 generic payload whenever possible

     -latm
	    force MPG4-LATM transport for AAC streams

     -static
	    enable static RTP payload IDs whenever possible (by default, dynamic
	    payloads are always used)

     -add-sdp (string)
	    add given SDP string to movie (string) or track (tkID:string),  tkID
	    being the track ID or the hint track ID

     -no-offset
	    signal  no	random offset for sequence number and timestamp (support
	    will depend on server)

     -unhint
	    remove all hinting information from file

     -group-single
	    put all tracks in a single hint group

     -ocr
	    force all MPEG-4 streams to be synchronized (MPEG-4 Systems only)

     -rap
	    signal random access points in RTP packets (MPEG-4 Systems)

     -ts
	    signal AU Time Stamps in RTP packets (MPEG-4 Systems)

     -size
	    signal AU size in RTP packets (MPEG-4 Systems)

     -idx
	    signal AU sequence numbers in RTP packets (MPEG-4 Systems)

     -iod
	    prevent systems tracks embedding in IOD (MPEG-4 Systems),  not  com-
	    patible with .I -isma

MPEG-4 Scene Encoding Options
   General considerations
     MP4Box  supports  encoding and decoding of of BT, XMT, VRML and (partially)
     X3D formats int MPEG-4 BIFS, and encoding and decoding of XSR and SVG  into
     MPEG-4 LASeR
     Any media track specified through a MuxInfo element will be imported in the
     resulting MP4 file.
     See  https://wiki.gpac.io/Howtos/scenecoding/MPEG-4-BIFS-Textual-Format and
     related pages.

   Scene Random Access
     MP4Box can encode BIFS or LASeR streams and insert random access points  at
     a	given  frequency.  This  is useful when packaging content for broadcast,
     where users will not turn in the scene at the same time. In  MPEG-4  termi-
     nology, this is called the scene carousel.## BIFS Chunk Processing
     The  BIFS chunk encoding mode allows encoding single BIFS access units from
     an initial context and a set of commands.
     The generated AUs are raw BIFS (not SL-packetized), in files  called  FILE-
     ESID-AUIDX.bifs, with FILE the basename of the input file.
     Commands  with  a timing of 0 in the input will modify the carousel version
     only (i.e. output context).
     Commands with a timing different from 0 in the input will generate new AUs.

     Options:

     -mp4
	    specify input file is for BIFS/LASeR encoding

     -def
	    encode DEF names in BIFS

     -sync (int)
	    force BIFS sync sample generation every given time in ms (cannot  be
	    used with .I shadow or .I carousel )

     -shadow (int)
	    force  BIFS  sync  shadow  sample  generation every given time in ms
	    (cannot be used with .I sync or .I carousel )

     -carousel (int)
	    use BIFS carousel (cannot be used with .I sync or .I shadow )

     -sclog
	    generate scene codec log file if available

     -ms (string)
	    import tracks from the given file

     -ctx-in (string)
	    specify initial context (MP4/BT/XMT) file for chunk processing.  In-
	    put file must be a commands-only file

     -ctx-out (string)
	    specify  storage of updated context (MP4/BT/XMT) file for chunk pro-
	    cessing, optional

     -resolution (int)
	    resolution factor (-8 to 7, default 0) for LASeR encoding,	and  all
	    coordinates  are multiplied by 2^res before truncation (LASeR encod-
	    ing)

     -coord-bits (int)
	    number of bits used for encoding truncated coordinates (0 to 31, de-
	    fault 12) (LASeR encoding)

     -scale-bits (int)
	    extra bits used for encoding truncated scales (0 to  4,  default  0)
	    (LASeR encoding)

     -auto-quant (int)
	    resolution	is  given  as  if using .I resolution but coord-bits and
	    scale-bits are inferred (LASeR encoding)

     -global-quant (int)
	    resolution is given as if using .I resolution but  the  res  is  in-
	    ferred (BIFS encoding)

Encryption/Decryption Options
     MP4Box  supports  encryption  and decryption of ISMA, OMA and CENC content,
     see encryption filter `gpac -h cecrypt`.
     It requires a specific XML file called CryptFile, whose syntax is available
     at https://wiki.gpac.io/xmlformats/Common-Encryption
     Image files (HEIF) can also be crypted / decrypted, using CENC only.

     Options:

     -crypt (string)
	    encrypt the input file using the given CryptFile

     -decrypt (string)
	    decrypt the input file, potentially using the  given  CryptFile.  If
	    CryptFile  is  not	given, will fail if the key management system is
	    not supported

     -set-kms tkID=kms_uri
	    change ISMA/OMA KMS location for a given track or for all tracks  if
	    all= is used

Meta and HEIF Options
     IsoMedia  files  can  be used as generic meta-data containers, for examples
     storing XML information and sample images for a movie. The  resulting  file
     may  not  always  contain	a  movie  as is the case with some HEIF files or
     MPEG-21 files.

     These information can be stored at the file root level, as is the case  for
     HEIF/IFF  and  MPEG-21  file  formats, or at the movie or track level for a
     regular movie.

     -set-meta ABCD[:tk=tkID]
	    set meta box type, with ABCD the four char meta type (NULL or  0  to
	    remove meta)
	    * tk not set: use root (file) meta
	    * tkID == 0: use moov meta
	    * tkID != 0: use meta of given track

     -add-item (string)
	    add resource to meta, with parameter syntax file_path[:opt1:optN]
	    * file_path `this` or `self`: item is the file itself
	    * tk=tkID: meta location (file, moov, track)
	    * name=str: item name, none if not set
	    * type=itype: item 4cc type (not needed if mime is provided)
	    * mime=mtype: item mime type, none if not set
	    * encoding=enctype: item content-encoding type, none if not set
	    * id=ID: item ID (strictly positive integer)
	    * ref=4cc,id: reference of type 4cc (such as 'dimg', 'auxl', 'cdsc')
	    to an other item (can be set multiple times)
	    *  group=4cc,id: indicate the type 4cc (such as 'altr') and id of an
	    entity group this item belongs to
	    * replace: replace existing item by new item

     -add-image (string)
	    add the given  file  as  HEIF  image  item,  with  parameter  syntax
	    file_path[:opt1:optN].  If	filepath is omitted, source is the input
	    MP4 file
	    * name, id, ref, group: see .I add-item
	    * primary: indicate that this item should be the primary item
	    * time=t[-e][/i]: use the next sync sample after time t  (float,  in
	    sec, default 0). A negative time imports ALL intra frames as items
	     -	If  e  is set (float, in sec), import all sync samples between t
	    and e
	     - If i is set (float, in sec), sets time increment between  samples
	    to import
	    *  split_tiles:  for  an  HEVC tiled image, each tile is stored as a
	    separate item
	    * image-size=wxh: force setting the image size and ignoring the bit-
	    stream info, used for grid, overlay and identity derived images also
	    * rotation=a: set the rotation angle for this image to 90*a  degrees
	    anti-clockwise
	    * mirror-axis=axis: set the mirror axis: vertical, horizontal
	    * clap=Wn,Wd,Hn,Hd,HOn,HOd,VOn,VOd: see track clap
	    * image-pasp=axb: force the aspect ratio of the image
	    * image-pixi=(a|a,b,c): force the bit depth (1 or 3 channels)
	    * hidden: indicate that this image item should be hidden
	    * icc_path: path to icc data to add as color info
	    *  alpha:  indicate  that  the  image  is an alpha image (should use
	    ref=auxl also)
	    * depth: indicate that the	image  is  a  depth  image  (should  use
	    ref=auxl also)
	    * it=ID: indicate the item ID of the source item to import
	    *  itp=ID:	same  as  it= but copy over all properties of the source
	    item
	    * tk=tkID: indicate the track ID of the source sample.  If	0,  uses
	    the first video track in the file
	    * samp=N: indicate the sample number of the source sample
	    * ref: do not copy the data but refer to the final sample/item loca-
	    tion, ignored if filepath is set
	    * agrid[=AR]: creates an automatic grid from the image items present
	    in	the  file, in their declaration order. The grid will try to have
	    AR aspect ratio if specified (float), or the  aspect  ratio  of  the
	    source  otherwise.	The  grid will be the primary item and all other
	    images will be hidden
	    * av1_op_index: select the AV1 operating point to use via a1op box
	    * replace: replace existing image by new image, keeping props listed
	    in keep_props
	    * keep_props=4CCs: coma-separated list of properties types	to  keep
	    when replacing the image, e.g. keep_props=auxC
	    * auxt=URN: mark image as auxiliary using given URN
	    *  auxd=FILE:  use	data  from FILE as auxiliary extensions (cf auxC
	    box)
	    - any other options will be passed as options to the media importer,
	    see .I -add

     -add-derived-image (string)
	    create an image grid, overlay or identity item, with parameter  syn-
	    tax :type=(grid|iovl|iden)[:opt1:optN]
	    *  image-grid-size=rxc:  set  the  number of rows and columns of the
	    grid
	    * image-overlay-offsets=h,v[,h,v]*: set the horizontal and	vertical
	    offsets of the images in the overlay
	    *  image-overlay-color=r,g,b,a:  set the canvas color of the overlay
	    [0-65535]
	    - any other options from .I add-image can be used

     -rem-item,-rem-image item_ID[:tk=tkID]
	    remove resource from meta

     -set-primary item_ID[:tk=tkID]
	    set item as primary for meta

     -set-xml xml_file_path[:tk=tkID][:binary]
	    set meta XML data

     -rem-xml [tk=tkID]
	    remove meta XML data

     -dump-xml file_path[:tk=tkID]
	    dump meta XML to file

     -dump-item item_ID[:tk=tkID][:path=fileName]
	    dump item to file

     -package (string)
	    package input XML file into an ISO container, all  media  referenced
	    except hyperlinks are added to file

     -mgt (string)
	    package input XML file into an MPEG-U widget with ISO container, all
	    files  contained in the current folder are added to the widget pack-
	    age

SWF Importer Options
     MP4Box can import simple Macromedia Flash files (".SWF")
     You can specify a SWF input file with '-bt', '-xmt' and '-mp4' options

     Options:

     -global
	    all SWF defines are placed in first scene replace rather  than  when
	    needed

     -no-ctrl
	    use a single stream for movie control and dictionary (this will dis-
	    able ActionScript)

     -no-text
	    remove all SWF text

     -no-font
	    remove all embedded SWF Fonts (local playback host fonts used)

     -no-line
	    remove all lines from SWF shapes

     -no-grad
	    remove all gradients from swf shapes

     -quad
	    use quadratic bezier curves instead of cubic ones

     -xlp
	    support for lines transparency and scalability

     -ic2d
	    use indexed curve 2D hardcoded proto

     -same-app
	    appearance nodes are reused

     -flatten (number)
	    complementary angle below which 2 lines are merged, value 0 means no
	    flattening

Tagging support
     Tags are specified as a colon-separated list tag_name=tag_value[:tag2=val2]
     Setting a tag with no value or value NULL removes the tag.
     Special tag value clear (or reset) removes all tags.
     Special tag value cust indicates a custom domain tag, in which case the tag
     value must start with DOMAIN,MEAN,.
     Example
     -itags cust='com.apple.iTunes,iTunEXTC,My Tag Value'

     The DOMAIN and/or NAME strings can be empty.
     Unsupported  tags	can  be  added	using their four character code as a tag
     name, and string value will be assumed.
     If the tag name length is 3, the prefix 0xA9 is used  to  create  the  four
     character code.

     Tags  can	also  be loaded from a text file using -itags filename. The file
     must be in UTF8 with:
     - lines starting with tag_name=value specify the start of a tag
     - other lines specify the remainder of the last declared tag

     If tag name starts with WM/, the tag is added to Xtra box (WMA tag,  string
     only).

   QT metadata key
     The tag is added as a QT metadata key if:
     - tag_name starts with QT/
     - or tag_name is not recognized and longer than 4 characters

     The  tag_name  can  optionally  be  prefixed with HDLR@, indicating the tag
     namespace 4CC, the default namespace being mdta.
     The tag_value can be prefixed with:
     * S: force string encoding (must be placed first) instead	of  parsing  the
     tag value
     * b: use 8-bit encoding for signed or unsigned int
     * s: use 16-bit encoding for signed or unsigned int
     * l: use 32-bit encoding for signed or unsigned int
     * L: use 64-bit encoding for signed or unsigned int
     * f: force float encoding for numbers
     Numbers are converted by default and stored in variable-size mode.
     To  force	a  positive integer to use signed storage, add + in front of the
     number.
     Example
     -tags io.gpac.some_tag=s+32

     This will force storing value 32 in signed 16 bit format.
     The tag_value can also be formatted as:
     * XxY@WxH: a rectangle type
     * XxY: a point type
     * W@H: a size type
     * A,B,C,D,E,F,G,H,I: a 3x3 matrix
     * FNAME: data is loaded from FNAME, type set to jpeg or png if needed

   Supported tag names (name, value, type, aliases)
     title (A(C)nam) string (alias name)
     artist (A(C)ART) string
     album_artist (aART) string (alias albumArtist)
     album (A(C)alb) string
     group (A(C)grp) string (alias grouping)
     composer (A(C)com) string
     writer (A(C)wrt) string
     conductor (A(C)con) string
     comment (A(C)cmt) string (alias comments)
     genre (gnre) string (ID3 genre tag)
     created (A(C)day) string (alias releaseDate)
     track (A(C)trk) string
     tracknum (trkn) fraction (syntax: A/B or A, B will be 0)
     disk (disk) fraction (syntax: A/B or A, B will be 0)
     tempo (tmpo) integer
     compilation (cpil) bool (yes or no)
     show (tvsh) string (alias tvShow)
     episode_id (tven) string (alias tvEpisodeID)
     season (tvsn) integer (alias tvSeason)
     episode (tves) integer (alias tvEPisode)
     network (tvnn) string (alias tvNetwork)
     sdesc (desc) string (alias description)
     ldesc (ldes) string (alias longDescription)
     lyrics (A(C)lyr) string
     sort_name (sonm) string (alias sortName)
     sort_artist (soar) string (alias sortArtist)
     sort_album_artist (soaa) string (alias sortAlbumArtist)
     sort_album (soal) string (alias sortAlbum)
     sort_composer (soco) string (alias sortComposer)
     sort_show (sosn) string (alias sortShow)
     cover (covr) file path (alias artwork)
     copyright (cprt) string
     tool (A(C)too) string (alias encodingTool)
     encoder (A(C)enc) string (alias encodedBy)
     pdate (purd) string (alias purchaseDate)
     podcast (pcst) bool (yes or no)
     url (purl) string (alias podcastURL)
     keywords (kyyw) string
     category (catg) string
     hdvideo (hdvd) integer
     media (stik) integer (alias mediaType)
     rating (rtng) integer (alias contentRating)
     gapless (pgap) bool (yes or no)
     art_director (A(C)ard) string
     arranger (A(C)arg) string
     lyricist (A(C)aut) string
     acknowledgement (A(C)cak) string
     song_description (A(C)des) string
     director (A(C)dir) string
     equalizer (A(C)equ) string
     liner (A(C)lnt) string
     record_company (A(C)mak) string
     original_artist (A(C)ope) string
     phono_rights (A(C)phg) string
     producer (A(C)prd) string
     performer (A(C)prf) string
     publisher (A(C)pub) string
     sound_engineer (A(C)sne) string
     soloist (A(C)sol) string
     credits (A(C)src) string
     thanks (A(C)thx) string
     online_info (A(C)url) string
     exec_producer (A(C)xpd) string
     genre (A(C)gen) string (ID3 genre tag)
     location (A(C)xyz) string

Live Scene Encoder Options
     The options shall be specified as opt_name=opt_val.
     Options:

     -live
	    enable live BIFS/LASeR encoder

     -dst (string)
	    destination IP

     -port (int, default: 7000)
	    destination port

     -mtu (int, default: 1450)
	    path MTU for RTP packets

     -ifce (string)
	    IP address of the physical interface to use

     -ttl (int, default: 1)
	    time to live for multicast packets

     -sdp (string, default: session.sdp)
	    output SDP file

     -dims
	    turn on DIMS mode for SVG input

     -no-rap
	    disable RAP sending and carousel generation

     -src (string)
	    source of scene updates

     -rap (int)
	    duration in ms of base carousel; you can specify the RAP period of a
	    single ESID (not in DIMS) using ESID=X:time

	    Runtime options:
	    * q: quits
	    * u: inputs some commands to be sent
	    * U: same as u but signals the updates as critical
	    * e: inputs some commands to be sent without being aggregated
	    * E: same as e but signals the updates as critical
	    * f: forces RAP sending
	    * F: forces RAP regeneration and sending
	    * p: dumps current scene

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

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

SEE ALSO
     gpac(1)

MP4Box				      2019			       MP4Box(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=mp4box&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help