Merge remote-tracking branch 'libav/master'
[FFMpeg-mirror/mplayer-patches.git] / doc / libavfilter.texi
blobb452294a5ff8aa0099a338aafe167bf83401b0d8
1 \input texinfo @c -*- texinfo -*-
3 @settitle Libavfilter Documentation
4 @titlepage
5 @center @titlefont{Libavfilter Documentation}
6 @end titlepage
8 @top
10 @contents
12 @chapter Introduction
14 Libavfilter is the filtering API of Libav. It is the substitute of the
15 now deprecated 'vhooks' and started as a Google Summer of Code project.
17 But note that there may still be serious bugs in the code and its API
18 and ABI should not be considered stable yet!
20 @chapter Tutorial
22 In libavfilter, it is possible for filters to have multiple inputs and
23 multiple outputs.
24 To illustrate the sorts of things that are possible, we can
25 use a complex filter graph. For example, the following one:
27 @example
28 input --> split --> fifo -----------------------> overlay --> output
29             |                                        ^
30             |                                        |
31             +------> fifo --> crop --> vflip --------+
32 @end example
34 splits the stream in two streams, sends one stream through the crop filter
35 and the vflip filter before merging it back with the other stream by
36 overlaying it on top. You can use the following command to achieve this:
38 @example
39 ./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
40 @end example
42 The result will be that in output the top half of the video is mirrored
43 onto the bottom half.
45 Video filters are loaded using the @var{-vf} option passed to
46 avconv or to avplay. Filters in the same linear chain are separated by
47 commas. In our example, @var{split, fifo, overlay} are in one linear
48 chain, and @var{fifo, crop, vflip} are in another. The points where
49 the linear chains join are labeled by names enclosed in square
50 brackets. In our example, that is @var{[T1]} and @var{[T2]}. The magic
51 labels @var{[in]} and @var{[out]} are the points where video is input
52 and output.
54 Some filters take in input a list of parameters: they are specified
55 after the filter name and an equal sign, and are separated each other
56 by a semicolon.
58 There exist so-called @var{source filters} that do not have a video
59 input, and we expect in the future some @var{sink filters} that will
60 not have video output.
62 @chapter graph2dot
64 The @file{graph2dot} program included in the Libav @file{tools}
65 directory can be used to parse a filter graph description and issue a
66 corresponding textual representation in the dot language.
68 Invoke the command:
69 @example
70 graph2dot -h
71 @end example
73 to see how to use @file{graph2dot}.
75 You can then pass the dot description to the @file{dot} program (from
76 the graphviz suite of programs) and obtain a graphical representation
77 of the filter graph.
79 For example the sequence of commands:
80 @example
81 echo @var{GRAPH_DESCRIPTION} | \
82 tools/graph2dot -o graph.tmp && \
83 dot -Tpng graph.tmp -o graph.png && \
84 display graph.png
85 @end example
87 can be used to create and display an image representing the graph
88 described by the @var{GRAPH_DESCRIPTION} string.
90 @include filters.texi
92 @bye