]> git.sesse.net Git - ffmpeg/blob - doc/libavfilter.texi
lavc: Remove old vaapi decode infrastructure
[ffmpeg] / doc / libavfilter.texi
1 \input texinfo @c -*- texinfo -*-
2
3 @settitle Libavfilter Documentation
4 @titlepage
5 @center @titlefont{Libavfilter Documentation}
6 @end titlepage
7
8 @top
9
10 @contents
11
12 @chapter Introduction
13
14 Libavfilter is the filtering API of Libav. It replaces 'vhooks', and
15 started as a Google Summer of Code project.
16
17 Note that there may still be serious bugs in the code and its API
18 and ABI should not be considered stable yet!
19
20 @chapter Tutorial
21
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:
26
27 @example
28 input --> split --> fifo -----------------------> overlay --> output
29             |                                        ^
30             |                                        |
31             +------> fifo --> crop --> vflip --------+
32 @end example
33
34 splits the stream in two streams, then 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:
37
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
41
42 The result will be that the top half of the video is mirrored
43 onto the bottom half of the output video.
44
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}, @var{fifo}, and @var{overlay} are in one
48 linear chain, and @var{fifo}, @var{crop}, and @var{vflip} are in another. The
49 points where the linear chains join are labeled by names enclosed in square
50 brackets. In our example, they join at @var{[T1]} and @var{[T2]}. The magic
51 labels @var{[in]} and @var{[out]} are the points where video is input
52 and output.
53
54 Some filters take a list of parameters: they are specified
55 after the filter name and an equal sign, and are separated
56 by a semicolon.
57
58 There are so-called @var{source filters} that do not take video
59 input, and we expect that some @var{sink filters} will
60 not have video output, at some point in the future.
61
62 @chapter graph2dot
63
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.
67
68 Invoke the command:
69 @example
70 graph2dot -h
71 @end example
72
73 to see how to use @file{graph2dot}.
74
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.
78
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
86
87 can be used to create and display an image representing the graph
88 described by the @var{GRAPH_DESCRIPTION} string.
89
90 @include filters.texi
91
92 @bye