ffmpeg.texi 58.8 KB
Newer Older
1
\input texinfo @c -*- texinfo -*-
2
@documentencoding UTF-8
3

4
@settitle ffmpeg Documentation
5
@titlepage
6
@center @titlefont{ffmpeg Documentation}
7 8
@end titlepage

9 10 11 12
@top

@contents

13 14
@chapter Synopsis

15
ffmpeg [@var{global_options}] @{[@var{input_file_options}] -i @file{input_file}@} ... @{[@var{output_file_options}] @file{output_file}@} ...
16

17 18
@chapter Description
@c man begin DESCRIPTION
19

20
@command{ffmpeg} is a very fast video and audio converter that can also grab from
21 22
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.
23

24
@command{ffmpeg} reads from an arbitrary number of input "files" (which can be regular
Michael Niedermayer's avatar
Michael Niedermayer committed
25 26
files, pipes, network streams, grabbing devices, etc.), specified by the
@code{-i} option, and writes to an arbitrary number of output "files", which are
Michael Niedermayer's avatar
Michael Niedermayer committed
27
specified by a plain output filename. Anything found on the command line which
Michael Niedermayer's avatar
Michael Niedermayer committed
28 29
cannot be interpreted as an option is considered to be an output filename.

30 31 32 33 34
Each input or output file can, in principle, contain any number of streams of
different types (video/audio/subtitle/attachment/data). The allowed number and/or
types of streams may be limited by the container format. Selecting which
streams from which inputs will go into which output is either done automatically
or with the @code{-map} option (see the Stream selection chapter).
Michael Niedermayer's avatar
Michael Niedermayer committed
35 36

To refer to input files in options, you must use their indices (0-based). E.g.
37
the first input file is @code{0}, the second is @code{1}, etc. Similarly, streams
Michael Niedermayer's avatar
Michael Niedermayer committed
38
within a file are referred to by their indices. E.g. @code{2:3} refers to the
39
fourth stream in the third input file. Also see the Stream specifiers chapter.
Michael Niedermayer's avatar
Michael Niedermayer committed
40

41 42 43 44
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
then applied to the next input or output file.
45 46
Exceptions from this rule are the global options (e.g. verbosity level),
which should be specified first.
47

Michael Niedermayer's avatar
Michael Niedermayer committed
48 49 50 51
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.

52 53
@itemize
@item
54
To set the video bitrate of the output file to 64 kbit/s:
55
@example
rogerdpack's avatar
rogerdpack committed
56
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
57 58
@end example

59 60
@item
To force the frame rate of the output file to 24 fps:
61 62 63 64
@example
ffmpeg -i input.avi -r 24 output.avi
@end example

65 66
@item
To force the frame rate of the input file (valid for raw formats only)
67 68 69 70
to 1 fps and the frame rate of the output file to 24 fps:
@example
ffmpeg -r 1 -i input.m2v -r 24 output.avi
@end example
71
@end itemize
72 73 74 75 76

The format option may be needed for raw input files.

@c man end DESCRIPTION

77 78 79
@chapter Detailed description
@c man begin DETAILED DESCRIPTION

80
The transcoding process in @command{ffmpeg} for each output can be described by
81 82
the following diagram:

83
@verbatim
84 85 86 87 88 89 90 91 92 93
 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                           v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
94 95
                                      |_________|
 ________             ______________       |
96 97 98 99 100
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder
|________|           |______________|

101

102
@end verbatim
103

104
@command{ffmpeg} calls the libavformat library (containing demuxers) to read
105
input files and get packets containing encoded data from them. When there are
106
multiple input files, @command{ffmpeg} tries to keep them synchronized by
107 108 109 110 111
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
112 113
filtering (see next section). After filtering, the frames are passed to the
encoder, which encodes them and outputs encoded packets. Finally those are
114 115 116
passed to the muxer, which writes the encoded packets to the output file.

@section Filtering
117
Before encoding, @command{ffmpeg} can process raw audio and video frames using
118
filters from the libavfilter library. Several chained filters form a filter
119
graph. @command{ffmpeg} distinguishes between two types of filtergraphs:
120 121 122 123 124 125 126
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:

127
@verbatim
128 129 130
 _________                        ______________
|         |                      |              |
| decoded |                      | encoded data |
131 132
| frames  |\                   _ | packets      |
|_________| \                  /||______________|
133
             \   __________   /
134 135
  simple     _\||          | /  encoder
  filtergraph   | filtered |/
136 137
                | frames   |
                |__________|
138

139
@end verbatim
140 141 142 143 144

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:

145
@verbatim
146 147 148 149
 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|
150

151
@end verbatim
152 153 154 155 156 157 158 159

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
160
processing chain applied to one stream. This is the case, for example, when the graph has
161 162 163
more than one input and/or output, or when output stream type is different from
input. They can be represented with the following diagram:

164
@verbatim
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
 _________
|         |
| input 0 |\                    __________
|_________| \                  |          |
             \   _________    /| output 0 |
              \ |         |  / |__________|
 _________     \| complex | /
|         |     |         |/
| input 1 |---->| filter  |\
|_________|     |         | \   __________
               /| graph   |  \ |          |
              / |         |   \| output 1 |
 _________   /  |_________|    |__________|
|         | /
| input 2 |/
|_________|

182
@end verbatim
183 184

Complex filtergraphs are configured with the @option{-filter_complex} option.
185
Note that this option is global, since a complex filtergraph, by its nature,
186 187
cannot be unambiguously associated with a single stream or file.

188 189
The @option{-lavfi} option is equivalent to @option{-filter_complex}.

190 191 192 193 194 195
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
196
@option{-codec} option. It makes @command{ffmpeg} omit the decoding and encoding
197 198
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
199
diagram above will, in this case, simplify to this:
200

201
@verbatim
202 203 204 205 206 207
 _______              ______________            ________
|       |            |              |          |        |
| input |  demuxer   | encoded data |  muxer   | output |
| file  | ---------> | packets      | -------> | file   |
|_______|            |______________|          |________|

208
@end verbatim
209 210

Since there is no decoding or encoding, it is very fast and there is no quality
211
loss. However, it might not work in some cases because of many factors. Applying
212 213 214 215
filters is obviously also impossible, since filters work on uncompressed data.

@c man end DETAILED DESCRIPTION

216 217 218
@chapter Stream selection
@c man begin STREAM SELECTION

219
By default, @command{ffmpeg} includes only one stream of each type (video, audio, subtitle)
220
present in the input files and adds them to each output file.  It picks the
221 222 223 224
"best" of each based upon the following criteria: for video, it is the stream
with the highest resolution, for audio, it is the stream with the most channels, for
subtitles, it is the first subtitle stream. In the case where several streams of
the same type rate equally, the stream with the lowest index is chosen.
225

226
You can disable some of those defaults by using the @code{-vn/-an/-sn} options. For
227 228 229 230 231
full manual control, use the @code{-map} option, which disables the defaults just
described.

@c man end STREAM SELECTION

232
@chapter Options
233
@c man begin OPTIONS
234

235
@include fftools-common-opts.texi
236

237 238
@section Main options

239
@table @option
240

241
@item -f @var{fmt} (@emph{input/output})
242
Force input or output file format. The format is normally auto detected for input
243
files and guessed from the file extension for output files, so this option is not
244
needed in most cases.
Fabrice Bellard's avatar
Fabrice Bellard committed
245

246
@item -i @var{filename} (@emph{input})
247
input file name
248

249
@item -y (@emph{global})
250
Overwrite output files without asking.
251

252
@item -n (@emph{global})
253 254
Do not overwrite output files, and exit immediately if a specified
output file already exists.
255

256 257 258 259 260
@item -c[:@var{stream_specifier}] @var{codec} (@emph{input/output,per-stream})
@itemx -codec[:@var{stream_specifier}] @var{codec} (@emph{input/output,per-stream})
Select an encoder (when used before an output file) or a decoder (when used
before an input file) for one or more streams. @var{codec} is the name of a
decoder/encoder or a special value @code{copy} (output only) to indicate that
261
the stream is not to be re-encoded.
262 263 264 265 266 267 268 269 270 271 272 273 274 275

For example
@example
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
@end example
encodes all video streams with libx264 and copies all audio streams.

For each stream, the last matching @code{c} option is applied, so
@example
ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
@end example
will copy all the streams except the second video, which will be encoded with
libx264, and the 138th audio, which will be encoded with libvorbis.

276 277 278 279 280 281 282
@item -t @var{duration} (@emph{input/output})
When used as an input option (before @code{-i}), limit the @var{duration} of
data read from the input file.

When used as an output option (before an output filename), stop writing the
output after its duration reaches @var{duration}.

283
@var{duration} may be a number in seconds, or in @code{hh:mm:ss[.xxx]} form.
284

285 286 287 288 289 290 291 292
-to and -t are mutually exclusive and -t has priority.

@item -to @var{position} (@emph{output})
Stop writing the output at @var{position}.
@var{position} may be a number in seconds, or in @code{hh:mm:ss[.xxx]} form.

-to and -t are mutually exclusive and -t has priority.

293
@item -fs @var{limit_size} (@emph{output})
294
Set the file size limit, expressed in bytes.
295

296 297
@item -ss @var{position} (@emph{input/output})
When used as an input option (before @code{-i}), seeks in this input file to
298
@var{position}. Note the in most formats it is not possible to seek exactly, so
299
@command{ffmpeg} will seek to the closest seek point before @var{position}.
300 301 302 303 304 305 306
When transcoding and @option{-accurate_seek} is enabled (the default), this
extra segment between the seek point and @var{position} will be decoded and
discarded. When doing stream copy or when @option{-noaccurate_seek} is used, it
will be preserved.

When used as an output option (before an output filename), decodes but discards
input until the timestamps reach @var{position}.
307

308 309 310
@var{position} may be either in seconds or in @code{hh:mm:ss[.xxx]} form.

@item -itsoffset @var{offset} (@emph{input})
311
Set the input time offset.
312

313 314 315 316 317 318 319 320
@var{offset} must be a time duration specification,
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.

The offset is added to the timestamps of the input files. Specifying
a positive offset means that the corresponding streams are delayed by
the time duration specified in @var{offset}.

@item -timestamp @var{date} (@emph{output})
321
Set the recording timestamp in the container.
322 323 324

@var{date} must be a time duration specification,
see @ref{date syntax,,the Date section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
325

326
@item -metadata[:metadata_specifier] @var{key}=@var{value} (@emph{output,per-metadata})
Stefano Sabatini's avatar
Stefano Sabatini committed
327
Set a metadata key/value pair.
328

329 330 331 332 333 334 335
An optional @var{metadata_specifier} may be given to set metadata
on streams or chapters. See @code{-map_metadata} documentation for
details.

This option overrides metadata set with @code{-map_metadata}. It is
also possible to delete metadata by using an empty value.

336
For example, for setting the title in the output file:
337
@example
338
ffmpeg -i in.avi -metadata title="my title" out.flv
339
@end example
340

Michael Niedermayer's avatar
Michael Niedermayer committed
341
To set the language of the first audio stream:
342
@example
343
ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
344 345 346
@end example

@item -target @var{type} (@emph{output})
347 348 349 350
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
@code{film-} to use the corresponding standard. All the format options
(bitrate, codecs, buffer sizes) are then set automatically. You can just type:
Fabrice Bellard's avatar
Fabrice Bellard committed
351 352 353 354 355

@example
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
@end example

Diego Biurrun's avatar
Diego Biurrun committed
356 357
Nevertheless you can specify additional options as long as you know
they do not conflict with the standard, as in:
358 359 360 361 362

@example
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
@end example

363
@item -dframes @var{number} (@emph{output})
364
Set the number of data frames to output. This is an alias for @code{-frames:d}.
365

366 367
@item -frames[:@var{stream_specifier}] @var{framecount} (@emph{output,per-stream})
Stop writing to the stream after @var{framecount} frames.
368

369 370
@item -q[:@var{stream_specifier}] @var{q} (@emph{output,per-stream})
@itemx -qscale[:@var{stream_specifier}] @var{q} (@emph{output,per-stream})
371
Use fixed quality scale (VBR). The meaning of @var{q}/@var{qscale} is
372
codec-dependent.
373 374 375 376 377
If @var{qscale} is used without a @var{stream_specifier} then it applies only
to the video stream, this is to maintain compatibility with previous behavior
and as specifying the same codec specific value to 2 different codecs that is
audio and video generally is not what is intended when no stream_specifier is
used.
378

379
@anchor{filter_option}
380 381
@item -filter[:@var{stream_specifier}] @var{filtergraph} (@emph{output,per-stream})
Create the filtergraph specified by @var{filtergraph} and use it to
382 383
filter the stream.

384
@var{filtergraph} is a description of the filtergraph to apply to
385
the stream, and must have a single input and a single output of the
386
same type of the stream. In the filtergraph, the input is associated
387 388 389 390 391
to the label @code{in}, and the output to the label @code{out}. See
the ffmpeg-filters manual for more information about the filtergraph
syntax.

See the @ref{filter_complex_option,,-filter_complex option} if you
392
want to create filtergraphs with multiple inputs and/or outputs.
393

394 395 396 397 398
@item -filter_script[:@var{stream_specifier}] @var{filename} (@emph{output,per-stream})
This option is similar to @option{-filter}, the only difference is that its
argument is the name of the file from which a filtergraph description is to be
read.

Michael Niedermayer's avatar
Michael Niedermayer committed
399 400 401 402
@item -pre[:@var{stream_specifier}] @var{preset_name} (@emph{output,per-stream})
Specify the preset for matching stream(s).

@item -stats (@emph{global})
403 404
Print encoding progress/statistics. It is on by default, to explicitly
disable it you need to specify @code{-nostats}.
Michael Niedermayer's avatar
Michael Niedermayer committed
405

406 407 408 409 410 411 412 413
@item -progress @var{url} (@emph{global})
Send program-friendly progress information to @var{url}.

Progress information is written approximately every second and at the end of
the encoding process. It is made of "@var{key}=@var{value}" lines. @var{key}
consists of only alphanumeric characters. The last key of a sequence of
progress information is always "progress".

414 415
@item -stdin
Enable interaction on standard input. On by default unless standard input is
416 417
used as an input. To explicitly disable interaction you need to specify
@code{-nostdin}.
418

419 420 421 422
Disabling interaction on standard input is useful, for example, if
ffmpeg is in the background process group. Roughly the same result can
be achieved with @code{ffmpeg ... < /dev/null} but it requires a
shell.
423

424 425 426 427 428 429 430 431
@item -debug_ts (@emph{global})
Print timestamp information. It is off by default. This option is
mostly useful for testing and debugging purposes, and the output
format may change from one version to another, so it should not be
employed by portable scripts.

See also the option @code{-fdebug ts}.

Michael Niedermayer's avatar
Michael Niedermayer committed
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
@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
454
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
Michael Niedermayer's avatar
Michael Niedermayer committed
455 456 457
@end example
To extract all attachments to files determined by the @code{filename} tag:
@example
458
ffmpeg -dump_attachment:t "" -i INPUT
Michael Niedermayer's avatar
Michael Niedermayer committed
459 460 461 462 463
@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.
464

465 466 467
@item -noautorotate
Disable automatically rotating video based on file metadata.

468 469 470 471
@end table

@section Video Options

472
@table @option
473
@item -vframes @var{number} (@emph{output})
474
Set the number of video frames to output. This is an alias for @code{-frames:v}.
475
@item -r[:@var{stream_specifier}] @var{fps} (@emph{input/output,per-stream})
476 477 478 479
Set frame rate (Hz value, fraction or abbreviation).

As an input option, ignore any timestamps stored in the file and instead
generate timestamps assuming constant frame rate @var{fps}.
480 481 482
This is not the same as the @option{-framerate} option used for some input formats
like image2 or v4l2 (it used to be the same in older versions of FFmpeg).
If in doubt use @option{-framerate} instead of the input option @option{-r}.
483 484

As an output option, duplicate or drop input frames to achieve constant output
485
frame rate @var{fps}.
486

487
@item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream})
488 489 490 491 492 493 494 495 496 497
Set frame size.

As an input option, this is a shortcut for the @option{video_size} private
option, recognized by some demuxers for which the frame size is either not
stored in the file or is configurable -- e.g. raw video or video grabbers.

As an output option, this inserts the @code{scale} video filter to the
@emph{end} of the corresponding filtergraph. Please use the @code{scale} filter
directly to insert it at the beginning or some other place.

498
The format is @samp{wxh} (default - same as source).
Fabrice Bellard's avatar
Fabrice Bellard committed
499

500
@item -aspect[:@var{stream_specifier}] @var{aspect} (@emph{output,per-stream})
501 502 503 504 505 506 507
Set the video display aspect ratio specified by @var{aspect}.

@var{aspect} can be a floating point number string, or a string of the
form @var{num}:@var{den}, where @var{num} and @var{den} are the
numerator and denominator of the aspect ratio. For example "4:3",
"16:9", "1.3333", and "1.7777" are valid argument values.

508 509 510 511
If used together with @option{-vcodec copy}, it will affect the aspect ratio
stored at container level, but not the aspect ratio stored in encoded
frames, if it exists.

512
@item -vn (@emph{output})
Diego Biurrun's avatar
Diego Biurrun committed
513
Disable video recording.
514

515 516 517
@item -vcodec @var{codec} (@emph{output})
Set the video codec. This is an alias for @code{-codec:v}.

518
@item -pass[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
519 520 521 522 523
Select the pass number (1 or 2). It is used to do two-pass
video encoding. The statistics of the video are recorded in the first
pass into a log file (see also the option -passlogfile),
and in the second pass that log file is used to generate the video
at the exact requested bitrate.
524 525 526
On pass 1, you may just deactivate audio and set output to null,
examples for Windows and Unix:
@example
527 528
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
529
@end example
530

531
@item -passlogfile[:@var{stream_specifier}] @var{prefix} (@emph{output,per-stream})
532 533 534
Set two-pass log file name prefix to @var{prefix}, the default file name
prefix is ``ffmpeg2pass''. The complete file name will be
@file{PREFIX-N.log}, where N is a number specific to the output
535
stream
536

537 538
@item -vf @var{filtergraph} (@emph{output})
Create the filtergraph specified by @var{filtergraph} and use it to
539
filter the stream.
540

541
This is an alias for @code{-filter:v}, see the @ref{filter_option,,-filter option}.
542 543
@end table

544
@section Advanced Video options
545

546
@table @option
547 548
@item -pix_fmt[:@var{stream_specifier}] @var{format} (@emph{input/output,per-stream})
Set pixel format. Use @code{-pix_fmts} to show all the supported
549
pixel formats.
550 551 552 553
If the selected pixel format can not be selected, ffmpeg will print a
warning and select the best pixel format supported by the encoder.
If @var{pix_fmt} is prefixed by a @code{+}, ffmpeg will exit with an error
if the requested pixel format can not be selected, and automatic conversions
554
inside filtergraphs are disabled.
555 556 557
If @var{pix_fmt} is a single @code{+}, ffmpeg selects the same pixel format
as the input (or graph output) and automatic conversions are disabled.

558
@item -sws_flags @var{flags} (@emph{input/output})
559
Set SwScaler flags.
560
@item -vdt @var{n}
561
Discard threshold.
Stefano Sabatini's avatar
Stefano Sabatini committed
562

563
@item -rc_override[:@var{stream_specifier}] @var{override} (@emph{output,per-stream})
564
Rate control override for specific intervals, formatted as "int,int,int"
565 566 567
list separated with slashes. Two first values are the beginning and
end frame numbers, last one is quantizer to use if positive, or quality
factor if negative.
Fabrice Bellard's avatar
Fabrice Bellard committed
568

569
@item -ilme
Diego Biurrun's avatar
Diego Biurrun committed
570 571 572 573 574
Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
Use this option if your input file is interlaced and you want
to keep the interlaced format for minimum losses.
The alternative is to deinterlace the input stream with
@option{-deinterlace}, but deinterlacing introduces losses.
Fabrice Bellard's avatar
Fabrice Bellard committed
575
@item -psnr
Diego Biurrun's avatar
Diego Biurrun committed
576
Calculate PSNR of compressed frames.
Fabrice Bellard's avatar
Fabrice Bellard committed
577
@item -vstats
Diego Biurrun's avatar
Diego Biurrun committed
578
Dump video coding statistics to @file{vstats_HHMMSS.log}.
579
@item -vstats_file @var{file}
580
Dump video coding statistics to @var{file}.
581
@item -top[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
582
top=1/bottom=0/auto=-1 field first
583
@item -dc @var{precision}
584
Intra_dc_precision.
585 586 587 588
@item -vtag @var{fourcc/tag} (@emph{output})
Force video tag/fourcc. This is an alias for @code{-tag:v}.
@item -qphist (@emph{global})
Show QP histogram
589
@item -vbsf @var{bitstream_filter}
590
Deprecated see -bsf
591

592
@item -force_key_frames[:@var{stream_specifier}] @var{time}[,@var{time}...] (@emph{output,per-stream})
593
@item -force_key_frames[:@var{stream_specifier}] expr:@var{expr} (@emph{output,per-stream})
594 595
Force key frames at the specified timestamps, more precisely at the first
frames after each specified time.
596 597 598 599 600

If the argument is prefixed with @code{expr:}, the string @var{expr}
is interpreted like an expression and is evaluated for each frame. A
key frame is forced in case the evaluation is non-zero.

601 602 603
If one of the times is "@code{chapters}[@var{delta}]", it is expanded into
the time of the beginning of all chapters in the file, shifted by
@var{delta}, expressed as a time in seconds.
604 605
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.
606 607 608 609 610 611

For example, to insert a key frame at 5 minutes, plus key frames 0.1 second
before the beginning of every chapter:
@example
-force_key_frames 0:05:00,chapters-0.1
@end example
Michael Niedermayer's avatar
Michael Niedermayer committed
612

613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643
The expression in @var{expr} can contain the following constants:
@table @option
@item n
the number of current processed frame, starting from 0
@item n_forced
the number of forced frames
@item prev_forced_n
the number of the previous forced frame, it is @code{NAN} when no
keyframe was forced yet
@item prev_forced_t
the time of the previous forced frame, it is @code{NAN} when no
keyframe was forced yet
@item t
the time of the current processed frame
@end table

For example to force a key frame every 5 seconds, you can specify:
@example
-force_key_frames expr:gte(t,n_forced*5)
@end example

To force a key frame 5 seconds after the time of the last forced one,
starting from second 13:
@example
-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
@end example

Note that forcing too many keyframes is very harmful for the lookahead
algorithms of certain encoders: using fixed-GOP options or similar
would be more efficient.

Michael Niedermayer's avatar
Michael Niedermayer committed
644 645 646
@item -copyinkf[:@var{stream_specifier}] (@emph{output,per-stream})
When doing stream copy, copy also non-key frames found at the
beginning.
647 648 649 650 651 652 653 654 655 656

@item -hwaccel[:@var{stream_specifier}] @var{hwaccel} (@emph{input,per-stream})
Use hardware acceleration to decode the matching stream(s). The allowed values
of @var{hwaccel} are:
@table @option
@item none
Do not use any hardware acceleration (the default).

@item auto
Automatically select the hardware acceleration method.
657

658 659 660
@item vda
Use Apple VDA hardware acceleration.

661 662
@item vdpau
Use VDPAU (Video Decode and Presentation API for Unix) hardware acceleration.
663 664 665

@item dxva2
Use DXVA2 (DirectX Video Acceleration) hardware acceleration.
666 667 668 669 670 671
@end table

This option has no effect if the selected hwaccel is not available or not
supported by the chosen decoder.

Note that most acceleration methods are intended for playback and will not be
672
faster than software decoding on modern CPUs. Additionally, @command{ffmpeg}
673 674 675 676 677 678 679 680 681 682
will usually need to copy the decoded frames from the GPU memory into the system
memory, resulting in further performance loss. This option is thus mainly
useful for testing.

@item -hwaccel_device[:@var{stream_specifier}] @var{hwaccel_device} (@emph{input,per-stream})
Select a device to use for hardware acceleration.

This option only makes sense when the @option{-hwaccel} option is also
specified. Its exact meaning depends on the specific hardware acceleration
method chosen.
683 684 685 686 687

@table @option
@item vdpau
For VDPAU, this option specifies the X11 display/screen to use. If this option
is not specified, the value of the @var{DISPLAY} environment variable is used
688 689 690 691

@item dxva2
For DXVA2, this option should contain the number of the display adapter to use.
If this option is not specified, the default adapter is used.
692
@end table
Fabrice Bellard's avatar
Fabrice Bellard committed
693 694 695 696 697
@end table

@section Audio Options

@table @option
698
@item -aframes @var{number} (@emph{output})
699
Set the number of audio frames to output. This is an alias for @code{-frames:a}.
700
@item -ar[:@var{stream_specifier}] @var{freq} (@emph{input/output,per-stream})
701 702 703 704
Set the audio sampling frequency. For output streams it is set by
default to the frequency of the corresponding input stream. For input
streams this option only makes sense for audio grabbing devices and raw
demuxers and is mapped to the corresponding demuxer options.
705 706 707
@item -aq @var{q} (@emph{output})
Set the audio quality (codec-specific, VBR). This is an alias for -q:a.
@item -ac[:@var{stream_specifier}] @var{channels} (@emph{input/output,per-stream})
708 709 710 711
Set the number of audio channels. For output streams it is set by
default to the number of input audio channels. For input streams
this option only makes sense for audio grabbing devices and raw demuxers
and is mapped to the corresponding demuxer options.
712
@item -an (@emph{output})
Diego Biurrun's avatar
Diego Biurrun committed
713
Disable audio recording.
714 715 716
@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})
Michael Niedermayer's avatar
Michael Niedermayer committed
717
Set the audio sample format. Use @code{-sample_fmts} to get a list
718
of supported sample formats.
719

720 721
@item -af @var{filtergraph} (@emph{output})
Create the filtergraph specified by @var{filtergraph} and use it to
722 723 724
filter the stream.

This is an alias for @code{-filter:a}, see the @ref{filter_option,,-filter option}.
725 726
@end table

727
@section Advanced Audio options
728 729

@table @option
730 731
@item -atag @var{fourcc/tag} (@emph{output})
Force audio tag/fourcc. This is an alias for @code{-tag:a}.
732
@item -absf @var{bitstream_filter}
733
Deprecated, see -bsf
734 735 736 737 738 739
@item -guess_layout_max @var{channels} (@emph{input,per-stream})
If some input channel layout is not known, try to guess only if it
corresponds to at most the specified number of channels. For example, 2
tells to @command{ffmpeg} to recognize 1 channel as mono and 2 channels as
stereo but not 6 channels as 5.1. The default is to always try to guess. Use
0 to disable all guessing.
740 741
@end table

742
@section Subtitle options
743 744

@table @option
745 746 747
@item -scodec @var{codec} (@emph{input/output})
Set the subtitle codec. This is an alias for @code{-codec:s}.
@item -sn (@emph{output})
Diego Biurrun's avatar
Diego Biurrun committed
748
Disable subtitle recording.
749
@item -sbsf @var{bitstream_filter}
750
Deprecated, see -bsf
Fabrice Bellard's avatar
Fabrice Bellard committed
751 752
@end table

753
@section Advanced Subtitle options
754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769

@table @option

@item -fix_sub_duration
Fix subtitles durations. For each subtitle, wait for the next packet in the
same stream and adjust the duration of the first to avoid overlap. This is
necessary with some subtitles codecs, especially DVB subtitles, because the
duration in the original packet is only a rough estimate and the end is
actually marked by an empty subtitle frame. Failing to use this option when
necessary can result in exaggerated durations or muxing failures due to
non-monotonic timestamps.

Note that this option will delay the output of all data until the next
subtitle packet is decoded: it may increase memory consumption and latency a
lot.

770 771 772
@item -canvas_size @var{size}
Set the size of the canvas used to render subtitles.

773 774
@end table

Fabrice Bellard's avatar
Fabrice Bellard committed
775 776 777
@section Advanced options

@table @option
778
@item -map [-]@var{input_file_id}[:@var{stream_specifier}][,@var{sync_file_id}[:@var{stream_specifier}]] | @var{[linklabel]} (@emph{output})
779

780
Designate one or more input streams as a source for the output file. Each input
781 782
stream is identified by the input file index @var{input_file_id} and
the input stream index @var{input_stream_id} within the input
783 784
file. Both indices start at 0. If specified,
@var{sync_file_id}:@var{stream_specifier} sets which input stream
785 786
is used as a presentation sync reference.

787
The first @code{-map} option on the command line specifies the
788 789 790
source for output stream 0, the second @code{-map} option specifies
the source for output stream 1, etc.

791 792 793
A @code{-} character before the stream identifier creates a "negative" mapping.
It disables matching streams from already created mappings.

794 795 796 797
An alternative @var{[linklabel]} form will map outputs from complex filter
graphs (see the @option{-filter_complex} option) to the output file.
@var{linklabel} must correspond to a defined output link label in the graph.

798 799 800 801 802
For example, to map ALL streams from the first input file to output
@example
ffmpeg -i INPUT -map 0 output
@end example

803
For example, if you have two audio streams in the first input file,
804 805
these streams are identified by "0:0" and "0:1". You can use
@code{-map} to select which streams to place in an output file. For
806 807
example:
@example
808
ffmpeg -i INPUT -map 0:1 out.wav
809
@end example
810
will map the input stream in @file{INPUT} identified by "0:1" to
811 812 813
the (single) output stream in @file{out.wav}.

For example, to select the stream with index 2 from input file
814 815
@file{a.mov} (specified by the identifier "0:2"), and stream with
index 6 from input @file{b.mov} (specified by the identifier "1:6"),
816 817
and copy them to the output file @file{out.mov}:
@example
818
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
819 820
@end example

821 822 823 824
To select all video and the third audio stream from an input file:
@example
ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
@end example
825

826 827 828 829
To map all the streams except the second audio, use negative mappings
@example
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
@end example
830

831 832
To pick the English audio stream:
@example
Michael Niedermayer's avatar
Michael Niedermayer committed
833
ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
834 835
@end example

836 837
Note that using this option disables the default mappings for this output file.

838 839 840 841 842 843 844 845
@item -ignore_unknown
Ignore input streams with unknown type instead of failing if copying
such streams is attempted.

@item -copy_unknown
Allow input streams with unknown type to be copied instead of failing if copying
such streams is attempted.

846 847
@item -map_channel [@var{input_file_id}.@var{stream_specifier}.@var{channel_id}|-1][:@var{output_file_id}.@var{stream_specifier}]
Map an audio channel from a given input to an output. If
848
@var{output_file_id}.@var{stream_specifier} is not set, the audio channel will
849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869
be mapped on all the audio streams.

Using "-1" instead of
@var{input_file_id}.@var{stream_specifier}.@var{channel_id} will map a muted
channel.

For example, assuming @var{INPUT} is a stereo audio file, you can switch the
two audio channels with the following command:
@example
ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
@end example

If you want to mute the first channel and keep the second:
@example
ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
@end example

The order of the "-map_channel" option specifies the order of the channels in
the output stream. The output channel layout is guessed from the number of
channels mapped (mono if one "-map_channel", stereo if two, etc.). Using "-ac"
in combination of "-map_channel" makes the channel gain levels to be updated if
870 871
input and output channel layouts don't match (for instance two "-map_channel"
options and "-ac 6").
872

873 874 875
You can also extract each channel of an input to specific outputs; the following
command extracts two channels of the @var{INPUT} audio stream (file 0, stream 0)
to the respective @var{OUTPUT_CH0} and @var{OUTPUT_CH1} outputs:
876 877 878 879
@example
ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
@end example

880 881
The following example splits the channels of a stereo input into two separate
streams, which are put into the same output file:
882 883 884 885
@example
ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg
@end example

886 887 888 889 890
Note that currently each output stream can only contain channels from a single
input stream; you can't for example use "-map_channel" to pick multiple input
audio channels contained in different streams (from the same or different files)
and merge them into a single output stream. It is therefore not currently
possible, for example, to turn two separate mono streams into a single stereo
891
stream. However splitting a stereo stream into two single channel mono streams
892
is possible.
893

894 895 896
If you need this feature, a possible workaround is to use the @emph{amerge}
filter. For example, if you need to merge a media (here @file{input.mkv}) with 2
mono audio streams into one single stereo channel audio stream (and keep the
897
video stream), you can use the following command:
898
@example
899
ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
900 901
@end example

Michael Niedermayer's avatar
Michael Niedermayer committed
902
@item -map_metadata[:@var{metadata_spec_out}] @var{infile}[:@var{metadata_spec_in}] (@emph{output,per-metadata})
903 904
Set metadata information of the next output file from @var{infile}. Note that
those are file indices (zero-based), not filenames.
Michael Niedermayer's avatar
Michael Niedermayer committed
905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923
Optional @var{metadata_spec_in/out} parameters specify, which metadata to copy.
A metadata specifier can have the following forms:
@table @option
@item @var{g}
global metadata, i.e. metadata that applies to the whole file

@item @var{s}[:@var{stream_spec}]
per-stream metadata. @var{stream_spec} is a stream specifier as described
in the @ref{Stream specifiers} chapter. In an input metadata specifier, the first
matching stream is copied from. In an output metadata specifier, all matching
streams are copied to.

@item @var{c}:@var{chapter_index}
per-chapter metadata. @var{chapter_index} is the zero-based chapter index.

@item @var{p}:@var{program_index}
per-program metadata. @var{program_index} is the zero-based program index.
@end table
If metadata specifier is omitted, it defaults to global.
924

925
By default, global metadata is copied from the first input file,
926 927 928 929
per-stream and per-chapter metadata is copied along with streams/chapters. These
default mappings are disabled by creating any mapping of the relevant type. A negative
file index can be used to create a dummy mapping that just disables automatic copying.

930 931 932
For example to copy metadata from the first stream of the input file to global metadata
of the output file:
@example
933
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
934
@end example
Michael Niedermayer's avatar
Michael Niedermayer committed
935 936 937 938 939 940 941 942

To do the reverse, i.e. copy global metadata to all audio streams:
@example
ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
@end example
Note that simple @code{0} would work as well in this example, since global
metadata is assumed by default.

943 944 945 946 947
@item -map_chapters @var{input_file_index} (@emph{output})
Copy chapters from input file with index @var{input_file_index} to the next
output file. If no chapter mapping is specified, then chapters are copied from
the first input file with at least one chapter. Use a negative file index to
disable any chapter copying.
948

949
@item -benchmark (@emph{global})
950 951 952 953
Show benchmarking information at the end of an encode.
Shows CPU time used and maximum memory consumption.
Maximum memory consumption is not supported on all systems,
it will usually display as 0 if not supported.
954 955 956
@item -benchmark_all (@emph{global})
Show benchmarking information during the encode.
Shows CPU time used in various steps (audio/video encode/decode).
957 958
@item -timelimit @var{duration} (@emph{global})
Exit after ffmpeg has been running for @var{duration} seconds.
959
@item -dump (@emph{global})
960
Dump each input packet to stderr.
961
@item -hex (@emph{global})
962
When dumping packets, also dump the payload.
963
@item -re (@emph{input})
Diego Biurrun's avatar
Diego Biurrun committed
964
Read input at native frame rate. Mainly used to simulate a grab device.
965 966 967
or live input stream (e.g. when reading from a file). Should not be used
with actual grab devices or live input streams (where it can cause packet
loss).
968 969
By default @command{ffmpeg} attempts to read the input(s) as fast as possible.
This option will slow down the reading of the input(s) to the native frame rate
970
of the input(s). It is useful for real-time output (e.g. live streaming).
971
@item -loop_input
Diego Biurrun's avatar
Diego Biurrun committed
972 973
Loop over the input stream. Currently it works only for image
streams. This option is used for automatic FFserver testing.
Carl Eugen Hoyos's avatar
Carl Eugen Hoyos committed
974
This option is deprecated, use -loop 1.
975
@item -loop_output @var{number_of_times}
Diego Biurrun's avatar
Diego Biurrun committed
976
Repeatedly loop output for formats that support looping such as animated GIF
Diego Biurrun's avatar
Diego Biurrun committed
977
(0 will loop the output infinitely).
978
This option is deprecated, use -loop.
979
@item -vsync @var{parameter}
980
Video sync method.
Reimar Döffinger's avatar
Reimar Döffinger committed
981 982
For compatibility reasons old values can be specified as numbers.
Newly added values will have to be specified as strings always.
983 984

@table @option
985
@item 0, passthrough
986
Each frame is passed with its timestamp from the demuxer to the muxer.
987
@item 1, cfr
988
Frames will be duplicated and dropped to achieve exactly the requested
989
constant frame rate.
990
@item 2, vfr
991 992
Frames are passed through with their timestamp or dropped so as to
prevent 2 frames from having the same timestamp.
Reimar Döffinger's avatar
Reimar Döffinger committed
993 994 995
@item drop
As passthrough but destroys all timestamps, making the muxer generate
fresh timestamps based on frame-rate.
996
@item -1, auto
997 998 999 1000
Chooses between 1 and 2 depending on muxer capabilities. This is the
default method.
@end table

1001 1002 1003 1004
Note that the timestamps may be further modified by the muxer, after this.
For example, in the case that the format option @option{avoid_negative_ts}
is enabled.

1005 1006 1007 1008
With -map you can select from which stream the timestamps should be
taken. You can leave either video or audio unchanged and sync the
remaining stream(s) to the unchanged one.

1009 1010 1011 1012 1013 1014 1015
@item -frame_drop_threshold @var{parameter}
Frame drop threshold, which specifies how much behind video frames can
be before they are dropped. In frame rate units, so 1.0 is one frame.
The default is -1.1. One possible usecase is to avoid framedrops in case
of noisy timestamps or to increase frame drop precision in case of exact
timestamps.

1016
@item -async @var{samples_per_second}
1017
Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
1018 1019 1020
the parameter is the maximum samples per second by which the audio is changed.
-async 1 is a special case where only the start of the audio stream is corrected
without any later correction.
1021 1022 1023 1024 1025

Note that the timestamps may be further modified by the muxer, after this.
For example, in the case that the format option @option{avoid_negative_ts}
is enabled.

1026
This option has been deprecated. Use the @code{aresample} audio filter instead.
1027

1028
@item -copyts
1029 1030 1031 1032 1033
Do not process input timestamps, but keep their values without trying
to sanitize them. In particular, do not remove the initial start time
offset value.

Note that, depending on the @option{vsync} option or on specific muxer
1034 1035
processing (e.g. in case the format option @option{avoid_negative_ts}
is enabled) the output timestamps may mismatch with the input
1036 1037
timestamps even when this option is selected.

1038 1039 1040 1041 1042 1043
@item -start_at_zero
When used with @option{copyts}, shift input timestamps so they start at zero.

This means that using e.g. @code{-ss 50} will make output timestamps start at
50 seconds, regardless of what timestamp the input file started at.

1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067
@item -copytb @var{mode}
Specify how to set the encoder timebase when stream copying.  @var{mode} is an
integer numeric value, and can assume one of the following values:

@table @option
@item 1
Use the demuxer timebase.

The time base is copied to the output encoder from the corresponding input
demuxer. This is sometimes required to avoid non monotonically increasing
timestamps when copying video streams with variable frame rate.

@item 0
Use the decoder timebase.

The time base is copied to the output encoder from the corresponding input
decoder.

@item -1
Try to make the choice automatically, in order to generate a sane output.
@end table

Default value is -1.

1068
@item -shortest (@emph{output})
1069 1070 1071
Finish encoding when the shortest input stream ends.
@item -dts_delta_threshold
Timestamp discontinuity delta threshold.
1072
@item -muxdelay @var{seconds} (@emph{input})
1073
Set the maximum demux-decode delay.
1074
@item -muxpreload @var{seconds} (@emph{input})
1075
Set the initial demux-decode delay.
1076
@item -streamid @var{output-stream-index}:@var{new-value} (@emph{output})
1077 1078 1079 1080
Assign a new stream-id value to an output stream. This option should be
specified prior to the output filename to which it applies.
For the situation where multiple output files exist, a streamid
may be reassigned to a different value.
1081 1082 1083 1084 1085 1086

For example, to set the stream 0 PID to 33 and the stream 1 PID to 36 for
an output mpegts file:
@example
ffmpeg -i infile -streamid 0:33 -streamid 1:36 out.ts
@end example
1087 1088

@item -bsf[:@var{stream_specifier}] @var{bitstream_filters} (@emph{output,per-stream})
1089
Set bitstream filters for matching streams. @var{bitstream_filters} is
1090 1091 1092
a comma-separated list of bitstream filters. Use the @code{-bsfs} option
to get the list of bitstream filters.
@example
1093
ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
1094 1095
@end example
@example
1096
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
1097 1098
@end example

1099
@item -tag[:@var{stream_specifier}] @var{codec_tag} (@emph{input/output,per-stream})
1100
Force a tag/fourcc for matching streams.
1101 1102 1103 1104 1105 1106 1107

@item -timecode @var{hh}:@var{mm}:@var{ss}SEP@var{ff}
Specify Timecode for writing. @var{SEP} is ':' for non drop timecode and ';'
(or '.') for drop.
@example
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
@end example
1108

1109
@anchor{filter_complex_option}
1110
@item -filter_complex @var{filtergraph} (@emph{global})
1111
Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
1112 1113
outputs. For simple graphs -- those with one input and one output of the same
type -- see the @option{-filter} options. @var{filtergraph} is a description of
1114
the filtergraph, as described in the ``Filtergraph syntax'' section of the
1115
ffmpeg-filters manual.
1116 1117 1118 1119 1120 1121 1122 1123 1124 1125

Input link labels must refer to input streams using the
@code{[file_index:stream_specifier]} syntax (i.e. the same as @option{-map}
uses). If @var{stream_specifier} matches multiple streams, the first one will be
used. An unlabeled input will be connected to the first unused input stream of
the matching type.

Output link labels are referred to with @option{-map}. Unlabeled outputs are
added to the first output file.

1126 1127 1128
Note that with this option it is possible to use only lavfi sources without
normal input files.

1129 1130
For example, to overlay an image over video
@example
1131
ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
1132 1133 1134 1135 1136 1137 1138 1139 1140 1141
'[out]' out.mkv
@end example
Here @code{[0:v]} refers to the first video stream in the first input file,
which is linked to the first (main) input of the overlay filter. Similarly the
first video stream in the second input is linked to the second (overlay) input
of overlay.

Assuming there is only one video stream in each input file, we can omit input
labels, so the above is equivalent to
@example
1142
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
1143 1144 1145 1146 1147 1148
'[out]' out.mkv
@end example

Furthermore we can omit the output label and the single output from the filter
graph will be added to the output file automatically, so we can simply write
@example
1149
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
1150
@end example
1151 1152 1153

To generate 5 seconds of pure red video using lavfi @code{color} source:
@example
1154
ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
1155
@end example
1156 1157

@item -lavfi @var{filtergraph} (@emph{global})
1158
Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
1159 1160
outputs. Equivalent to @option{-filter_complex}.

1161 1162 1163 1164 1165
@item -filter_complex_script @var{filename} (@emph{global})
This option is similar to @option{-filter_complex}, the only difference is that
its argument is the name of the file from which a complex filtergraph
description is to be read.

1166 1167 1168 1169 1170 1171
@item -accurate_seek (@emph{input})
This option enables or disables accurate seeking in input files with the
@option{-ss} option. It is enabled by default, so seeking is accurate when
transcoding. Use @option{-noaccurate_seek} to disable it, which may be useful
e.g. when copying some streams and transcoding the others.

1172 1173 1174 1175 1176 1177 1178
@item -seek_timestamp (@emph{input})
This option enables or disables seeking by timestamp in input files with the
@option{-ss} option. It is disabled by default. If enabled, the argument
to the @option{-ss} option is considered an actual timestamp, and is not
offset by the start time of the file. This matters only for files which do
not start from timestamp 0, such as transport streams.

1179
@item -thread_queue_size @var{size} (@emph{input})
1180 1181 1182 1183 1184
This option sets the maximum number of queued packets when reading from the
file or device. With low latency / high rate live streams, packets may be
discarded if they are not read in a timely manner; raising this value can
avoid it.

1185
@item -override_ffserver (@emph{global})
1186 1187 1188 1189 1190 1191
Overrides the input specifications from @command{ffserver}. Using this
option you can map any input stream to @command{ffserver} and control
many aspects of the encoding from @command{ffmpeg}. Without this
option @command{ffmpeg} will transmit to @command{ffserver} what is
requested by @command{ffserver}.

1192
The option is intended for cases where features are needed that cannot be
1193
specified to @command{ffserver} but can be to @command{ffmpeg}.
1194

1195 1196 1197 1198 1199
@item -sdp_file @var{file} (@emph{global})
Print sdp information to @var{file}.
This allows dumping sdp information when at least one output isn't an
rtp stream.

1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223
@item -discard (@emph{input})
Allows discarding specific streams or frames of streams at the demuxer.
Not all demuxers support this.

@table @option
@item none
Discard no frame.

@item default
Default, which discards no frames.

@item noref
Discard all non-reference frames.

@item bidir
Discard all bidirectional frames.

@item nokey
Discard all frames excepts keyframes.

@item all
Discard all frames.
@end table

1224 1225 1226
@item -xerror (@emph{global})
Stop and exit on error

1227
@end table
Fabrice Bellard's avatar
Fabrice Bellard committed
1228

1229 1230
As a special exception, you can use a bitmap subtitle stream as input: it
will be converted into a video with the same size as the largest video in
1231
the file, or 720x576 if no video is present. Note that this is an
1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244
experimental and temporary solution. It will be removed once libavfilter has
proper support for subtitles.

For example, to hardcode subtitles on top of a DVB-T recording stored in
MPEG-TS format, delaying the subtitles by 1 second:
@example
ffmpeg -i input.ts -filter_complex \
  '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
  -sn -map '#0x2dc' output.mkv
@end example
(0x2d0, 0x2dc and 0x2ef are the MPEG-TS PIDs of respectively the video,
audio and subtitles streams; 0:0, 0:3 and 0:7 would have worked too)

1245 1246 1247 1248 1249
@section Preset files
A preset file contains a sequence of @var{option}=@var{value} pairs,
one for each line, specifying a sequence of options which would be
awkward to specify on the command line. Lines starting with the hash
('#') character are ignored and are used to provide comments. Check
1250
the @file{presets} directory in the FFmpeg source tree for examples.
1251

1252 1253 1254 1255
There are two types of preset files: ffpreset and avpreset files.

@subsection ffpreset files
ffpreset files are specified with the @code{vpre}, @code{apre},
1256 1257 1258 1259
@code{spre}, and @code{fpre} options. The @code{fpre} option takes the
filename of the preset instead of a preset name as input and can be
used for any kind of codec. For the @code{vpre}, @code{apre}, and
@code{spre} options, the options specified in a preset file are
1260 1261
applied to the currently selected codec of the same type as the preset
option.
1262

1263 1264 1265
The argument passed to the @code{vpre}, @code{apre}, and @code{spre}
preset options identifies the preset file to use according to the
following rules:
1266 1267

First ffmpeg searches for a file named @var{arg}.ffpreset in the
1268 1269
directories @file{$FFMPEG_DATADIR} (if set), and @file{$HOME/.ffmpeg}, and in
the datadir defined at configuration time (usually @file{PREFIX/share/ffmpeg})
Gianluigi Tiesi's avatar
Gianluigi Tiesi committed
1270
or in a @file{ffpresets} folder along the executable on win32,
1271 1272
in that order. For example, if the argument is @code{libvpx-1080p}, it will
search for the file @file{libvpx-1080p.ffpreset}.
1273 1274 1275 1276 1277

If no such file is found, then ffmpeg will search for a file named
@var{codec_name}-@var{arg}.ffpreset in the above-mentioned
directories, where @var{codec_name} is the name of the codec to which
the preset file options will be applied. For example, if you select
1278 1279
the video codec with @code{-vcodec libvpx} and use @code{-vpre 1080p},
then it will search for the file @file{libvpx-1080p.ffpreset}.
1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299

@subsection avpreset files
avpreset files are specified with the @code{pre} option. They work similar to
ffpreset files, but they only allow encoder- specific options. Therefore, an
@var{option}=@var{value} pair specifying an encoder cannot be used.

When the @code{pre} option is specified, ffmpeg will look for files with the
suffix .avpreset in the directories @file{$AVCONV_DATADIR} (if set), and
@file{$HOME/.avconv}, and in the datadir defined at configuration time (usually
@file{PREFIX/share/ffmpeg}), in that order.

First ffmpeg searches for a file named @var{codec_name}-@var{arg}.avpreset in
the above-mentioned directories, where @var{codec_name} is the name of the codec
to which the preset file options will be applied. For example, if you select the
video codec with @code{-vcodec libvpx} and use @code{-pre 1080p}, then it will
search for the file @file{libvpx-1080p.avpreset}.

If no such file is found, then ffmpeg will search for a file named
@var{arg}.avpreset in the same directories.

1300
@c man end OPTIONS
1301

1302 1303 1304 1305 1306
@chapter Examples
@c man begin EXAMPLES

@section Video and Audio grabbing

1307 1308
If you specify the input format and device then ffmpeg can grab video
and audio directly.
1309 1310 1311

@example
ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
1312 1313 1314 1315 1316
@end example

Or with an ALSA audio source (mono input, card id 1) instead of OSS:
@example
ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
1317 1318 1319
@end example

Note that you must activate the right video source and channel before
1320 1321
launching ffmpeg with any TV viewer such as
@uref{http://linux.bytesex.org/xawtv/, xawtv} by Gerd Knorr. You also
1322 1323 1324 1325 1326
have to set the audio recording levels correctly with a
standard mixer.

@section X11 grabbing

1327
Grab the X11 display with ffmpeg via
1328 1329

@example
1330
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
1331 1332 1333 1334 1335 1336
@end example

0.0 is display.screen number of your X11 server, same as
the DISPLAY environment variable.

@example
1337
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
1338 1339
@end example

1340 1341
0.0 is display.screen number of your X11 server, same as the DISPLAY environment
variable. 10 is the x-offset and 20 the y-offset for the grabbing.
1342 1343 1344

@section Video and Audio file format conversion

1345
Any supported file format and protocol can serve as input to ffmpeg:
1346 1347

Examples:
1348 1349 1350
@itemize
@item
You can use YUV files as input:
1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364

@example
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
@end example

It will use the files:
@example
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
@end example

The Y files use twice the resolution of the U and V files. They are
raw files, without header. They can be generated by all decent video
decoders. You must specify the size of the image with the @option{-s} option
1365
if ffmpeg cannot guess it.
1366

1367 1368
@item
You can input from a raw YUV420P file:
1369 1370 1371 1372 1373 1374 1375 1376 1377

@example
ffmpeg -i /tmp/test.yuv /tmp/out.avi
@end example

test.yuv is a file containing raw YUV planar data. Each frame is composed
of the Y plane followed by the U and V planes at half vertical and
horizontal resolution.

1378 1379
@item
You can output to a raw YUV420P file:
1380 1381 1382 1383 1384

@example
ffmpeg -i mydivx.avi hugefile.yuv
@end example

1385 1386
@item
You can set several input files and output files:
1387 1388 1389 1390 1391 1392 1393 1394

@example
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
@end example

Converts the audio file a.wav and the raw YUV video file a.yuv
to MPEG file a.mpg.

1395 1396
@item
You can also do audio and video conversions at the same time:
1397 1398 1399 1400 1401 1402 1403

@example
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
@end example

Converts a.wav to MPEG audio at 22050 Hz sample rate.

1404 1405
@item
You can encode to several formats at the same time and define a
1406 1407 1408
mapping from input stream to output streams:

@example
1409
ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
1410 1411 1412 1413 1414 1415
@end example

Converts a.wav to a.mp2 at 64 kbits and to b.mp2 at 128 kbits. '-map
file:index' specifies which input stream is used for each output
stream, in the order of the definition of output streams.

1416 1417
@item
You can transcode decrypted VOBs:
1418 1419

@example
1420
ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433
@end example

This is a typical DVD ripping example; the input is a VOB file, the
output an AVI file with MPEG-4 video and MP3 audio. Note that in this
command we use B-frames so the MPEG-4 stream is DivX5 compatible, and
GOP size is 300 which means one intra frame every 10 seconds for 29.97fps
input video. Furthermore, the audio stream is MP3-encoded so you need
to enable LAME support by passing @code{--enable-libmp3lame} to configure.
The mapping is particularly useful for DVD transcoding
to get the desired audio language.

NOTE: To see the supported input formats, use @code{ffmpeg -formats}.

1434 1435
@item
You can extract images from a video, or create a video from many images:
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451

For extracting images from a video:
@example
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
@end example

This will extract one video frame per second from the video and will
output them in files named @file{foo-001.jpeg}, @file{foo-002.jpeg},
etc. Images will be rescaled to fit the new WxH values.

If you want to extract just a limited number of frames, you can use the
above command in combination with the -vframes or -t option, or in
combination with -ss to start extracting from a certain point in time.

For creating a video from many images:
@example
1452
ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
1453 1454 1455 1456 1457
@end example

The syntax @code{foo-%03d.jpeg} specifies to use a decimal number
composed of three digits padded with zeroes to express the sequence
number. It is the same syntax supported by the C printf function, but
1458 1459
only formats accepting a normal integer are suitable.

1460 1461 1462 1463 1464 1465 1466
When importing an image sequence, -i also supports expanding
shell-like wildcard patterns (globbing) internally, by selecting the
image2-specific @code{-pattern_type glob} option.

For example, for creating a video from filenames matching the glob pattern
@code{foo-*.jpeg}:
@example
1467
ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
1468
@end example
1469

1470 1471
@item
You can put many streams of the same type in the output:
1472 1473

@example
1474
ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
1475 1476
@end example

1477 1478
The resulting output file @file{test12.nut} will contain the first four streams
from the input files in reverse order.
1479

1480 1481 1482
@item
To force CBR video output:
@example
1483
ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
1484 1485 1486 1487 1488 1489
@end example

@item
The four options lmin, lmax, mblmin and mblmax use 'lambda' units,
but you may use the QP2LAMBDA constant to easily convert from 'q' units:
@example
1490
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
1491 1492
@end example

1493
@end itemize
1494 1495
@c man end EXAMPLES

1496
@include config.texi
1497
@ifset config-all
1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520
@ifset config-avutil
@include utils.texi
@end ifset
@ifset config-avcodec
@include codecs.texi
@include bitstream_filters.texi
@end ifset
@ifset config-avformat
@include formats.texi
@include protocols.texi
@end ifset
@ifset config-avdevice
@include devices.texi
@end ifset
@ifset config-swresample
@include resampler.texi
@end ifset
@ifset config-swscale
@include scaler.texi
@end ifset
@ifset config-avfilter
@include filters.texi
@end ifset
1521 1522
@end ifset

1523 1524 1525
@chapter See Also

@ifhtml
1526 1527 1528 1529 1530 1531
@ifset config-all
@url{ffmpeg.html,ffmpeg}
@end ifset
@ifset config-not-all
@url{ffmpeg-all.html,ffmpeg-all},
@end ifset
1532 1533 1534 1535 1536
@url{ffplay.html,ffplay}, @url{ffprobe.html,ffprobe}, @url{ffserver.html,ffserver},
@url{ffmpeg-utils.html,ffmpeg-utils},
@url{ffmpeg-scaler.html,ffmpeg-scaler},
@url{ffmpeg-resampler.html,ffmpeg-resampler},
@url{ffmpeg-codecs.html,ffmpeg-codecs},
1537
@url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters},
1538 1539 1540 1541 1542 1543 1544
@url{ffmpeg-formats.html,ffmpeg-formats},
@url{ffmpeg-devices.html,ffmpeg-devices},
@url{ffmpeg-protocols.html,ffmpeg-protocols},
@url{ffmpeg-filters.html,ffmpeg-filters}
@end ifhtml

@ifnothtml
1545 1546 1547 1548 1549 1550
@ifset config-all
ffmpeg(1),
@end ifset
@ifset config-not-all
ffmpeg-all(1),
@end ifset
1551 1552 1553 1554 1555 1556
ffplay(1), ffprobe(1), ffserver(1),
ffmpeg-utils(1), ffmpeg-scaler(1), ffmpeg-resampler(1),
ffmpeg-codecs(1), ffmpeg-bitstream-filters(1), ffmpeg-formats(1),
ffmpeg-devices(1), ffmpeg-protocols(1), ffmpeg-filters(1)
@end ifnothtml

1557 1558
@include authors.texi

1559 1560 1561
@ignore

@setfilename ffmpeg
1562
@settitle ffmpeg video converter
1563 1564 1565

@end ignore

1566
@bye