Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFmpeg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libremedia
Tethys
FFmpeg
Commits
2b1f105f
Commit
2b1f105f
authored
12 years ago
by
Anton Khirnov
Browse files
Options
Downloads
Patches
Plain Diff
doc/avconv: add some details about the transcoding process.
parent
a982e5a0
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
doc/avconv.texi
+120
-0
120 additions, 0 deletions
doc/avconv.texi
with
120 additions
and
0 deletions
doc/avconv.texi
+
120
−
0
View file @
2b1f105f
...
@@ -79,6 +79,126 @@ The format option may be needed for raw input files.
...
@@ -79,6 +79,126 @@ The format option may be needed for raw input files.
@c man end DESCRIPTION
@c man end DESCRIPTION
@chapter Detailed description
@c man begin DETAILED DESCRIPTION
The transcoding process in @command
{
avconv
}
for each output can be described by
the following diagram:
@example
_______
______________
_________
______________
________
| | | | | | | | | |
| input | demuxer | encoded data | decoder | decoded | encoder | encoded data | muxer | output |
| file | ---------> | packets | ---------> | frames | ---------> | packets | -------> | file |
|
_______
| |
______________
| |
_________
| |
______________
| |
________
|
@end example
@command
{
avconv
}
calls the libavformat library (containing demuxers) to read
input files and get packets containing encoded data from them. When there are
multiple input files, @command
{
avconv
}
tries to keep them synchronized by
tracking lowest timestamp on any active input stream.
Encoded packets are then passed to the decoder (unless streamcopy is selected
for the stream, see further for a description). The decoder produces
uncompressed frames (raw video/PCM audio/...) which can be processed further by
filtering (see next section). After filtering the frames are passed to the
encoder, which encodes them and outputs encoded packets again. Finally those are
passed to the muxer, which writes the encoded packets to the output file.
@section Filtering
Before encoding, @command
{
avconv
}
can process raw audio and video frames using
filters from the libavfilter library. Several chained filters form a filter
graph. @command
{
avconv
}
distinguishes between two types of filtergraphs -
simple and complex.
@subsection Simple filtergraphs
Simple filtergraphs are those that have exactly one input and output, both of
the same type. In the above diagram they can be represented by simply inserting
an additional step between decoding and encoding:
@example
_________
__________
______________
| | | | | |
| decoded | simple filtergraph | filtered | encoder | encoded data |
| frames | -------------------> | frames | ---------> | packets |
|
_________
| |
__________
| |
______________
|
@end example
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
_______
_____________
_______
_____
________
| | | | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | fps | ---> | output |
|
_______
| |
_____________
| |
_______
| |
_____
| |
________
|
@end example
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
touch the frame contents. Another example is the @code
{
setpts
}
filter, which
only sets timestamps and otherwise passes the frames unchanged.
@subsection Complex filtergraphs
Complex filtergraphs are those which cannot be described as simply a linear
processing chain applied to one stream. This is the case e.g. when the graph has
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
_________
| |
| input 0 |
\
__________
|
_________
|
\
| |
\
_________
/| output 0 |
\
| | / |
__________
|
_________
\|
complex | /
| | | |/
| input 1 |---->| filter |
\
|
_________
| | |
\
__________
/| graph |
\
| |
/ | |
\|
output 1 |
_________
/ |
_________
| |
__________
|
| | /
| input 2 |/
|
_________
|
@end example
Complex filtergraphs are configured with the @option
{
-filter
_
complex
}
option.
Note that this option is global, since a complex filtergraph by its nature
cannot be unambiguously associated with a single stream or file.
A trivial example of a complex filtergraph is the @code
{
overlay
}
filter, which
has two video inputs and one video output, containing one video overlaid on top
of the other. Its audio counterpart is the @code
{
amix
}
filter.
@section Stream copy
Stream copy is a mode selected by supplying the @code
{
copy
}
parameter to the
@option
{
-codec
}
option. It makes @command
{
avconv
}
omit the decoding and encoding
step for the specified stream, so it does only demuxing and muxing. It is useful
for changing the container format or modifying container-level metadata. The
diagram above will in this case simplify to this:
@example
_______
______________
________
| | | | | |
| input | demuxer | encoded data | muxer | output |
| file | ---------> | packets | -------> | file |
|
_______
| |
______________
| |
________
|
@end example
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
filters is obviously also impossible, since filters work on uncompressed data.
@c man end DETAILED DESCRIPTION
@chapter Stream selection
@chapter Stream selection
@c man begin STREAM SELECTION
@c man begin STREAM SELECTION
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment