|
|
@@ -26,6 +26,23 @@ ffmpeg is a very fast video and audio converter that can also grab from |
|
|
|
a live audio/video source. It can also convert between arbitrary sample |
|
|
|
rates and resize video on the fly with a high quality polyphase filter. |
|
|
|
|
|
|
|
ffmpeg reads from an arbitrary number of input "files" (which can be regular |
|
|
|
files, pipes, network streams, grabbing devices, etc.), specified by the |
|
|
|
@code{-i} option, and writes to an arbitrary number of output "files", which are |
|
|
|
specified by a plain output filename. Anything found on the commandline which |
|
|
|
cannot be interpreted as an option is considered to be an output filename. |
|
|
|
|
|
|
|
Each input or output file can in principle contain any number of streams of |
|
|
|
different types (video/audio/subtitle/attachment/data). Allowed number and/or |
|
|
|
types of streams can be limited by the container format. Selecting, which |
|
|
|
streams from which inputs go into output, is done either automatically or with |
|
|
|
the @code{-map} option (see the Stream selection chapter). |
|
|
|
|
|
|
|
To refer to input files in options, you must use their indices (0-based). E.g. |
|
|
|
the first input file is @code{0}, the second is @code{1} etc. Similarly, streams |
|
|
|
within a file are referred to by their indices. E.g. @code{2:3} refers to the |
|
|
|
fourth stream in the third input file. See also the Stream specifiers chapter. |
|
|
|
|
|
|
|
As a general rule, options are applied to the next specified |
|
|
|
file. Therefore, order is important, and you can have the same |
|
|
|
option on the command line multiple times. Each occurrence is |
|
|
@@ -33,6 +50,10 @@ then applied to the next input or output file. |
|
|
|
Exceptions from this rule are the global options (e.g. verbosity level), |
|
|
|
which should be specified first. |
|
|
|
|
|
|
|
Do not mix input and output files -- first specify all input files, then all |
|
|
|
output files. Also do not mix options which belong to different files. All |
|
|
|
options apply ONLY to the next input or output file and are reset between files. |
|
|
|
|
|
|
|
@itemize |
|
|
|
@item |
|
|
|
To set the video bitrate of the output file to 64kbit/s: |
|
|
@@ -171,10 +192,6 @@ To set the language of the second stream: |
|
|
|
ffmpeg -i INPUT -metadata:s:1 language=eng OUTPUT |
|
|
|
@end example |
|
|
|
|
|
|
|
@item -v @var{number} (@emph{global}) |
|
|
|
This option is deprecated and has no effect, use -loglevel |
|
|
|
to set verbosity level. |
|
|
|
|
|
|
|
@item -target @var{type} (@emph{output}) |
|
|
|
Specify target file type (@code{vcd}, @code{svcd}, @code{dvd}, @code{dv}, |
|
|
|
@code{dv50}). @var{type} may be prefixed with @code{pal-}, @code{ntsc-} or |
|
|
@@ -203,10 +220,48 @@ Stop writing to the stream after @var{framecount} frames. |
|
|
|
Use fixed quality scale (VBR). The meaning of @var{q} is |
|
|
|
codec-dependent. |
|
|
|
|
|
|
|
@item -filter[:@var{stream_specifier}] @var{filter_graph} |
|
|
|
@item -filter[:@var{stream_specifier}] @var{filter_graph} (@emph{output,per-stream}) |
|
|
|
@var{filter_graph} is a description of the filter graph to apply to |
|
|
|
the stream. Use @code{-filters} to show all the available filters |
|
|
|
(including also sources and sinks). |
|
|
|
@item -pre[:@var{stream_specifier}] @var{preset_name} (@emph{output,per-stream}) |
|
|
|
Specify the preset for matching stream(s). |
|
|
|
|
|
|
|
@item -stats (@emph{global}) |
|
|
|
Print encoding progress/statistics. On by default. |
|
|
|
|
|
|
|
@item -attach @var{filename} (@emph{output}) |
|
|
|
Add an attachment to the output file. This is supported by a few formats |
|
|
|
like Matroska for e.g. fonts used in rendering subtitles. Attachments |
|
|
|
are implemented as a specific type of stream, so this option will add |
|
|
|
a new stream to the file. It is then possible to use per-stream options |
|
|
|
on this stream in the usual way. Attachment streams created with this |
|
|
|
option will be created after all the other streams (i.e. those created |
|
|
|
with @code{-map} or automatic mappings). |
|
|
|
|
|
|
|
Note that for Matroska you also have to set the mimetype metadata tag: |
|
|
|
@example |
|
|
|
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv |
|
|
|
@end example |
|
|
|
(assuming that the attachment stream will be third in the output file). |
|
|
|
|
|
|
|
@item -dump_attachment[:@var{stream_specifier}] @var{filename} (@emph{input,per-stream}) |
|
|
|
Extract the matching attachment stream into a file named @var{filename}. If |
|
|
|
@var{filename} is empty, then the value of the @code{filename} metadata tag |
|
|
|
will be used. |
|
|
|
|
|
|
|
E.g. to extract the first attachment to a file named 'out.ttf': |
|
|
|
@example |
|
|
|
ffmpeg -dump_attachment:t:0 out.ttf INPUT |
|
|
|
@end example |
|
|
|
To extract all attachments to files determined by the @code{filename} tag: |
|
|
|
@example |
|
|
|
ffmpeg -dump_attachment:t "" INPUT |
|
|
|
@end example |
|
|
|
|
|
|
|
Technical note -- attachments are implemented as codec extradata, so this |
|
|
|
option can actually be used to extract extradata from any stream, not just |
|
|
|
attachments. |
|
|
|
|
|
|
|
@end table |
|
|
|
|
|
|
@@ -218,7 +273,7 @@ Set the number of video frames to record. This is an alias for @code{-frames:v}. |
|
|
|
@item -r[:@var{stream_specifier}] @var{fps} (@emph{input/output,per-stream}) |
|
|
|
Set frame rate (Hz value, fraction or abbreviation), (default = 25). |
|
|
|
@item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream}) |
|
|
|
Set frame size. The format is @samp{wxh} (ffserver default = 160x128, ffmpeg default = same as source). |
|
|
|
Set frame size. The format is @samp{wxh} (default - same as source). |
|
|
|
The following abbreviations are recognized: |
|
|
|
@table @samp |
|
|
|
@item sqcif |
|
|
@@ -593,6 +648,10 @@ frames after each specified time. |
|
|
|
This option can be useful to ensure that a seek point is present at a |
|
|
|
chapter mark or any other designated place in the output file. |
|
|
|
The timestamps must be specified in ascending order. |
|
|
|
|
|
|
|
@item -copyinkf[:@var{stream_specifier}] (@emph{output,per-stream}) |
|
|
|
When doing stream copy, copy also non-key frames found at the |
|
|
|
beginning. |
|
|
|
@end table |
|
|
|
|
|
|
|
@section Audio Options |
|
|
@@ -617,7 +676,7 @@ Disable audio recording. |
|
|
|
@item -acodec @var{codec} (@emph{input/output}) |
|
|
|
Set the audio codec. This is an alias for @code{-codec:a}. |
|
|
|
@item -sample_fmt[:@var{stream_specifier}] @var{sample_fmt} (@emph{output,per-stream}) |
|
|
|
Set the audio sample format. Use @code{-help sample_fmts} to get a list |
|
|
|
Set the audio sample format. Use @code{-sample_fmts} to get a list |
|
|
|
of supported sample formats. |
|
|
|
@end table |
|
|
|
|
|
|
@@ -995,6 +1054,21 @@ quality). |
|
|
|
@chapter Examples |
|
|
|
@c man begin EXAMPLES |
|
|
|
|
|
|
|
@section Preset files |
|
|
|
|
|
|
|
A preset file contains a sequence of @var{option=value} pairs, one for |
|
|
|
each line, specifying a sequence of options which can be specified also on |
|
|
|
the command line. Lines starting with the hash ('#') character are ignored and |
|
|
|
are used to provide comments. Empty lines are also ignored. Check the |
|
|
|
@file{presets} directory in the FFmpeg source tree for examples. |
|
|
|
|
|
|
|
Preset files are specified with the @code{pre} option, this option takes a |
|
|
|
preset name as input. FFmpeg searches for a file named @var{preset_name}.avpreset in |
|
|
|
the directories @file{$AVCONV_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in |
|
|
|
the data directory defined at configuration time (usually @file{$PREFIX/share/ffmpeg}) |
|
|
|
in that order. For example, if the argument is @code{libx264-max}, it will |
|
|
|
search for the file @file{libx264-max.avpreset}. |
|
|
|
|
|
|
|
@section Video and Audio grabbing |
|
|
|
|
|
|
|
If you specify the input format and device then ffmpeg can grab video |
|
|
|