--- man/flvmeta.1.orig 2022-11-13 06:34:24 UTC +++ man/flvmeta.1 @@ -0,0 +1,458 @@ +.\" Automatically generated by Pandoc 2.19.2 +.\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} +.TH "flvmeta" "1" "January 2014" "flvmeta user manual" "" +.hy +.SH NAME +.PP +flvmeta - manipulate or extract metadata in Adobe Flash Video files +.SH SYNOPSIS +.PP +\f[B]flvmeta\f[R] \f[I]INPUT_FILE\f[R] +.PD 0 +.P +.PD +\f[B]flvmeta\f[R] \f[I]INPUT_FILE\f[R] \f[I]OUTPUT_FILE\f[R] +.PD 0 +.P +.PD +\f[B]flvmeta\f[R] \f[V]-D\f[R]|\f[V]--dump\f[R] [\f[I]options\f[R]] +\f[I]INPUT_FILE\f[R] +.PD 0 +.P +.PD +\f[B]flvmeta\f[R] \f[V]-F\f[R]|\f[V]--full-dump\f[R] [\f[I]options\f[R]] +\f[I]INPUT_FILE\f[R] +.PD 0 +.P +.PD +\f[B]flvmeta\f[R] \f[V]-C\f[R]|\f[V]--check\f[R] [\f[I]options\f[R]] +\f[I]INPUT_FILE\f[R] +.PD 0 +.P +.PD +\f[B]flvmeta\f[R] \f[V]-U\f[R]|\f[V]--update\f[R] [\f[I]options\f[R]] +\f[I]INPUT_FILE\f[R] [\f[I]OUTPUT_FILE\f[R]] +.SH DESCRIPTION +.PP +\f[B]flvmeta\f[R] is a command-line utility aimed at manipulating +Adobe(tm) Flash Video files (FLV), through several commands, only one of +which can be used for each invocation of the program. +.PP +It possesses the ability to compute and inject a variety of values in +the \f[I]onMetaData\f[R] event tag, including keyframe indices used by +most video players to allow random-access seeking, notably for HTTP +pseudo-streamed files via a server-side module, by having the client +send the file offset looked up for the nearest desired keyframe. +.PD 0 +.P +.PD +Tools such as \f[B]flvmeta\f[R] must be used in the case the initial +encoding process is unable to inject those metadata. +.PP +It can also optionnally inject the \f[I]onLastSecond\f[R] event, used to +signal the end of playback, for example to revert the player software to +a `stopped' state. +.PP +\f[B]flvmeta\f[R] also has the ability to dump metadata and full file +information to standard output, in a variety of textual output formats, +including XML, YAML, and JSON. +.PP +Finally, the program can analyze FLV files to detect potential problems +and errors, and generate a textual report as a raw format, as JSON, or +as XML. +It has the ability to detect more than a hundred problems, going from +harmless to potentially unplayable, using a few real world encountered +issues. +.PP +\f[B]flvmeta\f[R] can operate on arbitrarily large files, and can handle +FLV files using extended (32-bit) timestamps. +It can guess video frame dimensions for all known video codecs supported +by the official FLV specification. +.PP +Its memory usage remains minimal, as it uses a two-pass reading +algorithm which permits the computation of all necessary tags without +loading anything more than the file\[cq]s tags headers in memory. +.SH COMMANDS +.PP +Only one command can be specified for an invocation of +\f[B]flvmeta\f[R]. +The chosen command determines the mode of execution of the program. +.PP +By default, if no command is specified, \f[B]flvmeta\f[R] will +implicitly choose the command to use according to the presence of +\f[I]INPUT_FILE\f[R] and \f[I]OUTPUT_FILE\f[R]. +.PP +If only \f[I]INPUT_FILE\f[R] is present, the \f[B]--dump\f[R] command +will be executed. +.PP +If both \f[I]INPUT_FILE\f[R] and \f[I]OUTPUT_FILE\f[R] are present, the +\f[B]--update\f[R] command will be executed. +.PP +Here is a list of the supported commands: +.SS -D, --dump +.PP +Dump a textual representation of the first \f[I]onMetaData\f[R] tag +found in \f[I]INPUT_FILE\f[R] to standard output. +The default format is XML, unless specified otherwise. +.PD 0 +.P +.PD +It is also possible to specify another event via the \f[B]--event\f[R] +option, such as \f[I]onLastSecond\f[R]. +.SS -F, --full-dump +.PP +Dump a textual representation of the whole contents of +\f[I]INPUT_FILE\f[R] to standard output. +The default format is XML, unless specified otherwise. +.SS -C, --check +.PP +Print a report to standard output listing warnings and errors detected +in \f[I]INPUT_FILE\f[R], as well as potential incompatibilities, and +information about the codecs used in the file. +The exit code will be set to a non-zero value if there is at least one +error in the file. +.PP +The output format can either be plain text, XML using the +\f[B]--xml\f[R] option, or JSON using the \f[B]--json\f[R] option. +It can also be disabled altogether using the \f[B]--quiet\f[R] option if +you are only interested in the exit status. +.PP +Messages are divided into four specific levels of increasing importance: +.IP \[bu] 2 +\f[B]info\f[R]: informational messages that do not pertain to the file +validity +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]warning\f[R]: messages that inform of oddities to the flv format +but that might not hamper file reading or playability, this is the +default level +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]error\f[R]: messages that inform of errors that might render the +file impossible to play or stream correctly +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]fatal\f[R]: messages that inform of errors that make further file +reading impossible therefore ending parsing completely +.PP +The \f[B]--level\f[R] option allows \f[B]flvmeta\f[R] to limit the +display of messages to a minimum level among those, for example if the +user is only interested in error messages and above. +.PP +Each message or message template presented to the user is identified by +a specific code of the following format: +.PP +\f[V][level][topic][id]\f[R] +.IP \[bu] 2 +\f[B]level\f[R] is an upper-case letter that can be either I, W, E, F +according to the aforementioned message levels +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]topic\f[R] is a two-digit integer representing the general topic of +the message +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]id\f[R] is a unique three-digit identifier for the message, or +message template if parameterized +.PP +Messages can be related to the following topics : +.IP \[bu] 2 +\f[B]10\f[R] general flv file format +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]11\f[R] file header +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]12\f[R] previous tag size +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]20\f[R] tag format +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]30\f[R] tag types +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]40\f[R] timestamps +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]50\f[R] audio data +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]51\f[R] audio codecs +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]60\f[R] video data +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]61\f[R] video codecs +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]70\f[R] metadata +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]80\f[R] AMF data +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]81\f[R] keyframes +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]82\f[R] cue points +.PP +For example, represents a Warning in topic 51 with the id 050, which +represents a warning message related to audio codecs, in that case to +signal that an audio tag has an unknown codec. +.SS -U, --update +.PP +Update the given input file by inserting a computed \f[I]onMetaData\f[R] +tag. +If \f[I]OUTPUT_FILE\f[R] is specified, it will be created or overwritten +instead and the input file will not be modified. +If the original file is to be updated, a temporary file will be created +in the default temp directory of the platform, and it will be copied +over the original file at the end of the operation. +This is due to the fact that the output file is written while the +original file is being read due to the two-pass method. +.PP +The computed metadata contains among other data full keyframe +information, in order to allow HTTP pseudo-streaming and random-access +seeking in the file. +.PP +By default, an \f[I]onLastSecond\f[R] tag will be inserted, unless the +\f[B]--no-last-second\f[R] option is specified. +.PP +Normally overwritten by the update process, the existing metadata found +in the input file can be preserved by the \f[B]--preserve\f[R] option. +.PP +It is also possible to insert custom string values with the +\f[B]--add\f[R] option, which can be specified multiple times. +.PP +By default, the update operation is performed without output, unless the +\f[B]--verbose\f[R] option is specified, or the +\f[B]--print-metadata\f[R] is used to print the newly written metadata +to the standard output. +.SH OPTIONS +.SS DUMP +.TP +-d \f[I]FORMAT\f[R], --dump-format=\f[I]FORMAT\f[R] +specify dump format where \f[I]FORMAT\f[R] is `xml' (default), `json', +`raw', or `yaml'. +Also applicable for the \f[B]--full-dump\f[R] command. +.TP +-j, --json +equivalent to \f[B]--dump-format=json\f[R] +.TP +-r, --raw +equivalent to \f[B]--dump-format=raw\f[R] +.TP +-x, --xml +equivalent to \f[B]--dump-format=xml\f[R] +.TP +-y, --yaml +equivalent to \f[B]--dump-format=yaml\f[R] +.TP +-e \f[I]EVENT\f[R], --event=\f[I]EVENT\f[R] +specify the event to dump instead of \f[I]onMetaData\f[R], for example +\f[I]onLastSecond\f[R] +.SS CHECK +.TP +-l \f[I]LEVEL\f[R], --level=\f[I]LEVEL\f[R] +print only messages where level is at least \f[I]LEVEL\f[R]. +The levels are, by ascending importance, `info', `warning' (default), +`error', or `fatal'. +.TP +-q, --quiet +do not print messages, only return the status code +.TP +-x, --xml +generate an XML report instead of the default `compiler-friendly' text +.TP +-j, --json +generate a JSON report instead of the default `compiler-friendly' text +.SS UPDATE +.TP +-m, --print-metadata +print metadata to stdout after update using the format specified by the +\f[B]--format\f[R] option +.TP +-a \f[I]NAME=VALUE\f[R], --add=\f[I]NAME=VALUE\f[R] +add a metadata string value to the output file. +The name/value pair will be appended at the end of the +\f[I]onMetaData\f[R] tag. +.TP +-s, --no-lastsecond +do not create the \f[I]onLastSecond\f[R] tag +.TP +-p, --preserve +preserve input file existing \f[I]onMetadata\f[R] tags +.TP +-f, --fix +fix invalid tags from the input file +.TP +-i, --ignore +ignore invalid tags from the input file (the default behaviour is to +stop the update process with an error) +.TP +-t, --reset-timestamps +reset timestamps so \f[I]OUTPUT_FILE\f[R] starts at zero. +This has been added because some FLV files are produced by cutting +bigger files, and the software doing the cutting does not resets the +timestamps as required by the standard, which can cause playback issues. +.TP +-k, \[en]all-keyframes +index all keyframe tags, including duplicate timestamps +.SS GENERAL +.TP +-v, --verbose +display informative messages +.TP +-V, --version +print version information and exit +.TP +-h, --help +display help on the program usage and exit +.SH FORMATS +.PP +The various XML formats used by \f[B]flvmeta\f[R] are precisely +described by the following XSD schemas: +.IP \[bu] 2 +http://schemas.flvmeta.org/flv.xsd: describes the general organization +of FLV files +.IP \[bu] 2 +http://schemas.flvmeta.org/Amf0.xsd: describes an XML representation of +the Adobe(TM) AMF0 serialization format +.IP \[bu] 2 +http://schemas.flvmeta.org/report.xsd: describes the XML output format +of the \f[B]--check\f[R] \f[B]--xml\f[R] command +.SH EXAMPLES +.PP +\f[B]flvmeta example.flv\f[R] +.PP +Prints the onMetadata tag contents of example.flv as XML output. +.PP +\f[B]flvmeta example.flv out.flv\f[R] +.PP +Creates a file named out.flv containing updated metadata and an +onLastSecond tag from the exemple.flv file. +.PP +\f[B]flvmeta --check --xml --level=error example.flv\f[R] +.PP +Checks the validity of the example.flv file and prints the error report +to stdout in XML format, displaying only errors and fatal errors. +.PP +\f[B]flvmeta --full-dump --yaml example.flv\f[R] +.PP +Prints the full contents of example.flv as YAML format to stdout. +.PP +\f[B]flvmeta --update --no-last-second --show-metadata --json +example.flv\f[R] +.PP +Performs an in-place update of example.flv by inserting computed +onMetadata without an onLastSecond tag, and prints the newly inserted +metadata on stdout as JSON. +.SH EXIT STATUS +.IP \[bu] 2 +\f[B]0\f[R] flvmeta exited without error +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]1\f[R] an error occurred when trying to open an input file +.IP \[bu] 2 +\f[B]2\f[R] the input file was not recognized as an FLV file +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]3\f[R] an end-of-file condition was encountered unexpectedly +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]4\f[R] a memory allocation error occurred during the run of the +program +.IP \[bu] 2 +\f[B]5\f[R] an empty tag was encountered in an input file +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]6\f[R] an error occurred when trying to open an output file +.IP \[bu] 2 +\f[B]7\f[R] an invalid tag was encountered in an input file +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]8\f[R] an error was encountered while writing an output file +.PD 0 +.P +.PD +.IP \[bu] 2 +\f[B]9\f[R] the \f[B]--check\f[R] command reported an invalid file (one +or more errors) +.SH BUGS +.PP +\f[B]flvmeta\f[R] does not support encrypted FLV files yet. +.SH AUTHOR +.PP +Marc Noirot +.SH COPYRIGHT +.PP +Copyright 2007-2016 Marc Noirot +.PP +This is free software; see the source for copying conditions. +There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. +.SH CONTACT +.PP +Please report bugs to