inigo docs load/stop corrections
[melted] / docs / inigo.txt
diff --git a/docs/inigo.txt b/docs/inigo.txt
new file mode 100644 (file)
index 0000000..4b82dd5
--- /dev/null
@@ -0,0 +1,250 @@
+Usage:
+
+       inigo [ -group [ name=value ]* ]
+             [ -consumer id[:arg] [ name=value ]* ]
+             [ -filter id[:arg] [ name=value ] * ]
+             [ -transition id[:arg] [ name=value ] * ]
+             [ -blank frames ]
+             [ -track ]
+             [ producer [ name=value ] * ]+
+             [ -serialise file.inigo ]
+       
+General rules:
+
+       1. Order is incredibly important;
+       2. Error checking on command line parsing is weak;
+       3. This document does not duplicate the information in services.txt.
+
+Terminoligy:
+
+       'Producers' typically refer to files but may also indicate
+       devices (such as dv1394 input or video4linux). Hence, the more
+       generic term is used [yes, the more generic usage is out of
+       scope for now...].
+       
+       'Filters' are frame modifiers - they always guarantee that for
+       every frame they receive, they output *precisely* one frame.
+       Never more, never less, ever.
+       
+       'Transitions' collect frames from two tracks (a and b) and
+       output 1 modified frame on their 'a track', and 1 unmodified
+       frame on their 'b track'. Never more, never less, ever.
+       
+       'Consumers' collect frames from a producer, do something with
+       them and destroy them.
+       
+       Collectively, these are known as 'services'. 
+       
+       All services have 'properties' associated to them. These are
+       typically defaulted or evaluated and may be overriden on a case
+       by case basis.
+       
+       All services except consumers obey in and out properties.
+       
+       Consumers have no say in the flow of frames [though they may
+       give the illusion that they do]. They get frames from a
+       connected producer, use them, destroy them and get more.
+       
+Basics:
+
+       To play a file with the default SDL PAL consumer, usage is:
+       
+       $ inigo file
+       
+       Note that 'file' can be anything that inigo has a known
+       'producer' mapping for (so this can be anything from .dv to
+       .txt).
+
+Properties:
+
+       Properties can be assigned to the producer by adding additional
+       name=value pairs after the producer:
+       
+       $ inigo file in=50 out=100 something="something else"
+       
+       Note that while some properties have meaning to all producers
+       (for example: in, out and length are guaranteed to be valid for
+       all, though typically, length is determined automatically), the
+       validity of others are dependent on the producer - however,
+       properties will always be assigned, but it doesn't mean they
+       will be used.
+       
+Multiple Files:
+
+       Multiple files of different types can be used:
+       
+       $ inigo a.dv b.mpg c.png
+       
+       Properties can be assigned to each file:
+       
+       $ inigo a.dv in=50 out=100 b.mpg out=500 c.png out=500
+       
+Filters:
+
+       The Multiple Files examples above will logically playout one
+       after the other. 
+       
+       However, inigo doesn't care too much about changes in frame
+       dimensions or audio specification, so you may need to add
+       additional normalising filters to that, ie:
+       
+       $ inigo a.dv b.mpg c.png -filter resize -filter resample
+       
+       These filters are designed to guarantee that the consumer gets
+       what it asks for.
+
+       It should also be stressed that filters are applied in the order
+       in which they're specified.
+       
+Filter Properties:
+
+       As with producers, properties may be specified on filters too.
+       
+       Again, in and out properties are common to all, so to apply a
+       filter to a range of frames, you would use something like:
+       
+       $ inigo a.dv -filter greyscale in=0 out=50
+       
+       Again, filters have their own set of rules about properties and
+       will silently ignore properties that do not apply.
+       
+Groups:
+
+       The -group switch is provided to force default properties on the
+       following 'services'. For example:
+       
+       $ inigo -group in=0 out=49 clip*
+       
+       would play the first 50 frames of all clips that match the wild
+       card pattern.
+       
+       Note that the last -group settings also apply to the following
+       filters, transitions and consumers, so:
+       
+       $ inigo -group in=0 out=49 clip* -filter greyscale
+       
+       is *probably not* what you want (ie: the greyscale filter would
+       only be applied to the first 50 frames).
+       
+       To shed the group properties, you can use any empty group:
+       
+       $ inigo -group in=0 out=49 clip* -group -filter greyscale
+       
+Introducing Tracks and Blanks:
+
+       So far, all of the examples have shown the definition of a
+       single playlist, or more accurately, track.
+
+       When multiple tracks exist, the consumer will receive a frame
+       from the 'lowest numbered' track that is generating a non-blank
+       frame.
+       
+       It is best to visualise a track arrangement, so we'll start with
+       an example:
+       
+       $ inigo a.dv out=49 -track b.dv
+       
+       This can be visualised as follows:
+       
+       +-------+
+       |a      |
+       +-------+----------+
+       |b                 |
+       +------------------+
+       
+       Playout will show the first 50 frames of a and the 51st frame
+       shown will be the 51st frame of b.
+       
+       To show have the 51st frame be the first frame of b, we can use
+       the -blank switch:
+       
+       $ inigo a.dv out=49 -track -blank 49 b.dv
+       
+       Which we can visualise as:
+       
+       +-------+
+       |a      |
+       +-------+-------------------+
+               |b                  |
+               +-------------------+
+       
+       Now playout will continue as though a and b clips are on the
+       same track (which is about as useful as reversing the process of
+       slicing bread).
+       
+Transitions:
+
+       Where tracks become useful is in the placing of transitions.
+       
+       Here we need tracks to overlap, so a useful multitrack
+       definition could be given as:
+       
+       $ inigo a.dv out=49 -transition luma in=25 out=49 \
+               -track \
+               -blank 24 b.dv
+       
+       Now we're cooking - our visualisation would be something like:
+       
+       +-------+
+       |a      |
+       +----+--+---------------+
+            |b                 |
+            +------------------+
+       
+       Playout will now show the first 25 frames of a and then a fade
+       transition for 25 frames between a and b, and will finally
+       playout the remainder of b.
+       
+Reversing a Transition:
+
+       When we visualise a track definition, we also see situtations
+       like:
+       
+       +-------+              +----------+
+       |a1     |              |a2        |
+       +----+--+--------------+----+-----+
+            |b                     |
+            +----------------------+
+       
+       In this case, we have two transitions, a1 to b and b to a2. 
+       
+       In this scenario, we define a command line as follows:
+       
+       $ inigo a.dv out=49 -blank 49 a2.dv \
+                       -transition luma in=25 out=49 \
+               -transition luma in=100 out=124 reverse=1 \
+               -track \
+               -blank 24 b.dv out=99
+       
+Filters and Tracks:
+
+       A filter applies to a [specified region of a] single track, so
+       normalisation filters need to be applied to each track when
+       applicable.
+       
+       This user specification is a necessary evil (you do not want to
+       resize a text or png overlay to be the size of the frame that
+       the consumer is requesting, and you may not want to unecessarily
+       resize a video track if you will be later rescaling it for
+       composition).
+       
+Serialisation:
+
+       Inigo has a built in serialisation mechanism - you can build up
+       your command, test it via any consumer and then add a -serialise
+       file.inigo switch to save it.
+       
+       The saved file can be subsequently used as a clip by either
+       miracle or inigo. Take care though - paths to files are saved as
+       provided on the command line....
+       
+Missing Features:
+
+       Some filters/transitions should be applied on the output frame
+       regardless of which track it comes from - for example, you might
+       have a 3rd text track or a watermark which you want composited
+       on every frame, and of course, there's the obscure feature.... 
+       
+       A -post switch will be added to provided this feature at some
+       point soon.
+