简介
MP4Box是GPAC的多媒体包,
它可以被用来对诸如AVI, MPG, TS, 但更多地是对于ISO媒体文件(如MP4, 3GP)进行操作。
简单地说MP4Box可以被用来:
对诸如MP4, 3GP之类的ISO文件进行操作,如:添加、移除、混流
执行流的加密操作
将元数据附着到单独的流上去
MP4Box可以对ISO媒体文件的已经存在的内容进行重新封装,
值得注意的是,MP4Box并不会重新编码视频、音频或者是静态图像。
它的官网:
http://gpac.wp.mines-telecom.fr/
http://gpac.wp.mines-telecom.fr/mp4box/
一、下载
有两个包需要下载,一个是master包,一个是lib包
master包下载:
$ wget http://nchc.dl.sourceforge.net/sourceforge/gpac/gpac-0.4.5.tar.gz
lib包下载:
$ wget http://downloads.sourceforge.net/gpac/gpac_extra_libs-0.4.5.tar.gz
二、安装
1. 安装zlib
下载链接:
http://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz/download?use_mirror=heanet&download=
$ tar -zxvf zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ ./configure
$ make
$ make install
2. 安装gpac
$ tar -zxvf gpac-0.4.5.tar.gz
$ tar -zxvf gpac_extra_libs-0.4.5.tar.gz
$ cd gpac_extra_libs
$ cp -r * ../gpac/extra_lib
$ cd ../gpac
# 先安装zlib
$ cd ./extra_lib/zlib
$ ./configure
$ make && make install
$ cd ../../
$ chmod +x configure
$ ./configure
$ make lib
$ make apps
$ make install-lib
$ make install
3. 出现错误:
make[1]: Leaving directory `/opt/.../gpac/src‘
make -C applications all
make[1]: Entering directory `/opt/.../gpac/applications‘
set -e; for i in mp4box mp4client testapps/mp4_streamer testapps/mp42ts generators ; do make -C $i all; done
make[2]: Entering directory `/opt/.../gpac/applications/mp4box‘
gcc -Wl --warn-common -o ../../bin/gcc/MP4Box main.o filedump.o fileimport.o -L../../bin/gcc -lgpac -lz
../../bin/gcc/libgpac.so: undefined reference to `[email protected]_1.2.3.3‘
../../bin/gcc/libgpac.so: undefined reference to `[email protected]_1.2.3.3‘
../../bin/gcc/libgpac.so: undefined reference to `[email protected]_1.2.3.3‘
collect2: ld returned 1 exit status
make[2]: *** [MP4Box] Error 1
make[2]: Leaving directory `/opt/.../gpac/applications/mp4box‘
make[1]: *** [apps] Error 2
make[1]: Leaving directory `/opt/.../gpac/applications‘
make: *** [apps] Error 2
3.1 检查是否安装 zlib 和 zlib-devel
[[email protected] ~]# rpm -qa | grep zlib
zlib-devel-1.2.3-7.el5
jzlib-demo-1.0.7-4jpp.1
jzlib-javadoc-1.0.7-4jpp.1
jzlib-1.0.7-4jpp.1
zlib-1.2.3-7.el5
备注:说明已安装 1.2.3 版本的 zlib,后来咨询了系统平台比较熟悉的同事,终于发现了问题。
问题是:系统安装了多个版本的 zlib。
?
3.2 查看 1.2.7 版本的 zlib
[[email protected] ~]# ll /usr/local/include/zlib.h
-rw-r--r-- 1 root root 86717 Nov 6 2012 /usr/local/include/zlib.h
[[email protected] ~]#
[[email protected] ~]# head -n 5 /usr/local/include/zlib.h
/* zlib.h -- interface of the ‘zlib‘ general purpose compression library
version 1.2.7, May 2nd, 2012
Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
3.3 查看 1.2.3 版本的 zlib
[[email protected] ~]# ll /usr/include/zlib.h
-rw-r--r-- 1 root root 66188 Jul 17 2012 /usr/include/zlib.h
[[email protected] ~]# head -n 5 /usr/include/zlib.h
/* zlib.h -- interface of the ‘zlib‘ general purpose compression library
version 1.2.3, July 18th, 2005
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
备注:可见系统安装了两个版本的 zlib,而且 1.2.7 版本通过 "rpm -qa " 命令根本查不到,应该是
源码安装的,并且 /usr/local 目录的优先级更高,所以在编译时默认找的的 1.2.7 版本的 zlib。
故编译通不过。
3.4 解决方法:
1 临时将 /usr/local/include/zlib.h 移动其它地方
[[email protected] ~]# mv /usr/local/include/zlib.h /root
2 cd /opt/soft_bak/postgresql-9.3beta1 && make clean
3 configure
4 gmake world ( 这时终于不报这个错了。)
5 把文件 /root/zlib.h 移回去
[[email protected] ~]# mv /root/zlib.h /usr/local/include/
三、静态编译
$ svn checkout http://svn.code.sf.net/p/gpac/code/trunk gpac-code
$ cd gpac-code
$ cp gpac_extra_libs/* gpac/extar_lib
$ cd gpac
$ ./run_configure.sh
$ ./configure --static-mp4box
$ make
四、使用
4.1 常用功能
通用选项 mp4box -h general
-tmp dir 指定生成临时文件的目录
-inter duration 将chunk的media数据按指定间隔进行交错,用于优化流传输或文件访问,
所有meta数据放在文件头部,允许在下载的内容内回放。
默认交错0.5s,若指定为0,则所有meta数据存在于文件头。
-tight 对媒体轨道执行基于采样的交错(生成文件较大)。在服务器侧为减少磁盘查找时间,用于hint文件时。
-flat 强制采用平坦存储,媒体数据不进行交错,meta数据在于文件结束。当使用-add创建新文件时,将不会创建临时文件
-frag ms 对媒体文件进行分段,分的小段中含有meta及media数据交错而不是存在文件开始或结束。分段将禁止交错。
-isma 把文件处理为isma规范格式
-3gp 移除mpeg4系统信息,转换成3gp规范,保留音、视、文本轨道等3gp支持的
-brand ABCD 设置主brand
-ab ABCD 设置从brand
-rb ABCD 移除从brand
-rem trackID 从文件中移除轨道
-par trackID=PAR
-lang [trackID=lang] 为轨道指定语言,若没有指定ID,则为全部轨道
-delay trackID=time 设置指定轨道延迟时间,单位为微秒
-name trackID=name 设置指定轨道的处理名,处理名有时用来识别内容
-cprt string: 为文件增加版权信息
-chap chap_file 将chap_fil中的chapter信息增加到目的文件中
4.2 使用示例
MP4BOX是MP4文件封装工具,仅支持命令行方式调用。
1. 支持的字幕封装参数的调用实例:
mp4box -add 1.srt:lang=zh:name=Caption:hdlr=sbtl:font="微软雅黑":size=22 -new 1.srt.mp4
2. 如果需要支持iPhone/iTouch/iPod/iPad等设备,可以添加参数“-ipod”:
mp4box -ipod -add 1.srt:lang=zh:name=Caption:hdlr=sbtl:font="微软雅黑":size=22 -new 1.srt.mp4
3. 其中,可以修改的部分用红色标出如下:
mp4box -ipod -add 1.srt:lang=zh:name=Caption:hdlr=sbtl:font="微软雅黑":size=22 -new 1.srt.mp4
4. 进行MP4文件的合并,最多支持20个分段合并
mp4box -cat seg1.mp4 -cat seg2.mp4 -cat seg3.mp4 -new merge.mp4
4.3 详细参数
General Options:
-strict-error exits after the first error is reported
-inter time_in_ms interleaves file data (track chunks of time_in_ms)
* Note 1: Interleaving is 0.5s by default
* Note 2: Performs drift checking accross tracks
* Note 3: a value of 0 disables interleaving
-old-inter time same as -inter but doesn‘t perform drift checking
-tight performs tight interleaving (sample based) of the file
* Note: reduces disk seek but increases file size
-flat stores file with all media data first, non-interleaved
-frag time_in_ms fragments file (track fragments of time_in_ms)
* Note: Always disables interleaving
-ffspace size inserts free space before moof in fragmented files
-out filename specifies output file name
* Note: By default input (MP4,3GP) file is overwritten
-tmp dirname specifies directory for temporary file creation
* Note: Default temp dir is OS-dependent
-write-buffer SIZE specifies write buffer in bytes for ISOBMF files
-no-sys removes all MPEG-4 Systems info except IOD (profiles)
* Note: Set by default whith ‘-add‘ and ‘-cat‘
-no-iod removes InitialObjectDescriptor from file
-isma rewrites the file as an ISMA 1.0 AV file
-ismax same as ‘-isma‘ and removes all clock references
-3gp rewrites as 3GPP(2) file (no more MPEG-4 Systems Info)
* Note 1: some tracks may be removed in the process
* Note 2: always on for *.3gp *.3g2 *.3gpp
-ipod rewrites the file for iPod
-psp rewrites the file for PSP devices
-brand ABCD[:v] sets major brand of file, with optional version
-ab ABCD adds given brand to file‘s alternate brand list
-rb ABCD removes given brand from file‘s alternate brand list
-cprt string adds copyright string to movie
-chap file adds chapter information contained in file
-set-track-id id1:id2 changes the id of a track from id1 to id2
-rem trackID removes track from file
-rap trackID removes all non-RAP samples from track
-enable trackID enables track
-disable trackID disables track
-new forces creation of a new destination file
-lang [tkID=]LAN sets track language. LAN is the BCP-47 code (eng, en-UK, ...)
-delay tkID=TIME sets track start delay in ms.
-par tkID=PAR sets visual track pixel aspect ratio (PAR=N:D or "none")
-name tkID=NAME sets track handler name
* NAME can indicate a UTF-8 file ("file://file name"
-itags tag1[:tag2] sets iTunes tags to file - more info: MP4Box -tag-list.
-split time_sec splits in files of time_sec max duration
* Note: this removes all MPEG-4 Systems media
-split-size size splits in files of max filesize kB. same as -splits.
* Note: this removes all MPEG-4 Systems media
-split-rap splits in files begining at each RAP. same as -splitr.
* Note: this removes all MPEG-4 Systems media
-split-chunk S:E extracts a new file from Start to End (in seconds). same as -splitx
* Note: this removes all MPEG-4 Systems media
-splitz S:E same as -split-chunk, but adjust the end time to be before the last RAP sample
* Note: this removes all MPEG-4 Systems media
-group-add fmt creates a new grouping information in the file. Format is
a colon-separated list of following options:
refTrack=ID: ID of the track used as a group reference.
If not set, the track will belong to the same group as the previous trackID specified.
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: ID of the track to add to this group.
*WARNING* Options modify state as they are parsed:
trackID=1:criteria=lang:trackID=2
is different from:
criteria=lang:trackID=1:trackID=2
-group-rem-track ID removes track from its group
-group-rem ID removes the track‘s group
-group-clean removes all group information from all tracks
-group-single puts all tracks in a single group
-ref id:XXXX:refID adds a reference of type 4CC from track ID to track refID
-keep-utc keeps UTC timing in the file after edit
Extracting Options:
-raw TrackID extracts track in raw format when supported
:output=FileName sets the output filename for this extraction
-raws TrackID extract each track sample to a file
* Note: "TrackID:N" extracts Nth sample
-nhnt TrackID extracts track in nhnt format
-nhml TrackID extracts track in nhml format (XML nhnt).
* Note: "-nhml TrackID:full" for full dump
-webvtt-raw TrackID extracts raw media track in WebVTT as metadata.
* Note: "-webvtt-raw TrackID:embedded" to include media data in the WebVTT file
-six TrackID extracts raw media track in experimental XML streaming instructions.
-single TrackID extracts track to a new mp4 file
-avi TrackID extracts visual track to an avi file
-qcp TrackID same as ‘-raw‘ but defaults to QCP file for EVRC/SMV
-aviraw TK extracts AVI track in raw format
$TK can be one of "video" "audio" "audioN"
-saf remux file to SAF multiplex
-dvbhdemux demux DVB-H file into IP Datagrams
* Note: can be used when encoding scene descriptions
-raw-layer ID same as -raw but skips SVC/MVC extractors when extracting
-diod extracts file IOD in raw format when supported
-grab-ts IP:port grabs TS over UDP or RTP at IP:port location to output TS file
-ifce IFCE indicates default ifce for grab operations
DASH Options:
-dash dur enables DASH-ing of the file(s) with a segment duration of DUR ms
Note: the duration of a fragment (subsegment) is set
using the -frag switch.
Note: for onDemand profile, sets duration of a subsegment
-frag time_in_ms Specifies a fragment duration of time_in_ms.
* Note: By default, this is the DASH duration
-out filename specifies output MPD file name.
-tmp dirname specifies directory for temporary file creation
* Note: Default temp dir is OS-dependent
-profile NAME specifies the target DASH profile: "onDemand",
"live", "main", "simple", "full",
"dashavc264:live", "dashavc264:onDemand"
* This will set default option values to ensure conformance to the desired profile
* Default profile is "full" in static mode, "live" in dynamic mode
Input media files to dash can use the following modifiers
"#trackID=N" only uses the track ID N from the source file
"#video" only uses the first video track from the source file
"#audio" only uses the first video track from the source file
":id=NAME" sets the representation ID to NAME
":period=NAME" sets the representation‘s period to NAME. Multiple periods may be used
period appear in the MPD in the same order as specified with this option
":bandwidth=VALUE" sets the representation‘s bandwidth to a given value
":xlink=VALUE" sets the xlink value for the period containing this element
only the xlink declared on the first rep of a period will be used
":role=VALUE" sets the role of this representation (cf DASH spec).
media with different roles belong to different adaptation sets.
":desc_p=VALUE" adds a descriptor at the Period level.
":desc_as=VALUE" adds a descriptor at the AdaptationSet level
two input files with different values will be in different AdaptationSet elements.
":desc_as_c=VALUE" adds a descriptor at the AdaptationSet level
value is ignored to created AdaptationSet elements.
":desc_rep=VALUE" adds a descriptor at the Representation level.
value is ignored to created AdaptationSet elements.
-rap segments begin with random access points
Note: segment duration may not be exactly what asked by
"-dash" since encoded video data is not modified
-frag-rap All fragments begin with random access points
Note: fragment duration may not be exactly what is asked by
"-frag" since encoded video data is not modified
-segment-name name sets the segment name for generated segments
If not set (default), segments are concatenated in output file
except in "live" profile where dash_%s is used
-segment-ext name sets the segment extension. Default is m4s, "null" means no extension
-segment-timeline Uses SegmentTimeline when generating segments. NOT SUPPORTED BY LIVE/CTX MODE YET.
-segment-marker MARK Adds a box of type ‘MARK‘ at the end of each DASH segment. MARK shall be a 4CC identifier
-base-url string sets Base url at MPD level. Can be used several times.
-mpd-title string sets MPD title.
-mpd-source string sets MPD source.
-mpd-info-url string sets MPD info url.
-cprt string adds copyright string to MPD
-dash-live[=F] dur generates a live DASH session using dur segment duration, optionnally writing live context to F
MP4Box will run the live session until ‘q‘ is pressed or a fatal error occurs.
-ddbg-live[=F] dur same as -dash-live without time regulation for debug purposes.
-dash-ctx FILE stores/restore DASH timing from FILE.
-dynamic uses dynamic MPD type instead of static.
-mpd-refresh TIME specifies MPD update time in seconds.
-time-shift TIME specifies MPD time shift buffer depth in seconds (default 0). Specify -1 to keep all files
-subdur DUR specifies maximum duration in ms of the input file to be dashed in LIVE or context mode.
NOTE: This does not change the segment duration: dashing stops once segments produced exceeded the duration.
-min-buffer TIME specifies MPD min buffer time in milliseconds
-ast-offset TIME specifies MPD AvailabilityStartTime offset in seconds. Default is 1 sec delay
-dash-scale SCALE specifies that timing for -dash and -frag are expressed in SCALE units per seconds
-mem-frags fragments will be produced in memory rather than on disk before flushing to disk
-pssh-moof stores PSSH boxes in first moof of each segments. By default PSSH are stored in movie box.
-sample-groups-traf stores sample group descriptions in traf (duplicated for each traf) rather than in moof. By default sample group descriptions are stored
in movie box.
Advanced Options, should not be needed when using -dash-profile:
-subsegs-per-sidx N sets the number of subsegments to be written in each SIDX box
If 0, a single SIDX box is used per segment
If -1, no SIDX box is used
-url-template uses SegmentTemplate instead of explicit sources in segments.
Ignored if segments are stored in the output file.
-daisy-chain uses daisy-chain SIDX instead of hierarchical. Ignored if frags/sidx is 0.
-single-segment uses a single segment for the whole file (OnDemand profile).
-single-file uses a single file for the whole file (default).
-bs-switching MODE sets bitstream switching to "inband" (default), "merge", "no" or "single" to test with single input.
-moof-sn N sets sequence number of first moof to N
-tfdt N sets TFDT of first traf to N in SCALE units (cf -dash-scale)
-no-frags-default disables default flags in fragments
-single-traf uses a single track fragment per moof (smooth streaming and derived specs may require this)
-dash-ts-prog N program_number to be considered in case of an MPTS input file.
Dumping Options
-stdb dumps/write to stdout and assumes stdout is opened in binary mode
-std dumps/write to stdout and try to reopen stdout in binary mode.
-info [trackID] prints movie info / track info if trackID specified
* Note: for non IsoMedia files, gets import options
-bt scene to bt format - removes unknown MPEG4 nodes
-xmt scene to XMT-A format - removes unknown MPEG4 nodes
-wrl scene VRML format - removes unknown VRML nodes
-x3d scene to X3D/XML format - removes unknown X3D nodes
-x3dv scene to X3D/VRML format - removes unknown X3D nodes
-lsr scene to LASeR format
-diso scene IsoMedia file boxes in XML output
-drtp rtp hint samples structure to XML output
-dts prints sample timing to text output
-dnal trackID prints NAL sample info of given track
-sdp dumps SDP description of hinted file
-dcr ISMACryp samples structure to XML output
-dump-cover Extracts cover art
-dump-chap Extracts chapter file
-ttxt Converts input subtitle to GPAC TTXT format
-ttxt TrackID Dumps Text track to GPAC TTXT format
-srt Converts input subtitle to SRT format
-srt TrackID Dumps Text track to SRT format
-stat generates node/field statistics for scene
-stats generates node/field statistics per MPEG-4 Access Unit
-statx generates node/field statistics for scene after each AU
-hash generates SHA-1 Hash of the input file
Importing Options
File importing syntax:
"#video" "#audio" base import for most AV files
"#trackID=ID" track import for IsoMedia and other files
"#pid=ID" stream import from MPEG-2 TS
":dur=D" imports only the first D seconds
":lang=LAN" sets imported media language code
":delay=delay_ms" sets imported media initial delay in ms
":par=PAR" sets visual pixel aspect ratio (PAR=Num:Den)
":name=NAME" sets track handler name
":ext=EXT" overrides file extension when importing
":hdlr=code" sets track handler type to the given code point (4CC)
":disable" imported track(s) will be disabled
":group=G" adds the track as part of the G alternate group.
If G is 0, the first available GroupID will be picked.
":fps=VAL" same as -fps option
":rap" imports only RAP samples
":trailing" keeps trailing 0-bytes in AVC/HEVC samples
":agg=VAL" same as -agg option
":dref" same as -dref option
":nodrop" same as -nodrop option
":packed" same as -packed option
":sbr" same as -sbr option
":sbrx" same as -sbrx option
":ovsbr" same as -ovsbr option
":ps" same as -ps option
":psx" same as -psx option
":mpeg4" same as -mpeg4 option
":svc" import SVC/SHVC with explicit signaling (no AVC base compatibility)
":nosvc" discard SVC/SHVC data when importing
":svcmode=MODE" sets SVC/SHVC import mode:
" 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 AVC base in another
" splitnox : each layer is in its own track, and no extractors are written
":subsamples" adds SubSample information for AVC+SVC
":forcesync" forces non IDR samples with I slices to be marked as sync points (AVC GDR)
!! RESULTING FILE IS NOT COMPLIANT WITH THE SPEC but will fix seeking in most players
":negctts" uses negative CTS-DTS offsets (ISO4 brand)
":stype=4CC" forces the sample description type to a different value
!! THIS MAY BREAK THE FILE WRITING !!
":chap" specifies the track is a chapter track
":chapter=NAME" adds a single chapter (old nero format) with given name lasting the entire file
This command can be used in -cat as well
":chapfile=file" adds a chapter file (old nero format)
This command can be used in -cat as well
":layout=WxHxXxY" specifies the track layout
- 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)
":rescale=TS" forces media timescale to TS !! changes the media duration
":timescale=TS" sets import timescale to TS
":noedit" do not set edit list when importing B-frames video tracks
":rvc=FILENAME" sets TVC configuration for the media
":fmt=FORMAT" overrides format detection with given format (cf BT/XMTA doc)
":profile=INT" overrides AVC profile
":level=INT" overrides AVC level
":font=name" specifies font name for text import (default "Serif")
":size=s" specifies font size for text import (default 18)
":text_layout=WxHxXxY" specifies the track text layout
- 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
* Note: By default SWF defines are sent when needed
":swf-no-ctrl" uses a single stream for movie control and dictionary
* Note: this will disable ActionScript
":swf-no-text" removes all SWF text
":swf-no-font" removes all embedded SWF Fonts (terminal fonts used)
":swf-no-line" removes all lines from SWF shapes
":swf-no-grad" removes all gradients from swf shapes
":swf-quad" uses quadratic bezier curves instead of cubic ones
":swf-xlp" support for lines transparency and scalability
":swf-ic2d" uses indexed curve 2D hardcoded proto
":swf-same-app" appearance nodes are reused
":swf-flatten=ang" complementary angle below which 2 lines are merged
* Note: angle ‘0‘ means no flattening
":kind=SCHEMA:type" sets kind for the track
":txtflags=flags" sets display flags (hexa number) of text track
":txtflags+=flags" adds display flags (hexa number) to text track
":txtflags-=flags" removes display flags (hexa number) from text track
-add file add file tracks to (new) output file
-cat file concatenates file samples to (new) output file
* Note: creates tracks if needed
* Note: aligns initial timestamp of the file to be concatenated.
-catx file same as cat but new tracks can be imported before concatenation by specifying ‘+ADD_COMMAND‘
where ADD_COMMAND is a regular -add syntax
-unalign-cat does not attempt to align timestamps of samples inbetween tracks
-force-cat skips media configuration check when concatenating file
!!! THIS MAY BREAK THE CONCATENATED TRACK(S) !!!
-keep-sys keeps all MPEG-4 Systems info when using ‘-add‘ / ‘cat‘
-keep-all keeps all existing tracks when using ‘-add‘
* Note: only used when adding IsoMedia files
All the following options can be specified as default or for each track.
When specified by track the syntax is ":opt" or ":opt=val".
-dref keeps media data in original file
-no-drop forces constant FPS when importing AVI video
-packed forces packed bitstream when importing raw ASP
-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
* Note: SBR AAC, PS AAC and oversampled SBR cannot be detected at import time
-fps FPS forces frame rate for video and SUB subtitles import
FPS is either a number or expressed as timescale-increment
* For raw H263 import, default FPS is 15
* For all other imports, default FPS is 25
!! THIS IS IGNORED FOR IsoMedia IMPORT !!
-mpeg4 forces MPEG-4 sample descriptions when possible (3GPP2)
For AAC, forces MPEG-4 AAC signaling even if MPEG-2
-agg N aggregates N audio frames in 1 sample (3GP media only)
* Note: Maximum value is 15 - Disabled by default
Suppported raw formats and file extensions:
NHNT .media .nhnt .info
NHML .nhml (opt: .media .info)
MPEG-1-2 Video .m1v .m2v
MPEG-4 Video .cmp .m4v
H263 Video .263 .h263
AVC/H264 Video .h264 .h26L .264 .26L
JPEG Images .jpg .jpeg
PNG Images .png
MPEG 1-2 Audio .mp3, .m1a, .m2a
ADTS-AAC Audio .aac
AMR(WB) Audio .amr .awb
EVRC Audio .evc
SMV Audio .smv
Supported containers and file extensions:
AVI .avi
MPEG-2 PS .mpg .mpeg .vob .vcd .svcd
MPEG-2 TS .ts .m2t
QCP .qcp
OGG .ogg
ISO-Media files no extension checking
Supported text formats:
SRT Subtitles .srt
SUB Subtitles .sub
GPAC Timed Text .ttxt
QuickTime TeXML Text .xml (cf QT documentation)
Supported Scene formats:
MPEG-4 XMT-A .xmt .xmta .xmt.gz .xmta.gz
MPEG-4 BT .bt .bt.gz
VRML .wrl .wrl.gz
X3D-XML .x3d .x3d.gz
X3D-VRML .x3dv .x3dv.gz
MacroMedia Flash .swf (very limited import support only)
Hinting Options
-hint hints the file for RTP/RTSP
-mtu size specifies RTP MTU (max size) in bytes. Default size is 1450
* Note: this includes the RTP header (12 bytes)
-copy copies media data to hint track rather than reference
* Note: speeds up server but takes much more space
-multi [maxptime] enables frame concatenation in RTP packets if possible
maxptime max packet duration in ms (optional, default 100ms)
-rate ck_rate specifies rtp rate in Hz when no default for payload
* Note: default value is 90000 (MPEG rtp rates)
-mpeg4 forces MPEG-4 generic payload whenever possible
-latm forces MPG4-LATM transport for AAC streams
-static enables static RTP payload IDs whenever possible
* By default, dynamic payloads are always used
MPEG-4 Generic Payload Options
-ocr forces all streams to be synchronized
* Most RTSP servers only support synchronized streams
-rap signals random access points in RTP packets
-ts signals AU Time Stamps in RTP packets
-size signals AU size in RTP packets
-idx signals AU sequence numbers in RTP packets
-iod prevents systems tracks embedding in IOD
* Note: shouldn‘t be used with -isma option
-add-sdp string adds sdp string to (hint) track ("-add-sdp tkID:string")
or movie. This will take care of SDP lines ordering
-unhint removes all hinting information.
MPEG-4 Scene Encoding Options
-mp4 specify input file is for encoding.
-def encode DEF names
-sync time_in_ms forces BIFS sync sample generation every time_in_ms
* Note: cannot be used with -shadow
-shadow time_ms forces BIFS sync shadow sample generation every time_ms.
* Note: cannot be used with -sync
-log generates scene codec log file if available
-ms file specifies file for track importing
Chunk Processing
-ctx-in file specifies initial context (MP4/BT/XMT)
* Note: input file must be a commands-only file
-ctx-out file specifies storage of updated context (MP4/BT/XMT)
LASeR Encoding options
-resolution res resolution factor (-8 to 7, default 0)
all coords are multiplied by 2^res before truncation
-coord-bits bits bits used for encoding truncated coordinates
(0 to 31, default 12)
-scale-bits bits extra bits used for encoding truncated scales
(0 to 4, default 0)
-auto-quant res resolution is given as if using -resolution
but coord-bits and scale-bits are infered
ISMA Encryption/Decryption Options
-crypt drm_file crypts a specific track using ISMA AES CTR 128
-decrypt [drm_file] decrypts a specific track using ISMA AES CTR 128
* Note: drm_file can be omitted if keys are in file
-set-kms kms_uri changes KMS location for all tracks or a given one.
* to address a track, use ‘tkID=kms_uri‘
DRM file syntax for GPAC ISMACryp:
File is XML and shall start with xml header
File root is an "ISMACryp" element
File is a list of "cryptrack" elements
cryptrack attributes are
TrackID ID of track to en/decrypt
key AES-128 key formatted (hex string ‘0x‘+32 chars)
salt CTR IV salt key (64 bits) (hex string ‘0x‘+16 chars)
Encryption only attributes:
Scheme_URI URI of scheme used
KMS_URI URI of key management system
* Note: ‘self‘ writes key and salt in the file
selectiveType selective encryption type - understood values are:
"None" all samples encrypted (default)
"RAP" only encrypts random access units
"Non-RAP" only encrypts non-random access units
"Rand" random selection is performed
"X" Encrypts every first sample out of X (uint)
"RandX" Encrypts one random sample out of X (uint)
ipmpType IPMP Signaling Type: None, IPMP, IPMPX
ipmpDescriptorID IPMP_Descriptor ID to use if IPMP(X) is used
* If not set MP4Box will generate one for you
Meta handling Options
-set-meta args sets given meta type - syntax: "ABCD[:tk=ID]"
* ABCD: four char meta type (NULL or 0 to remove meta)
* [:tk=ID]: if not set use root (file) meta
if ID is 0 use moov meta
if ID is not 0 use track meta
-add-item args adds resource to meta
* syntax: file_path + options (‘:‘ separated):
tk=ID: meta addressing (file, moov, track)
name=str: item name
mime=mtype: item mime type
encoding=enctype: item content-encoding type
id=id: item ID
* file_path "this" or "self": item is the file itself
-rem-item args removes resource from meta - syntax: item_ID[:tk=ID]
-set-primary args sets item as primary for meta - syntax: item_ID[:tk=ID]
-set-xml args sets meta XML data
* syntax: xml_file_path[:tk=ID][:binary]
-rem-xml [tk=ID] removes meta XML data
-dump-xml args dumps meta XML to file - syntax file_path[:tk=ID]
-dump-item args dumps item to file - syntax item_ID[:tk=ID][:path=fileName]
-package packages input XML file into an ISO container
* all media referenced except hyperlinks are added to file
-mgt packages input XML file into an MPEG-U widget with ISO container.
* all files contained in the current folder are added to the widget package
SWF Importer Options
MP4Box can import simple Macromedia Flash files (".SWF")
You can specify a SWF input file with ‘-bt‘, ‘-xmt‘ and ‘-mp4‘ options
-global all SWF defines are placed in first scene replace
* Note: By default SWF defines are sent when needed
-no-ctrl uses a single stream for movie control and dictionary
* Note: this will disable ActionScript
-no-text removes all SWF text
-no-font removes all embedded SWF Fonts (terminal fonts used)
-no-line removes all lines from SWF shapes
-no-grad removes all gradients from swf shapes
-quad uses quadratic bezier curves instead of cubic ones
-xlp support for lines transparency and scalability
-flatten ang complementary angle below which 2 lines are merged
* Note: angle ‘0‘ means no flattening
File Streamer Options
MP4Box can stream ISO files to RTP. The streamer currently doesn‘t support
data carrouselling and will therefore not handle BIFS and OD streams properly.
-rtp enables streamer
-noloop disables looping when streaming
-mpeg4 forces MPEG-4 ES Generic for all RTP streams
-dst=IP IP destination (uni/multi-cast). Default: 127.0.0.1
-port=PORT output port of the first stream. Default: 7000
-mtu=MTU path MTU for RTP packets. Default is 1450 bytes
-ifce=IFCE IP address of the physical interface to use. Default: NULL (ANY)
-ttl=TTL time to live for multicast packets. Default: 1
-sdp=Name file name of the generated SDP. Default: "session.sdp"
Live scene encoder options:
-dst=IP destination IP - default: NULL
-port=PORT destination port - default: 7000
-mtu=MTU path MTU for RTP packets. Default is 1450 bytes
-ifce=IFCE IP address of the physical interface to use. Default: NULL(ANY)
-ttl=TTL time to live for multicast packets. Default: 1
-sdp=Name ouput SDP file - default: session.sdp
-dims turns on DIMS mode for SVG input - default: off
-no-rap disabled RAP sending - this also disables carousel generation. Default: off
-src=file source of updates - default: null
-rap=time duration in ms of base carousel - default: 0 (off)
you can specify the RAP period of a single ESID (not in DIMS):
-rap=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
GPAC version: 0.5.1-DEV-rev5573