93 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| \input texinfo @c -*- texinfo -*-
 | |
| 
 | |
| @settitle Libavfilter Documentation
 | |
| @titlepage
 | |
| @center @titlefont{Libavfilter Documentation}
 | |
| @end titlepage
 | |
| 
 | |
| @top
 | |
| 
 | |
| @contents
 | |
| 
 | |
| @chapter Introduction
 | |
| 
 | |
| Libavfilter is the filtering API of FFmpeg. It is the substitute of the
 | |
| now deprecated 'vhooks' and started as a Google Summer of Code project.
 | |
| 
 | |
| Audio filtering integration into the main FFmpeg repository is a work in
 | |
| progress, so audio API and ABI should not be considered stable yet.
 | |
| 
 | |
| @chapter Tutorial
 | |
| 
 | |
| 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, 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
 | |
| ffmpeg -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
 | |
| @end example
 | |
| 
 | |
| The result will be that in output the top half of the video is mirrored
 | |
| onto the bottom half.
 | |
| 
 | |
| Video filters are loaded using the @var{-vf} option passed to
 | |
| ffmpeg or to ffplay. Filters in the same linear chain are separated by
 | |
| commas. In our example, @var{split, fifo, overlay} are in one linear
 | |
| chain, and @var{fifo, crop, vflip} are in another. The points where
 | |
| the linear chains join are labeled by names enclosed in square
 | |
| brackets. In our example, that is @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 in input a list of parameters: they are specified
 | |
| after the filter name and an equal sign, and are separated each other
 | |
| by a semicolon.
 | |
| 
 | |
| There exist so-called @var{source filters} that do not have a video
 | |
| input, and we expect in the future some @var{sink filters} that will
 | |
| not have video output.
 | |
| 
 | |
| @chapter graph2dot
 | |
| 
 | |
| The @file{graph2dot} program included in the FFmpeg @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.
 | |
| 
 | |
| @include filters.texi
 | |
| 
 | |
| @bye
 |