| MP4v2 1.9.1 Command-line Tools Guide |
| ************************************ |
| |
| Table of Contents |
| ***************** |
| |
| 1 Overview |
| 2 Introduction |
| 3 Common Options |
| 4 mp4file |
| 5 mp4track |
| 6 mp4art |
| |
| |
| 1 Overview |
| ********** |
| |
| MP4v2 bundles several command-line tools which, in general, allow some |
| basic manipulation of mp4 files which have been created by other means. |
| They are not meant to be a complete solution to management of mp4 file |
| structure. |
| |
| The following is a brief summary of the tools available and the |
| functionality offered. Other tools may be packaged with the |
| distribution but are not yet stable enough to even document. User |
| beware. |
| |
| `mp4file' |
| Operates on the entire file with actions such as list (summary |
| information), optimization and ASCII dumps. |
| |
| `mp4track' |
| Operates on individual tracks with actions such as colr-box and |
| pasp-box manipulation. |
| |
| `mp4art' |
| Operates on iTunes Metadata Cover-art Boxes with actions such as |
| list, add, replace, remove and extraction of Cover-art images. |
| |
| 2 Introduction |
| ************** |
| |
| The tools are invoked by their command-name, followed by one or more |
| options, actions, parameters for actions, and finally one or more files |
| on which the tool will operate. Options are specified in one of two |
| ways; in short or long syntax. A short-syntax option is prefixed with |
| exactly one dash while a long-syntax option is prefixed with exactly |
| two dashes. Depending on the option, it may or may not expect an |
| argument. Specifying an option which expects an argument usually |
| follows either of the following patterns: |
| |
| toolname --something value ... |
| toolname --something=value ... |
| |
| The rest of this guide will use the equals sign method. |
| |
| 3 Common Options |
| **************** |
| |
| Many of the tools share a common set of options which. These common |
| options usually have identically behaving short or long syntax. In some |
| cases short-syntax differs from long-syntax in that it may not require |
| an argument. This style is used sparingly and only when truly |
| convenient. Even though it is common practice in many unix-style tools |
| to permit optional arguments, the tools used in this project will tend |
| to avoid that because it can create a great deal of confusion. |
| |
| The following is a list of common options available: |
| |
| `-y, --dryrun' |
| do not actually create or modify any files. In situations where |
| the command will create new or modify existing files, specifying |
| this option will cause the tool to do as much as possible stopping |
| short of performing any actual writes. This is useful to guard |
| against user mistakes or unexpected behavior. |
| |
| `-k, --keepgoing' |
| continue batch processing even after errors. When actions involve |
| multiple files or operations, the default behavior is to stop and |
| exit on the first error encountered. Specify this option if it is |
| desirable to record the error but continue processing. |
| |
| `-o, --overwrite' |
| overwrite existing files when creating. In situations where a new |
| file will be created, the default behavior is to not overwrite a |
| file if it already exists. Use this option to allow overwriting. |
| |
| `-f, --force' |
| force overwrite even if file is read-only. If overwriting is |
| enabled, file permissions may prevent writes. Specify this option |
| to try and overwrite the file anyways. This usually involves |
| deleting the file, then creating a new one. |
| |
| `-q, --quiet' |
| equivalent to -verbose 0. Default behavior is to print a low |
| amount of informative information, usually one line of text per |
| action/file. Specify this option to omit normal messages. Errors |
| will still be reported. |
| |
| `-d, --debug NUM' |
| increase debug or long-option to set NUM. File I/O with mp4 file |
| structures have special debug options available to users |
| interested in all the fine details. Default is level 1 . The |
| short-syntax is accumulative and takes no argument, while |
| long-syntax takes an argument. For exmaple, the following are |
| equivalent and would set level 3: `-dd' or `-d -d' or `--debug=3'. |
| The following levels are available: |
| 0. supressed |
| |
| 1. add warnings and errors (default) |
| |
| 2. add table details |
| |
| 3. add implicits |
| |
| 4. everything |
| |
| `-v, --verbose NUM' |
| increase verbosity or long-option to set NUM. Tool activity by |
| default will generally print one informative message per |
| action/file. Specify this option to change the default behavior. |
| The short-syntax is accumulative and takes no argument, while |
| long-syntax takes an argument. |
| 0. warnings and errors |
| |
| 1. normal informative messages (default) |
| |
| 2. more informative messages |
| |
| 3. everything |
| |
| `-h, --help' |
| print brief help or long-option for extended help. The |
| short-syntax will produce brief help. Specify the long-option for |
| more extensive help. |
| |
| `--version' |
| print version information and exit. Extended version information |
| used for SCM purposes is not listed in help, but is available by |
| specifying `--verionx'. |
| |
| 4 mp4file |
| ********* |
| |
| `--list' |
| list (summary information). This will produce brief report when |
| summarizing each mp4 file. BRAND shows the file's main brand |
| identifier. COMPAT shows additional brands for which the file |
| purports to be comaptible with. SIZING displays if the file has |
| 64-bit extensions of any kind, otherwise 32-bit. Example output: |
| BRAND COMPAT SIZING FILE |
| ---------------------------------------------------------------------- |
| M4A M4A,isom,mp42 32-bit Song.m4a |
| mp42 isom,mp42 32-bit Movie1.m4v |
| mp42 isom,mp42 32-bit Movie2.m4v |
| |
| `--optimize' |
| optimize mp4 structure. This will rewrite the entire mp4 file |
| which, if needed, will clean up any unused (free) sections, and |
| re-order the atoms in a manner somewhat consistent with the |
| best-practices described in the ISO base media file specification. |
| |
| `--dump' |
| dump mp4 structure in human-readable format. An ASCII dump of mp4 |
| atoms is printed to stdout. This action is heavily influenced by |
| `--debug' option. |
| |
| Example, list some files: |
| mp4file --list *.mp4 *.m4a *.m4v |
| |
| Example, dump a file with more than usual debugging information: |
| mp4file -dd --dump movie.m4v |
| |
| 5 mp4track |
| ********** |
| |
| This tool is used to manage various aspects of individual tracks in an |
| mp4 file. Some of the actions are mp4 (generic) while others may |
| support standards based on mp4 files such as `.m4a' or `.m4v' files. |
| Each action has an appropriate scope upon which it acts. See individual |
| actions for details. The following parameters are used to set scopes |
| for actions: |
| |
| `--track-any' |
| act on any/all tracks. |
| |
| `--track-index IDX' |
| act on a single track specified by index value. A track index is |
| 0-based and counts upwards for each track available. |
| |
| `--track-id ID' |
| act on a single track specified by id value. A track id is a |
| unique value assigned to each track and never changes. |
| |
| The list action will produce a brief report of each track for each mp4 |
| file. Many (but not all) of the values shown may be modified by |
| actions documented later in this article. This will produce a brief |
| report of each track for each mp4 file. |
| |
| `--list' |
| list all tracks in mp4. Example output: |
| track[0] id=1 |
| type = video |
| enabled = true |
| inMovie = false |
| inPreview = false |
| layer = 0 |
| alternateGroup = 0 |
| volume = 0.0000 |
| width = 850.96295166 |
| height = 360.00000000 |
| language = UNDEFINED(0) |
| handlerName = |
| userDataName = <absent> |
| |
| The following group of actions are used to modify the values shown by |
| -list action. The modification of these values should be done with |
| great care on any files, and as always you are cautioned to backup your |
| media files before modification. |
| |
| `--enabled BOOL' |
| set trak.tkhd.flags (enabled bit). When true indicates the track |
| is enabled. |
| |
| `--inmovie BOOL' |
| set trak.tkhd.flags (inMovie bit). When true indicates the track |
| is used in the movie. |
| |
| `--inpreview BOOL' |
| set trak.tkhd.flags (inPreview bit). When true indicates the |
| track is used in the movie's preview. |
| |
| `--layer NUM' |
| set trak.tkhd.layer. Specifies the front-to-back ordering of |
| video tracks; tracks with lower numbers are closer to the viewer. |
| 0 is the normal value, and -1 would be in front of track 0, and so |
| on. |
| |
| `--altgroup NUM' |
| set trak.tkhd.alternate_group. An integer that specifies a group |
| or collection of tracks. If this field is 0 there is no |
| information on possible relations to other tracks. If this field |
| is not 0, it should be the same for tracks that contain alternate |
| data for one another and different for tracks belonging to |
| different such groups. Only one track within an alternate group |
| should be played or streamed at any one time, and must be |
| distinguishable from other tracks in the group via attributes such |
| as bitrate, codec, language, packet size etc. A group may have |
| only one member. |
| |
| `--volume FLOAT' |
| set trak.tkhd.volume. Specifies the track's relative audio |
| volume. Full volume is 1.0 and is the normal value. |
| |
| `--width FLOAT' |
| set trak.tkhd.width. Specifies the track's visual presentation |
| width. By default this is the same as the pixel width of the |
| images. All images in the sequence are scaled to this size before |
| any overall transformation by the matrix. |
| |
| `--height FLOAT' |
| set trak.tkhd.height. Specifies the track's visual presentation |
| height. By default this is the same as the pixel width of the |
| images. All images in the sequence are scaled to this size before |
| any overall transformation by the matrix. |
| |
| `--language CODE' |
| set trak.mdia.mdhd.language. Specifies the ISO-639-2/T langauge |
| code of the track. For example, `eng' for English, `fra' for |
| French. |
| |
| `--hdlrname STR' |
| set trak.mdia.hdlr.name. Specifies a human-readable track type |
| (for debugging and inspection purposes). |
| |
| `--udtaname STR' |
| set trak.udta.name.value. Specifies an arbitrary track-name. This |
| value is optional (may be absent). |
| |
| `--udtaname-remove' |
| remove trak.udta.name atom. This action will remove the optional |
| atom. |
| |
| |
| The colr related actions manage Color Parameter boxes which are used by |
| QuickTime to map numerical values of pixels in a file to a common |
| representation of color for video tracks. They may or may not be |
| suitable for other Apple media players. Community feedback on |
| compatibility is welcome. |
| |
| `--colr-list' |
| list all colr-boxes in mp4. |
| |
| `--colr-add' |
| add colr-box to a video track. An individual track must be |
| specified. |
| |
| `--colr-set' |
| set colr-box parms. An individual track must be specified. |
| |
| `--colr-remove' |
| remove colr-box from track. By default all colr-boxes will be |
| removed unless an individual track is specified. |
| |
| `--colr-parms CSV' |
| where CSV is IDX1,IDX2,IDX3 . Specify the exact parameters of an |
| NCLC Color Parameter box as specified in the QuickTime |
| specification. IDX1 correlates to the 16-bit primaries index. |
| IDX2 correlates to the 16-bit transferFunction index. IDX3 |
| correlates to the 16-bit matrixIndex index. Effects actions |
| -colr-add, -colr-set. |
| |
| `--colr-parm-hd' |
| equivalent to -colr-parms=1,1,1 . This is a convenience setting |
| generally suitable for HD content. Effects actions -colr-add, |
| -colr-set. |
| |
| `--colr-parm-sd' |
| equivalent to -colr-parms=6,1,6 . This is a convenience setting |
| generally suitable for SD content. Effects actions -colr-add, |
| -colr-set. |
| |
| Example, add a colr-box tuned for HD content: |
| mp4track --track-id=1 --colr-add --colr-parm-hd mymovie.m4v |
| |
| Example, add a colr-box with arbitrary index parameters: |
| mp4track --track-id=1 --colr-add --colr-parms=2,3,4 mymovie.m4v |
| |
| |
| The pasp related actions manage Picture Aspect Ratio boxes which are |
| used by QuickTime to specify height-to-width ratio of pixels for video |
| tracks. They may or may not be suitable for other Apple media players. |
| Community feedback on compatibility is welcome. |
| |
| `--pasp-list' |
| list all pasp-boxes in mp4. |
| |
| `--pasp-add' |
| add pasp-box to a video track. An individual track must be |
| specified. |
| |
| `--pasp-set' |
| set pasp-box parms. An individual track must be specified. |
| |
| `--pasp-remove' |
| remove pasp-box from track By default all pasp-boxes will be |
| removed unless an individual track is specified. |
| |
| `--pasp-parms CSV' |
| where CSV is hSPACING,vSPACING. Specify the exact parameters of |
| Picture Aspect Ratio box as specified in the QuickTime |
| specification. Effects actions -pasp-add, -pasp-set. |
| |
| Example, add a pasp-box with default (1,1) parameters for square |
| pixels: |
| mp4track --track-id=1 --pasp-add --pasp-parms=1,1 mymovie.m4v |
| |
| Example, add a pasp-box for 16:9 digital 525 (NTSC): |
| mp4track --track-id=1 --pasp-add --pasp-parms=40,33 mymovie.m4v |
| |
| Example, add a pasp-box for 16:9 digital 625 (PAL): |
| mp4track --track-id=1 --pasp-add --pasp-parms=118,81 mymovie.m4v |
| |
| |
| 6 mp4art |
| ******** |
| |
| This tool is used to manage iTunes Metadata Cover-art which is |
| typically used to embed an image to a song file. For example, the songs |
| in an album collection might all contain an image of the album cover |
| art. This data is usually found in `.m4a', `.m4v' and `.mov' files. |
| |
| `--art-any' |
| act on all covr-boxes (default). Specifies the scope of the |
| action to operate on all, if applicable, covr-boxes. |
| |
| `--art-index IDX' |
| act on covr-box index IDX. Specifies the scope of the action to |
| operate on single covr-box INDEX. |
| |
| `--list' |
| list all covr-boxes. |
| IDX BYTES CRC32 TYPE FILE |
| ---------------------------------------------------------------------- |
| 0 173613 710a3ec9 JPEG 01 Life In Technicolor.m4a |
| 0 173613 710a3ec9 JPEG 02 Cemeteries Of London.m4a |
| 0 173613 710a3ec9 JPEG 03 Lost!.m4a |
| 0 173613 710a3ec9 JPEG 04 42.m4a |
| 0 173613 710a3ec9 JPEG 05 Lovers In Japan _ Reign Of Love.m4a |
| 0 173613 710a3ec9 JPEG 06 Yes.m4a |
| 0 173613 710a3ec9 JPEG 07 Viva La Vida.m4a |
| 0 173613 710a3ec9 JPEG 08 Violet Hill.m4a |
| 0 173613 710a3ec9 JPEG 09 Strawberry Swing.m4a |
| 0 173613 710a3ec9 JPEG 10 Death And All His Friends.m4a |
| |
| `--add IMG' |
| add covr-box from IMG file. |
| |
| `--replace IMG' |
| replace covr-box with IMG file. |
| |
| `--remove' |
| remove covr-box. |
| |
| `--extract' |
| extract covr-box. This will extract all covr-box data to image |
| files in the format of `BASENAME.art[INDEX].TYPE' . |
| |
| Example, add PNG image file: |
| mp4art --add ACDC.png mysong.m4a |
| |
| Example, extract image files from file: |
| mp4art --extract mysong.m4a |
| |
| |