Skip to content
Snippets Groups Projects
libavfilter.texi 2.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • \input texinfo @c -*- texinfo -*-
    
    
    @settitle Libavfilter Documentation
    
    @center @titlefont{Libavfilter Documentation}
    
    Libavfilter is the filtering API of Libav. It replaces 'vhooks', and
    started as a Google Summer of Code project.
    
    Note that there may still be serious bugs in the code and its API
    
    and ABI should not be considered stable yet!
    
    
    In libavfilter, it is possible for filters to have multiple inputs and
    multiple outputs.
    To illustrate the sorts of things that are possible, we can
    use a complex filter graph. For example, the following one:
    
    @example
    input --> split --> fifo -----------------------> overlay --> output
                |                                        ^
                |                                        |
                +------> fifo --> crop --> vflip --------+
    @end example
    
    
    splits the stream in two streams, then sends one stream through the crop filter
    and the vflip filter, before merging it back with the other stream by
    
    overlaying it on top. You can use the following command to achieve this:
    
    @example
    
    ./avconv -i input -vf "[in] split [T1], fifo, [T2] overlay=0:H/2 [out]; [T1] fifo, crop=iw:ih/2:0:ih/2, vflip [T2]" output
    
    The result will be that the top half of the video is mirrored
    onto the bottom half of the output video.
    
    Video filters are loaded using the @var{-vf} option passed to
    
    avconv or to avplay. Filters in the same linear chain are separated by
    
    commas. In our example, @var{split}, @var{fifo}, and @var{overlay} are in one
    linear chain, and @var{fifo}, @var{crop}, and @var{vflip} are in another. The
    points where the linear chains join are labeled by names enclosed in square
    brackets. In our example, they join at @var{[T1]} and @var{[T2]}. The magic
    
    labels @var{[in]} and @var{[out]} are the points where video is input
    and output.
    
    
    Some filters take a list of parameters: they are specified
    after the filter name and an equal sign, and are separated
    
    There are so-called @var{source filters} that do not take video
    input, and we expect that some @var{sink filters} will
    not have video output, at some point in the future.
    
    @chapter graph2dot
    
    
    The @file{graph2dot} program included in the Libav @file{tools}
    
    directory can be used to parse a filter graph description and issue a
    corresponding textual representation in the dot language.
    
    Invoke the command:
    @example
    graph2dot -h
    @end example
    
    to see how to use @file{graph2dot}.
    
    You can then pass the dot description to the @file{dot} program (from
    the graphviz suite of programs) and obtain a graphical representation
    of the filter graph.
    
    For example the sequence of commands:
    @example
    echo @var{GRAPH_DESCRIPTION} | \
    tools/graph2dot -o graph.tmp && \
    dot -Tpng graph.tmp -o graph.png && \
    display graph.png
    @end example
    
    can be used to create and display an image representing the graph
    described by the @var{GRAPH_DESCRIPTION} string.