ffmpeg.texi 60.7 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
@item -stream_loop @var{number} (@emph{input})
257 258
Set number of times input stream shall be looped. Loop 0 means no loop,
loop -1 means infinite loop.
259

260 261 262 263 264
@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
265
the stream is not to be re-encoded.
266 267 268 269 270 271 272 273 274 275 276 277 278 279

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.

280 281 282 283 284 285 286
@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}.

287 288
@var{duration} must be a time duration specification,
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
289

290 291 292 293
-to and -t are mutually exclusive and -t has priority.

@item -to @var{position} (@emph{output})
Stop writing the output at @var{position}.
294 295
@var{position} must be a time duration specification,
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
296 297 298

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

299
@item -fs @var{limit_size} (@emph{output})
300 301 302
Set the file size limit, expressed in bytes. No further chunk of bytes is written
after the limit is exceeded. The size of the output file is slightly more than the
requested file size.
303

304 305
@item -ss @var{position} (@emph{input/output})
When used as an input option (before @code{-i}), seeks in this input file to
306 307
@var{position}. Note that in most formats it is not possible to seek exactly,
so @command{ffmpeg} will seek to the closest seek point before @var{position}.
308 309 310 311 312 313 314
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}.
315

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

319 320
@item -sseof @var{position} (@emph{input/output})

321
Like the @code{-ss} option but relative to the "end of file". That is negative
322 323
values are earlier in the file, 0 is at EOF.

324
@item -itsoffset @var{offset} (@emph{input})
325
Set the input time offset.
326

327 328 329 330 331 332 333 334
@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})
335
Set the recording timestamp in the container.
336

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

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

343
An optional @var{metadata_specifier} may be given to set metadata
344 345
on streams, chapters or programs. See @code{-map_metadata}
documentation for details.
346 347 348 349

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

350
For example, for setting the title in the output file:
351
@example
352
ffmpeg -i in.avi -metadata title="my title" out.flv
353
@end example
354

Michael Niedermayer's avatar
Michael Niedermayer committed
355
To set the language of the first audio stream:
356
@example
357
ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
358 359
@end example

360
@item -program [title=@var{title}:][program_num=@var{program_num}:]st=@var{stream}[:st=@var{stream}...] (@emph{output})
361

362
Creates a program with the specified @var{title}, @var{program_num} and adds the specified
363 364
@var{stream}(s) to it.

365
@item -target @var{type} (@emph{output})
366 367 368 369
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
370 371 372 373 374

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

Diego Biurrun's avatar
Diego Biurrun committed
375 376
Nevertheless you can specify additional options as long as you know
they do not conflict with the standard, as in:
377 378 379 380 381

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

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

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

388 389
@item -q[:@var{stream_specifier}] @var{q} (@emph{output,per-stream})
@itemx -qscale[:@var{stream_specifier}] @var{q} (@emph{output,per-stream})
390
Use fixed quality scale (VBR). The meaning of @var{q}/@var{qscale} is
391
codec-dependent.
392 393 394 395 396
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.
397

398
@anchor{filter_option}
399 400
@item -filter[:@var{stream_specifier}] @var{filtergraph} (@emph{output,per-stream})
Create the filtergraph specified by @var{filtergraph} and use it to
401 402
filter the stream.

403
@var{filtergraph} is a description of the filtergraph to apply to
404
the stream, and must have a single input and a single output of the
405
same type of the stream. In the filtergraph, the input is associated
406 407 408 409 410
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
411
want to create filtergraphs with multiple inputs and/or outputs.
412

413 414 415 416 417
@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
418 419 420 421
@item -pre[:@var{stream_specifier}] @var{preset_name} (@emph{output,per-stream})
Specify the preset for matching stream(s).

@item -stats (@emph{global})
422 423
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
424

425 426 427 428 429 430 431 432
@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".

433 434
@item -stdin
Enable interaction on standard input. On by default unless standard input is
435 436
used as an input. To explicitly disable interaction you need to specify
@code{-nostdin}.
437

438 439 440 441
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.
442

443 444 445 446 447 448 449 450
@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
451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
@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
473
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
Michael Niedermayer's avatar
Michael Niedermayer committed
474 475 476
@end example
To extract all attachments to files determined by the @code{filename} tag:
@example
477
ffmpeg -dump_attachment:t "" -i INPUT
Michael Niedermayer's avatar
Michael Niedermayer committed
478 479 480 481 482
@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.
483

484 485 486
@item -noautorotate
Disable automatically rotating video based on file metadata.

487 488 489 490
@end table

@section Video Options

491
@table @option
492
@item -vframes @var{number} (@emph{output})
493
Set the number of video frames to output. This is an alias for @code{-frames:v}.
494
@item -r[:@var{stream_specifier}] @var{fps} (@emph{input/output,per-stream})
495 496 497 498
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}.
499 500 501
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}.
502 503

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

506
@item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream})
507 508 509 510 511 512 513 514 515 516
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.

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

519
@item -aspect[:@var{stream_specifier}] @var{aspect} (@emph{output,per-stream})
520 521 522 523 524 525 526
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.

527 528 529 530
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.

531
@item -vn (@emph{output})
Diego Biurrun's avatar
Diego Biurrun committed
532
Disable video recording.
533

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

537
@item -pass[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
538 539 540 541 542
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.
543 544 545
On pass 1, you may just deactivate audio and set output to null,
examples for Windows and Unix:
@example
546 547
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
548
@end example
549

550
@item -passlogfile[:@var{stream_specifier}] @var{prefix} (@emph{output,per-stream})
551 552 553
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
554
stream
555

556 557
@item -vf @var{filtergraph} (@emph{output})
Create the filtergraph specified by @var{filtergraph} and use it to
558
filter the stream.
559

560
This is an alias for @code{-filter:v}, see the @ref{filter_option,,-filter option}.
561 562
@end table

563
@section Advanced Video options
564

565
@table @option
566 567
@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
568
pixel formats.
569 570 571 572
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
573
inside filtergraphs are disabled.
574 575 576
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.

577
@item -sws_flags @var{flags} (@emph{input/output})
578
Set SwScaler flags.
579
@item -vdt @var{n}
580
Discard threshold.
Stefano Sabatini's avatar
Stefano Sabatini committed
581

582
@item -rc_override[:@var{stream_specifier}] @var{override} (@emph{output,per-stream})
583
Rate control override for specific intervals, formatted as "int,int,int"
584 585 586
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
587

588
@item -ilme
Diego Biurrun's avatar
Diego Biurrun committed
589 590 591 592 593
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
594
@item -psnr
Diego Biurrun's avatar
Diego Biurrun committed
595
Calculate PSNR of compressed frames.
Fabrice Bellard's avatar
Fabrice Bellard committed
596
@item -vstats
Diego Biurrun's avatar
Diego Biurrun committed
597
Dump video coding statistics to @file{vstats_HHMMSS.log}.
598
@item -vstats_file @var{file}
599
Dump video coding statistics to @var{file}.
600
@item -top[:@var{stream_specifier}] @var{n} (@emph{output,per-stream})
601
top=1/bottom=0/auto=-1 field first
602
@item -dc @var{precision}
603
Intra_dc_precision.
604 605 606 607
@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
608
@item -vbsf @var{bitstream_filter}
609
Deprecated see -bsf
610

611
@item -force_key_frames[:@var{stream_specifier}] @var{time}[,@var{time}...] (@emph{output,per-stream})
612
@item -force_key_frames[:@var{stream_specifier}] expr:@var{expr} (@emph{output,per-stream})
613 614
Force key frames at the specified timestamps, more precisely at the first
frames after each specified time.
615 616 617 618 619

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.

620 621 622
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.
623 624
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.
625 626 627 628 629 630

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
631

632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662
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
663 664 665
@item -copyinkf[:@var{stream_specifier}] (@emph{output,per-stream})
When doing stream copy, copy also non-key frames found at the
beginning.
666 667 668 669 670 671 672 673 674 675

@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.
676

677 678 679
@item vda
Use Apple VDA hardware acceleration.

680 681
@item vdpau
Use VDPAU (Video Decode and Presentation API for Unix) hardware acceleration.
682 683 684

@item dxva2
Use DXVA2 (DirectX Video Acceleration) hardware acceleration.
685 686 687 688 689 690 691 692 693 694

@item qsv
Use the Intel QuickSync Video acceleration for video transcoding.

Unlike most other values, this option does not enable accelerated decoding (that
is used automatically whenever a qsv decoder is selected), but accelerated
transcoding, without copying the frames into the system memory.

For it to work, both the decoder and the encoder must support QSV acceleration
and no filters must be used.
695 696 697 698 699 700
@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
701
faster than software decoding on modern CPUs. Additionally, @command{ffmpeg}
702 703 704 705 706 707 708 709 710 711
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.
712 713 714 715 716

@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
717 718 719 720

@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.
721 722 723 724 725 726 727 728 729 730 731 732 733 734

@item qsv
For QSV, this option corresponds to the valus of MFX_IMPL_* . Allowed values
are:
@table @option
@item auto
@item sw
@item hw
@item auto_any
@item hw_any
@item hw2
@item hw3
@item hw4
@end table
735
@end table
736 737 738 739

@item -hwaccels
List all hardware acceleration methods supported in this build of ffmpeg.

Fabrice Bellard's avatar
Fabrice Bellard committed
740 741 742 743 744
@end table

@section Audio Options

@table @option
745
@item -aframes @var{number} (@emph{output})
746
Set the number of audio frames to output. This is an alias for @code{-frames:a}.
747
@item -ar[:@var{stream_specifier}] @var{freq} (@emph{input/output,per-stream})
748 749 750 751
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.
752 753 754
@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})
755 756 757 758
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.
759
@item -an (@emph{output})
Diego Biurrun's avatar
Diego Biurrun committed
760
Disable audio recording.
761 762 763
@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
764
Set the audio sample format. Use @code{-sample_fmts} to get a list
765
of supported sample formats.
766

767 768
@item -af @var{filtergraph} (@emph{output})
Create the filtergraph specified by @var{filtergraph} and use it to
769 770 771
filter the stream.

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

774
@section Advanced Audio options
775 776

@table @option
777 778
@item -atag @var{fourcc/tag} (@emph{output})
Force audio tag/fourcc. This is an alias for @code{-tag:a}.
779
@item -absf @var{bitstream_filter}
780
Deprecated, see -bsf
781 782 783 784 785 786
@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.
787 788
@end table

789
@section Subtitle options
790 791

@table @option
792 793 794
@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
795
Disable subtitle recording.
796
@item -sbsf @var{bitstream_filter}
797
Deprecated, see -bsf
Fabrice Bellard's avatar
Fabrice Bellard committed
798 799
@end table

800
@section Advanced Subtitle options
801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816

@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.

817 818 819
@item -canvas_size @var{size}
Set the size of the canvas used to render subtitles.

820 821
@end table

Fabrice Bellard's avatar
Fabrice Bellard committed
822 823 824
@section Advanced options

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

827
Designate one or more input streams as a source for the output file. Each input
828 829
stream is identified by the input file index @var{input_file_id} and
the input stream index @var{input_stream_id} within the input
830 831
file. Both indices start at 0. If specified,
@var{sync_file_id}:@var{stream_specifier} sets which input stream
832 833
is used as a presentation sync reference.

834
The first @code{-map} option on the command line specifies the
835 836 837
source for output stream 0, the second @code{-map} option specifies
the source for output stream 1, etc.

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

841 842 843 844
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.

845 846 847 848 849
For example, to map ALL streams from the first input file to output
@example
ffmpeg -i INPUT -map 0 output
@end example

850
For example, if you have two audio streams in the first input file,
851 852
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
853 854
example:
@example
855
ffmpeg -i INPUT -map 0:1 out.wav
856
@end example
857
will map the input stream in @file{INPUT} identified by "0:1" to
858 859 860
the (single) output stream in @file{out.wav}.

For example, to select the stream with index 2 from input file
861 862
@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"),
863 864
and copy them to the output file @file{out.mov}:
@example
865
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
866 867
@end example

868 869 870 871
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
872

873 874 875 876
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
877

878 879
To pick the English audio stream:
@example
Michael Niedermayer's avatar
Michael Niedermayer committed
880
ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
881 882
@end example

883 884
Note that using this option disables the default mappings for this output file.

885 886 887 888 889 890 891 892
@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.

893 894
@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
895
@var{output_file_id}.@var{stream_specifier} is not set, the audio channel will
896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916
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
917 918
input and output channel layouts don't match (for instance two "-map_channel"
options and "-ac 6").
919

920 921 922
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:
923 924 925 926
@example
ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
@end example

927 928
The following example splits the channels of a stereo input into two separate
streams, which are put into the same output file:
929 930 931 932
@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

933 934 935 936 937
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
938
stream. However splitting a stereo stream into two single channel mono streams
939
is possible.
940

941 942 943
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
944
video stream), you can use the following command:
945
@example
946
ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
947 948
@end example

Michael Niedermayer's avatar
Michael Niedermayer committed
949
@item -map_metadata[:@var{metadata_spec_out}] @var{infile}[:@var{metadata_spec_in}] (@emph{output,per-metadata})
950 951
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
952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970
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.
971

972
By default, global metadata is copied from the first input file,
973 974 975 976
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.

977 978 979
For example to copy metadata from the first stream of the input file to global metadata
of the output file:
@example
980
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
981
@end example
Michael Niedermayer's avatar
Michael Niedermayer committed
982 983 984 985 986 987 988 989

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.

990 991 992 993 994
@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.
995

996
@item -benchmark (@emph{global})
997 998 999 1000
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.
1001 1002 1003
@item -benchmark_all (@emph{global})
Show benchmarking information during the encode.
Shows CPU time used in various steps (audio/video encode/decode).
1004 1005
@item -timelimit @var{duration} (@emph{global})
Exit after ffmpeg has been running for @var{duration} seconds.
1006
@item -dump (@emph{global})
1007
Dump each input packet to stderr.
1008
@item -hex (@emph{global})
1009
When dumping packets, also dump the payload.
1010
@item -re (@emph{input})
Diego Biurrun's avatar
Diego Biurrun committed
1011
Read input at native frame rate. Mainly used to simulate a grab device.
1012 1013 1014
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).
1015 1016
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
1017
of the input(s). It is useful for real-time output (e.g. live streaming).
1018
@item -loop_input
Diego Biurrun's avatar
Diego Biurrun committed
1019 1020
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
1021
This option is deprecated, use -loop 1.
1022
@item -loop_output @var{number_of_times}
Diego Biurrun's avatar
Diego Biurrun committed
1023
Repeatedly loop output for formats that support looping such as animated GIF
Diego Biurrun's avatar
Diego Biurrun committed
1024
(0 will loop the output infinitely).
1025
This option is deprecated, use -loop.
1026
@item -vsync @var{parameter}
1027
Video sync method.
Reimar Döffinger's avatar
Reimar Döffinger committed
1028 1029
For compatibility reasons old values can be specified as numbers.
Newly added values will have to be specified as strings always.
1030 1031

@table @option
1032
@item 0, passthrough
1033
Each frame is passed with its timestamp from the demuxer to the muxer.
1034
@item 1, cfr
1035
Frames will be duplicated and dropped to achieve exactly the requested
1036
constant frame rate.
1037
@item 2, vfr
1038 1039
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
1040 1041 1042
@item drop
As passthrough but destroys all timestamps, making the muxer generate
fresh timestamps based on frame-rate.
1043
@item -1, auto
1044 1045 1046 1047
Chooses between 1 and 2 depending on muxer capabilities. This is the
default method.
@end table

1048 1049 1050 1051
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.

1052 1053 1054 1055
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.

1056 1057 1058 1059 1060 1061 1062
@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.

1063
@item -async @var{samples_per_second}
1064
Audio sync method. "Stretches/squeezes" the audio stream to match the timestamps,
1065 1066 1067
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.
1068 1069 1070 1071 1072

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.

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

1075
@item -copyts
1076 1077 1078 1079 1080
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
1081 1082
processing (e.g. in case the format option @option{avoid_negative_ts}
is enabled) the output timestamps may mismatch with the input
1083 1084
timestamps even when this option is selected.

1085 1086 1087 1088 1089 1090
@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.

1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114
@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.

1115
@item -shortest (@emph{output})
1116 1117 1118
Finish encoding when the shortest input stream ends.
@item -dts_delta_threshold
Timestamp discontinuity delta threshold.
1119
@item -muxdelay @var{seconds} (@emph{input})
1120
Set the maximum demux-decode delay.
1121
@item -muxpreload @var{seconds} (@emph{input})
1122
Set the initial demux-decode delay.
1123
@item -streamid @var{output-stream-index}:@var{new-value} (@emph{output})
1124 1125 1126 1127
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.
1128 1129 1130 1131 1132 1133

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
1134 1135

@item -bsf[:@var{stream_specifier}] @var{bitstream_filters} (@emph{output,per-stream})
1136
Set bitstream filters for matching streams. @var{bitstream_filters} is
1137 1138 1139
a comma-separated list of bitstream filters. Use the @code{-bsfs} option
to get the list of bitstream filters.
@example
1140
ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
1141 1142
@end example
@example
1143
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
1144 1145
@end example

1146
@item -tag[:@var{stream_specifier}] @var{codec_tag} (@emph{input/output,per-stream})
1147
Force a tag/fourcc for matching streams.
1148 1149 1150 1151 1152 1153 1154

@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
1155

1156
@anchor{filter_complex_option}
1157
@item -filter_complex @var{filtergraph} (@emph{global})
1158
Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or
1159 1160
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
1161
the filtergraph, as described in the ``Filtergraph syntax'' section of the
1162
ffmpeg-filters manual.
1163 1164 1165 1166 1167 1168 1169 1170 1171 1172

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.

1173 1174 1175
Note that with this option it is possible to use only lavfi sources without
normal input files.

1176 1177
For example, to overlay an image over video
@example
1178
ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
1179 1180 1181 1182 1183 1184 1185 1186 1187 1188
'[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
1189
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
1190 1191 1192 1193 1194 1195
'[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
1196
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
1197
@end example
1198 1199 1200

To generate 5 seconds of pure red video using lavfi @code{color} source:
@example
1201
ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
1202
@end example
1203 1204

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

1208 1209 1210 1211 1212
@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.

1213 1214 1215 1216 1217 1218
@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.

1219 1220 1221 1222 1223 1224 1225
@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.

1226
@item -thread_queue_size @var{size} (@emph{input})
1227 1228 1229 1230 1231
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.

1232
@item -override_ffserver (@emph{global})
1233 1234 1235 1236 1237 1238
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}.

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

1242
@item -sdp_file @var{file} (@emph{global})
1243
Print sdp information for an output stream to @var{file}.
1244
This allows dumping sdp information when at least one output isn't an
1245
rtp stream. (Requires at least one of the output formats to be rtp).
1246

1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
@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

1271 1272 1273 1274 1275 1276 1277 1278
@item -abort_on @var{flags} (@emph{global})
Stop and abort on various conditions. The following flags are available:

@table @option
@item empty_output
No packets were passed to the muxer, the output is empty.
@end table

1279 1280 1281
@item -xerror (@emph{global})
Stop and exit on error

1282
@end table
Fabrice Bellard's avatar
Fabrice Bellard committed
1283

1284 1285
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
1286
the file, or 720x576 if no video is present. Note that this is an
1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299
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)

1300 1301 1302 1303 1304
@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
1305
the @file{presets} directory in the FFmpeg source tree for examples.
1306

1307 1308 1309 1310
There are two types of preset files: ffpreset and avpreset files.

@subsection ffpreset files
ffpreset files are specified with the @code{vpre}, @code{apre},
1311 1312 1313 1314
@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
1315 1316
applied to the currently selected codec of the same type as the preset
option.
1317

1318 1319 1320
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:
1321 1322

First ffmpeg searches for a file named @var{arg}.ffpreset in the
1323 1324
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
1325
or in a @file{ffpresets} folder along the executable on win32,
1326 1327
in that order. For example, if the argument is @code{libvpx-1080p}, it will
search for the file @file{libvpx-1080p.ffpreset}.
1328 1329 1330 1331 1332

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
1333 1334
the video codec with @code{-vcodec libvpx} and use @code{-vpre 1080p},
then it will search for the file @file{libvpx-1080p.ffpreset}.
1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354

@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.

1355
@c man end OPTIONS
1356

1357 1358 1359 1360 1361
@chapter Examples
@c man begin EXAMPLES

@section Video and Audio grabbing

1362 1363
If you specify the input format and device then ffmpeg can grab video
and audio directly.
1364 1365 1366

@example
ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
1367 1368 1369 1370 1371
@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
1372 1373 1374
@end example

Note that you must activate the right video source and channel before
1375 1376
launching ffmpeg with any TV viewer such as
@uref{http://linux.bytesex.org/xawtv/, xawtv} by Gerd Knorr. You also
1377 1378 1379 1380 1381
have to set the audio recording levels correctly with a
standard mixer.

@section X11 grabbing

1382
Grab the X11 display with ffmpeg via
1383 1384

@example
1385
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
1386 1387 1388 1389 1390 1391
@end example

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

@example
1392
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
1393 1394
@end example

1395 1396
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.
1397 1398 1399

@section Video and Audio file format conversion

1400
Any supported file format and protocol can serve as input to ffmpeg:
1401 1402

Examples:
1403 1404 1405
@itemize
@item
You can use YUV files as input:
1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419

@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
1420
if ffmpeg cannot guess it.
1421

1422 1423
@item
You can input from a raw YUV420P file:
1424 1425 1426 1427 1428 1429 1430 1431 1432

@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.

1433 1434
@item
You can output to a raw YUV420P file:
1435 1436 1437 1438 1439

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

1440 1441
@item
You can set several input files and output files:
1442 1443 1444 1445 1446 1447 1448 1449

@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.

1450 1451
@item
You can also do audio and video conversions at the same time:
1452 1453 1454 1455 1456 1457 1458

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

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

1459 1460
@item
You can encode to several formats at the same time and define a
1461 1462 1463
mapping from input stream to output streams:

@example
1464
ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
1465 1466 1467 1468 1469 1470
@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.

1471 1472
@item
You can transcode decrypted VOBs:
1473 1474

@example
1475
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
1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488
@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}.

1489 1490
@item
You can extract images from a video, or create a video from many images:
1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506

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
1507
ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
1508 1509 1510 1511 1512
@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
1513 1514
only formats accepting a normal integer are suitable.

1515 1516 1517 1518 1519 1520 1521
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
1522
ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
1523
@end example
1524

1525 1526
@item
You can put many streams of the same type in the output:
1527 1528

@example
1529
ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
1530 1531
@end example

1532 1533
The resulting output file @file{test12.nut} will contain the first four streams
from the input files in reverse order.
1534

1535 1536 1537
@item
To force CBR video output:
@example
1538
ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
1539 1540 1541 1542 1543 1544
@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
1545
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
1546 1547
@end example

1548
@end itemize
1549 1550
@c man end EXAMPLES

1551
@include config.texi
1552
@ifset config-all
1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575
@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
1576 1577
@end ifset

1578 1579 1580
@chapter See Also

@ifhtml
1581 1582 1583 1584 1585 1586
@ifset config-all
@url{ffmpeg.html,ffmpeg}
@end ifset
@ifset config-not-all
@url{ffmpeg-all.html,ffmpeg-all},
@end ifset
1587 1588 1589 1590 1591
@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},
1592
@url{ffmpeg-bitstream-filters.html,ffmpeg-bitstream-filters},
1593 1594 1595 1596 1597 1598 1599
@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
1600 1601 1602 1603 1604 1605
@ifset config-all
ffmpeg(1),
@end ifset
@ifset config-not-all
ffmpeg-all(1),
@end ifset
1606 1607 1608 1609 1610 1611
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

1612 1613
@include authors.texi

1614 1615 1616
@ignore

@setfilename ffmpeg
1617
@settitle ffmpeg video converter
1618 1619 1620

@end ignore

1621
@bye