The transcoding process in @command{ffmpeg} for each output can be described by
the following diagram:
-@example
+@verbatim
_______ ______________
| | | |
| input | demuxer | encoded data | decoder
|________| |______________|
-@end example
+@end verbatim
@command{ffmpeg} calls the libavformat library (containing demuxers) to read
input files and get packets containing encoded data from them. When there are
the same type. In the above diagram they can be represented by simply inserting
an additional step between decoding and encoding:
-@example
+@verbatim
_________ ______________
| | | |
| decoded | | encoded data |
| frames |
|__________|
-@end example
+@end verbatim
Simple filtergraphs are configured with the per-stream @option{-filter} option
(with @option{-vf} and @option{-af} aliases for video and audio respectively).
A simple filtergraph for video can look for example like this:
-@example
+@verbatim
_______ _____________ _______ ________
| | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______| |_____________| |_______| |________|
-@end example
+@end verbatim
Note that some filters change frame properties but not frame contents. E.g. the
@code{fps} filter in the example above changes number of frames, but does not
more than one input and/or output, or when output stream type is different from
input. They can be represented with the following diagram:
-@example
+@verbatim
_________
| |
| input 0 |\ __________
| input 2 |/
|_________|
-@end example
+@end verbatim
Complex filtergraphs are configured with the @option{-filter_complex} option.
Note that this option is global, since a complex filtergraph, by its nature,
for changing the container format or modifying container-level metadata. The
diagram above will, in this case, simplify to this:
-@example
+@verbatim
_______ ______________ ________
| | | | | |
| input | demuxer | encoded data | muxer | output |
| file | ---------> | packets | -------> | file |
|_______| |______________| |________|
-@end example
+@end verbatim
Since there is no decoding or encoding, it is very fast and there is no quality
loss. However, it might not work in some cases because of many factors. Applying